Expand my Community achievements bar.

Import acrobat form (update JavaScript calculation of time) to livecycle Designer ?

Avatar

Level 1

Hi,

I retrieve and edit an acrobat form with date calculations.

When I import it into livecycle, the JavaScript script does not work.

Would there be someone who could update the javascript in LCD?

https://adobe.ly/2n5oY3l

snip_20180123232212.png

Thanks You

>Nicolas B.

Ce message a été modifié par : nicolas barbaz

3 Replies

Avatar

Level 10

Your form is an AcroForm and needs to be editied with Acrobat instead LiveCycle Designer.

Avatar

Level 10

In LiveCycle Designer you'll have to modify your calculations scripts.

For example the calculate script of the field TimeHHMM.0:

The AcroForm script …

event.value = '';

// get the start time

var sStart = this.getField('TimeIn.0').value;

// get the end time

var sEnd = this.getField('TimeOut.0').value;

// complete script if we have data

if(sStart != '' & sEnd != '') {

// convert sStart string to seconds

var fStart = Time2Num('hh:mm', sStart);

// convert sEnd string to seconds

var fEnd = Time2Num('hh:mm', sEnd);

// convert sEnd string to seconds

var fEnd = Time2Num('hh:mm', sEnd);

// compute difference in seconds

var fDiff = fEnd - fStart;

// convert to rounded minutes

fDiff = Math.round(fDiff / 60);

// get hours from fDiff

fHours = Math.floor(fDiff / 60);

// get minutes less than hour from fDiff

fMins = ((fDiff / 60) - fHours ) * 60;

// format fMins with leading zero

sMins = util.printf("%,302.0f", fMins);

// build display string

event.value = fHours + ':' + sMins;

}

… modified to work in a XFA form.

var cResult = "",

oStart = xfa.resolveNode("TimeIn\\.0"),

oEnd = xfa.resolveNode("TimeOut\\.0"),

Time2Num = function (cFormat, cTime) {

if (cTime === "") {

return "";

} else {

var oTime = util.scand("mm/dd/yyyy " + cFormat, "01/01/1970 " + cTime),

cTZOffset = (oTime.getTimezoneOffset() * 1000 * 60),

cTime = oTime.valueOf() - cTZOffset;

return Math.round(cTime / 1000, 10);

}

},

iStart, iEnd, iDiff, iHours, iMins;

if (!oStart.isNull && !oEnd.isNull) {

iStart = Time2Num("hh:mm", oStart.formattedValue);

iEnd = Time2Num("hh:mm", oEnd.formattedValue);

iDiff = Math.round((iEnd - iStart) / 60);

iHours = Math.floor(iDiff / 60);

iMins = util.printf("%,302.0f", ((iDiff / 60) - iHours ) * 60);

cResult = iHours.toString().concat(":").concat(iMins.toString());

}

this.rawValue = cResult;

Avatar

Level 1

Great!! thank you very much radzmar

here is the xfa form version :  https://adobe.ly/2rIPvIE

I adapted your code to calculate the totals. It works for the days (total-lun, ...) but not for the total of the week (Total.TimeHHMM). Could you help me?

total-lun,... it's ok But now, l'am eoo could you also edit the fields  Total.TimeHHMM,

Total-lun : it's ok

var cResult = "", 

oStart = xfa.resolveNode("TimeHHMM\\.0"), 

oEnd = xfa.resolveNode("TimeHHMM\\.1"), 

Time2Num = function (cFormat, cTime) { 

if (cTime === "") { 

return ""; 

} else { 

var oTime = util.scand("mm/dd/yyyy " + cFormat, "01/01/1970 " + cTime), 

cTZOffset = (oTime.getTimezoneOffset() * 1000 * 60), 

cTime = oTime.valueOf() - cTZOffset; 

return Math.round(cTime / 1000, 10); 

}, 

iStart, iEnd, iDiff, iHours, iMins; 

 

if (!oStart.isNull && !oEnd.isNull) { 

iStart = Time2Num("hh:mm", oStart.formattedValue); 

iEnd = Time2Num("hh:mm", oEnd.formattedValue); 

iDiff = Math.round((iEnd + iStart) / 60); 

iHours = Math.floor(iDiff / 60); 

iMins = util.printf("%,302.0f", ((iDiff / 60) - iHours ) * 60); 

cResult = iHours.toString().concat(":").concat(iMins.toString()); 

this.rawValue = cResult; 

Total.TimeHHMM

var cResult = "", 

olun = xfa.resolveNode("Total-lun"), 

omar = xfa.resolveNode("Total-mar"),

omer = xfa.resolveNode("Total-lun"), 

ojeu = xfa.resolveNode("Total-mar"),

oven = xfa.resolveNode("Total-lun"), 

Time2Num = function (cFormat, cTime) { 

if (cTime === "") { 

return ""; 

} else { 

app.alert(cTime);

var oTime = util.scand("mm/dd/yyyy " + cFormat, "01/01/1970 " + cTime), 

cTZOffset = (oTime.getTimezoneOffset() * 1000 * 60), 

cTime = oTime.valueOf() - cTZOffset; 

return Math.round(cTime / 1000, 10); 

}, 

iStart, iEnd, iDiff, iHours, iMins; 

 

if (!olun.isNull && !omar.isNull && !omer.isNull && !ojeu.isNull && !oven.isNull) { 

ilun = Time2Num("hh:mm", olun.formattedValue); 

imar = Time2Num("hh:mm", omar.formattedValue);

imer = Time2Num("hh:mm", omer.formattedValue); 

ijeu = Time2Num("hh:mm", ojeu.formattedValue);

iven = Time2Num("hh:mm", oven.formattedValue); 

iDiff = Math.round((ilun + imar + imer + ijeu + iven) / 60); 

iHours = Math.floor(iDiff / 60); 

iMins = util.printf("%,302.0f", ((iDiff / 60) - iHours ) * 60); 

cResult = iHours.toString().concat(":").concat(iMins.toString()); 

this.rawValue = cResult;