Scheduled JOB Script for the Change Request

GBS
Tera Contributor

Hi, I'm using the script below, which is not working. Can anyone help me with the script to trigger the notification for the below
A notification has to be triggered 1 workday after the planned end date of a change is reached, and the Change Type is Normal, and the State is Implement

(function executeRule(current, gsr) {
    var gr = new GlideRecord('change_request');
    gr.addQuery('type', 'normal'); // Change Type = Normal
    gr.addQuery('state', 'implement'); // State = Implement

    // Planned end date is 1 working day ago
    var gdt = new GlideDateTime();
    gdt.subtractDays(1);
    // Skip weekends
    while (isWeekend(gdt)) {
        gdt.subtractDays(1);
    }

    gr.addQuery('end_date', '<=', gdt);
    gr.query();

    while (gr.next()) {
        gs.eventQueue('change.implement.overdue', gr, gr.sys_id, gs.getUserID());
    }

    function isWeekend(dateTime) {
        var day = parseInt(dateTime.getDayOfWeekLocalTime(), 10); // 1 = Monday, 7 = Sunday
        return day === 6 || day === 7;
    }
})(current, gsr);

 

9 REPLIES 9

Omender Singh
Tera Guru

please try below script

(function executeRule(current, gsr) {

    var targetDate = getPreviousWorkday(); // Get the last working day

    var gr = new GlideRecord('change_request');
    gr.addQuery('type', 'normal'); // Change Type = Normal
    gr.addQuery('state', 'implement'); // State = Implement
    gr.addQuery('end_date', '<=', targetDate); // Planned End Date reached (1 workday ago)
    gr.query();

    while (gr.next()) {
        // Trigger event
        gs.eventQueue('change.implement.overdue', gr, gr.sys_id, gs.getUserID());
    }

    // Get the last working day (skip weekends)
    function getPreviousWorkday() {
        var gdt = new GlideDateTime();
        do {
            gdt.subtractDays(1);
        } while (isWeekend(gdt));
        return gdt;
    }

    // Returns true if the date is Saturday(6) or Sunday(7)
    function isWeekend(gdt) {
        var day = parseInt(gdt.getDayOfWeekLocalTime(), 10);
        return (day === 6 || day === 7);
    }

})(current, gsr);

 

@Omender Singh the script is not working

palanikumar
Giga Sage

Hi,

I think subtractDays is not working properly. Instead use addDays(-1) as below:

 

(function executeRule(current, gsr) {
    var gr = new GlideRecord('change_request');
    gr.addQuery('type''normal'); // Change Type = Normal
    gr.addQuery('state''implement'); // State = Implement

 

    // Planned end date is 1 working day ago
    var gdt = new GlideDateTime();
    gdt.addDays(-1);
    // Skip weekends
    while (isWeekend(gdt)) {
        gdt.addDays(-1);
    }

 

    gr.addQuery('end_date''<=', gdt);
    gr.query();

 

    while (gr.next()) {
        gs.eventQueue('change.implement.overdue', gr, gr.sys_id, gs.getUserID());
    }

 

    function isWeekend(dateTime) {
        var day = parseInt(dateTime.getDayOfWeekLocalTime(), 10); // 1 = Monday, 7 = Sunday
        return day === 6 || day === 7;
    }
})(current, gsr);
Thank you,
Palani

GBS
Tera Contributor

@palanikumar not working