Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

GlideDateTime.subtract

Vikram3
Tera Guru

Hello,

(function executeRule(current, previous /*null when async*/ ) {
    var responseSLA;
    var resolutionSLA;
    var resCheck;
    var resoCheck;
    var durCheck;
    var slaCheck = new GlideRecord('task_sla');
    slaCheck.addQuery('task', current.sys_id);
    slaCheck.query();
    while (slaCheck.next()) {
        if (slaCheck.task.assignment_group.name.includes('Supply')) {
            if (slaCheck.sla == 'c791bb61dbd658508a7cd0b2ca961906') {
                responseSLA = slaCheck.start_time.getDisplayValue();
            }
            if (slaCheck.sla == '7ea3bba1dbd658508a7cd0b2ca9619ac' && slaCheck.stage == 'completed') {
                resolutionSLA = slaCheck.end_time.getDisplayValue();                
            }
			calcTime();
        }
        if (slaCheck.task.assignment_group.name.includes('AOG')) {
            if (slaCheck.sla == '4858c35fdb9b50508a7cd0b2ca9619df') {
                responseSLA = slaCheck.start_time.getDisplayValue();
            }
            if (slaCheck.sla == '6d48835fdb9b50508a7cd0b2ca961950' && slaCheck.stage == 'completed') {
                resolutionSLA = slaCheck.end_time.getDisplayValue();
            }
			calcTime();
        }
    }

    function calcTime() {
        resCheck = GlideDateTime(responseSLA);
        resoCheck = GlideDateTime(resolutionSLA);
        durCheck = GlideDateTime.subtract(resCheck, resoCheck);
        var finalTime = new GlideDuration(durCheck);
        current.u_supplychain_calc = finalTime;
    }
	//current.update();
})(current, previous);

Above code will do subtraction of start and end date of two sla when it is completed. I want to subtract pause duration value from "finalTime" value. FYI, pause value is a duration field from task_sla. Can anyone assist on this.

1 ACCEPTED SOLUTION

Vikram3
Tera Guru

This got resolved by getting pause time as below

pauseDuration = slaCheck.pause_duration.dateNumericValue();

and after that,

durCheck = GlideDateTime.subtract(resCheck, resoCheck).getNumericValue();
var subTime = durCheck - pauseDuration;
var finalTime = current.u_supplychain_calc.setDateNumericValue(subTime);

View solution in original post

27 REPLIES 27

Hitoshi Ozawa
Giga Sage
Giga Sage

Just .subtract() GlideDuration together.

(function executeRule(current, previous /*null when async*/ ) {
    var responseSLA;
    var resolutionSLA;
    var resCheck;
    var resoCheck;
    var durCheck;
    var pauseDuration;
    var slaCheck = new GlideRecord('task_sla');
    slaCheck.addQuery('task', current.sys_id);
    slaCheck.query();
    while (slaCheck.next()) {
        if (slaCheck.task.assignment_group.name.includes('Supply')) {
            if (slaCheck.sla == 'c791bb61dbd658508a7cd0b2ca961906') {
                responseSLA = slaCheck.start_time.getDisplayValue();
            }
            if (slaCheck.sla == '7ea3bba1dbd658508a7cd0b2ca9619ac' && slaCheck.stage == 'completed') {
                resolutionSLA = slaCheck.end_time.getDisplayValue();                
            }
			calcTime();
        }
        if (slaCheck.task.assignment_group.name.includes('AOG')) {
            if (slaCheck.sla == '4858c35fdb9b50508a7cd0b2ca9619df') {
                responseSLA = slaCheck.start_time.getDisplayValue();
            }
            if (slaCheck.sla == '6d48835fdb9b50508a7cd0b2ca961950' && slaCheck.stage == 'completed') {
                resolutionSLA = slaCheck.end_time.getDisplayValue();
            }
			calcTime();
        }
        pauseDuration = slaCheck.pause_duration;
    }

    function calcTime() {
        resCheck = GlideDateTime(responseSLA);
        resoCheck = GlideDateTime(resolutionSLA);
        durCheck = GlideDateTime.subtract(resCheck, resoCheck);
        var diffTime = new GlideDuration(durCheck);
        var finalTime = diffTime.subtract(pauseDuration);
        current.u_supplychain_calc = finalTime;

    }
	//current.update();
})(current, previous);

Hi Hozawa,

I am getting below error

find_real_file.png

The error may be caused when pause_duration is empty. Try adding if condition to check if not empty.

if (pauseDuration) {
        var finalTime = diffTime.subtract(pauseDuration);
        current.u_supplychain_calc = finalTime;
}

Pause duration is not empty.

find_real_file.png