Time tracker in DFFS

Forums Dynamic Forms for SharePoint Time tracker in DFFS

This topic contains 7 replies, has 2 voices, and was last updated by  Alexander Bautz 8 months ago.

  • Author
    Posts
  • #19532

    Leon Perdue
    Participant

    Hi Alex,

    I am having issues with the time tracker you posted a while ago: time-tracker-in-a-dffs-enabled-list

    I used this with my SP2010 site, which was recently upgraded to 2013. I now get a JS error when a new item is started. When hitting OK the start timer button is not showing.

    I created a new list, and added the code itself, the button shows and starts the timer. I then added each new column one at a time, and figured out the error only occurs when the multiple lines of text column are added. I’ve tried plain text and enhanced rich text.

    Hoping you can help me figure this one out.

    Thank you

    Attachments:
  • #19568

    Alexander Bautz
    Keymaster

    It’s hard to tell, but if you could attach the Custom JS code here I might be able to see what could be wrong.

    Do you see any errors in the console (hit F12 > Console)?

    Alexander

  • #19617

    Leon Perdue
    Participant

    Sorry for the delay:

    using the same code you provided in the topic

    
    
    (function(){
     var a = [], b = [], tt;
     a.push("<tr style='font-size:18px;color:green;'>");
     a.push("<td colspan='2' style='padding:2px;'>");
     a.push("<span id='elapsedTime'></span><span id='totalTime'></span>"); 
     a.push("</td>");
     a.push("</tr>");
     $("table.ms-formtable").prepend(a.join(""));
     b.push("<span title='You can save and close the list item while the timer is running. It will keep tracking time until you edit the item and click \"Stop the timer\".'>");
     b.push("<input style='background-color:#C2CF8A;color:#444;' type='button' id='dffsTimeTrackerStartBtn' value='Start the timer' onclick='startTicker()'>");
     b.push("<input style='background-color:#D57C7C;color:#ffffff;display:none;' type='button' id='dffsTimeTrackerStopBtn' value='Stop the timer' onclick='stopTicker()'>");
     b.push("<span>&nbsp;</span>");
     b.push("</span>");
     $("input[id$='_diidIOSaveItem']:last").before(b.join(""));
     tt = getFieldValue("TotalTimeString");
     if(tt !== ""){
     $("#elapsedTime").html("Total time: "+getFriendlyTime(Number(tt)));
     }
    })();
    
    function startTicker(){
     var a= getFieldValue("StartTimeString");
     if(a === ""){
     setFieldValue("StartTimeString",new Date().valueOf());
     $("#dffsTimeTrackerStartBtn").hide();
     $("#dffsTimeTrackerStopBtn").show();
     $("#totalTime").html("");
     }
    }
    
    function stopTicker(){
     var a = getFieldValue("StartTimeString")
     , b = new Date().valueOf()
     , u = spjs.utility.userInfo(_spPageContextInfo.userId)
     , et = b-Number(a)
     , tt = Number(getFieldValue("TotalTimeString")) + et
     , log = getFieldValue("Log")
     , al = getFieldValue("Activity");
     setFieldValue("TotalTimeString",Number(tt));
     // Reset start time and log
     setFieldValue("StartTimeString","");
     setFieldValue("Activity","");
     if(a !== ""){
     if(log !== ""){
     log += "\n*******************\n";
     }
     if(al !== ""){
     al = "\n\nActivity log:\n"+al;
     }
     setFieldValue("Log",log+u.Title+"\nStart: "+new Date(Number(a)).toLocaleString(_spPageContextInfo.currentUICultureName)+"\nEnd: "+new Date().toLocaleString(_spPageContextInfo.currentUICultureName)+"\nElapsed time="+getFriendlyTime(et)+al);
     }
     $("#elapsedTime").html("");
     $("#totalTime").html("Total time: "+getFriendlyTime(tt));
     $("#dffsTimeTrackerStartBtn").show();
     $("#dffsTimeTrackerStopBtn").hide();
    }
    
    function getFriendlyTime(ms){
     var h, m, s;
     h = Math.floor(ms / 3600000);
     m = Math.floor((ms % 3600000) / 60000);
     s = Math.floor((ms % 60000) / 1000);
     return (h<10?"0"+h:h)+":"+(m<10?"0"+m:m)+":"+(s<10?"0"+s:s);
    }
    
    if(getFieldValue("StartTimeString") !== ""){
     $("#dffsTimeTrackerStartBtn").hide();
     $("#dffsTimeTrackerStopBtn").show();
    }
    
    setInterval(function(){
     var a = getFieldValue("StartTimeString"), b = new Date().valueOf(), tt = Number(getFieldValue("TotalTimeString"));
     if(a !== ""){
     $("#elapsedTime").html("Elapsed time: "+getFriendlyTime(b - Number(a))); 
     if(tt !== ""){
     $("#elapsedTime").append(" / Total time: "+getFriendlyTime(tt + (b - Number(a))));
     }
     } 
    },1000);

    console message:
    jquery.js:4 [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user’s experience. For more help, check https://xhr.spec.whatwg.org/.

    When i delete any multi line text field i get no error.

    Attachments:
  • #19670

    Alexander Bautz
    Keymaster

    From this error it looks like you it fails in this line:

    $("table.ms-formtable").prepend(a.join(""));

    This is a bit strange because this is the default formtable. Could you try hitting F12 > console and type this in the console:

    $("table.ms-formtable").length;

    It should ouptput “1” when you hit enter.

    The console error is “by design” and doesn’t result in any actual error – is related to a synchronous ajax request. I’ll fix this in a future DFFS update to make it asynchronous.

    Alexander

  • #19672

    Leon Perdue
    Participant

    Hi Alexander,

    Here is the console response

    $(“table.ms-formtable”).length;
    VM344:1 Uncaught TypeError: Cannot read property ‘length’ of null
    at <anonymous>:1:24

  • #19678

    Alexander Bautz
    Keymaster

    OK, this is strange. Is this a normal SharePoint form, or has it been modified in SharePoint Designer?

    Alexander

  • #19688

    Leon Perdue
    Participant

    It is a normal SP 2013 custom list. The form is only customized with DFFS.

    I even tried creating a brand new test list and get the same errors.

  • #19732

    Alexander Bautz
    Keymaster

    What kind of list template did you use? Is it possible for me to log in and look at it? – if so, you can email me the login details.

    Alexander

You must be logged in to reply to this topic.