- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-02-2022 11:50 PM
Hello Guys,please help me to achieve this,
For my custom table, i have created two date/time type of fields which are Start Date and End Date.
I have created third field also named as Duration which is of duration type
Now, whenever value of End Date field changes on the form, my duration field should populate the difference between Start Date and End Date in duration form( days and difference in time)
To achieve this i have written a script include and called it from onchange type of client script(Field name= End Date),
still my Duration field is not getting populated as i desired
please see my script and help me out, Thanks in advance!!
Script Include:
var DurationCalculation = Class.create();
DurationCalculation.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getDuration: function() {
var dateTimediff;
var date1= new GlideDateTime();
var date2= new GlideDateTime();
var fromdate= this.getParameter('sysparm_from_date');
var todate= this.getParameter('sysparm_to_date');
date1.setValue(fromdate);
date2.setValue(todate);
dateTimediff=GlideDateTime.substract(date1,date2);
return dateTimediff.getDisplayvalue();
},
type: 'DurationCalculation'
});
Client script:(Type- onChange and field name-End Date)
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var fromdate = g_form.getValue('u_start_date');
var todate = g_form.getValue('u_end_date');
var ga= new GlideAjax('DurationCalculation');
ga.addParam('sysparm_name','getDuration');
ga.addParam('sysparm_from_date',fromdate);
ga.addParam('sysparm_to_date',todate);
ga.getXML(CBF);
function CBF(response){
var answer= response.responseXML.documentElement.getAttribute("answer");
g_form.setValue('u_duration',answer);
}
}
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-03-2022 12:07 AM
Hi,
update as this
var DurationCalculation = Class.create();
DurationCalculation.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getDuration: function() {
var dateTimediff;
var date1= new GlideDateTime();
var date2= new GlideDateTime();
var fromdate= this.getParameter('sysparm_from_date');
var todate= this.getParameter('sysparm_to_date');
date1.setValue(fromdate);
date2.setValue(todate);
dateTimediff = GlideDateTime.substract(date1,date2);
return dateTimediff.getDurationValue();
},
type: 'DurationCalculation'
});
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-03-2022 12:13 AM
Hi,
If you use business rule to get this requirement then use below code.
(function executeRule(current, previous /*null when async*/ ) {
var gdtStart = new GlideDateTime(current.getValue('work_start')); //give your start date column name
var gdtEnd = new GlideDateTime(current.getValue('work_end')); //give your end date column name
var duration = new GlideDateTime.subtract(gdtStart, gdtEnd); //difference between gdtStart and gdtEnd
current.u_duration = duration.getDurationValue(); //update to your duration field
})(current, previous);
Thanks,
Pavankumar
ServiceNow Community MVP 2024.
Thanks,
Pavankumar
