Scheduled Job- On a Catalog Form, RITM/REQTASK should not get created for existing users/colleagues

AbdurRahmanSnow
Giga Guru

Good afternoon.
I have a Catalog Form, where new users details will be entered. Then a Scheduled Job runs in the background and submits.
The requirement is: this form should only create RITM/REQTASK for new users. But what is happening is, if the existing user is given, then also it is creating RITM but not REQTASK. A workflow is also running in the background.

Example: Assume a person's profile got created (sys_created_on) in 2016 and his start date (u_start_date) is 2024 will be mentioned on his sys_user profile. But the point is, he is an existing user, but then too, for him, if we submit the form, RITM is getting created. Please check the below code and help me out. 

AbdurRahmanSnow_0-1741678580353.png

The script is below:

var userGR = new GlideRecord('sys_user');
userGR.addEncodedQuery("manager!=915dd5b80f3f52007b3a3e7ce1050e61");
userGR.addQuery('u_new_user_notification_sent', false);
userGR.addNotNullQuery('manager');
userGR.addNotNullQuery('u_start_date');

//userGR.addEncodedQuery('sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()');
//userGR.addEncodedQuery('u_start_dateRELATIVELT@dayofweek@ago@3');
//userGR.addEncodedQuery('u_start_dateRELATIVEGT@dayofweek@ahead@28');

userGR.addQuery('sys_created_on', '=', gs.beginningOfToday());
//userGR.addQuery('u_start_date', '>=', gs.daysAgoStart(3));
userGR.addQuery('u_start_date', '<=', gs.dateGenerate(gs.daysAgoStart(-28)));

//userGR.addQuery('u_start_date', '>=', gs.daysAgoStart(3));
//userGR.addQuery('sys_created_on', '>=', gs.daysAgoStart(1));
userGR.query();
//

while(userGR.next()) {
    var cart = new Cart();
    var item = cart.addItem('0cbbe496db880c10db945a48dc96193a'); //Catalog form sys_id
    cart.setVariable(item, 'name', userGR.name);
    cart.setVariable(item, 'support_group', userGR.u_support_group);
    cart.setVariable(item, 'requested_for', userGR.sys_id);
    cart.setVariable(item, 'location', userGR.location);
    cart.setVariable(item, 'division', userGR.u_division);
    cart.setVariable(item, 'email', userGR.email);
    cart.setVariable(item, 'start_date', userGR.u_start_date);
    cart.update();
    var rc = cart.placeOrder();
   
    userGR.setValue('u_new_user_notification_sent', true);
    userGR.update();
}

 

1 ACCEPTED SOLUTION

@AbdurRahmanSnow 

try this

answer = ifScript();
function ifScript() {
    var date;
    var user = '105d95b80f3f52007b3a3e7ce1050edc';
    var gr = new GlideRecord("sys_user");
    gr.addQuery("sys_id", user);
    gr.query();
    if (gr.next()) {
        date = gr.sys_created_on;
        gs.info("User " + gr.name + " User creation date " + date);
    }
 
    var nowTime = new GlideDateTime(date).getDate();
    var dateField = new GlideDateTime('2025-03-11 11:11:03').getDate();
    var c_date = new GlideDate();
    var dur1 = GlideDate.subtract(nowTime, c_date).getDayPart();
 
    if (dur1 == 0) {
        gs.info("Start Date of field " + dateField);
        gs.info("Creation date trimming time " + nowTime);
        var dur = GlideDateTime.subtract(nowTime, dateField);
        var days = dur.getDayPart();
        gs.info("Real time " + days);
        if (days >= -3 && days <= 28) {
            return 'yes';
        }
    }
    return 'no';
}

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

View solution in original post

7 REPLIES 7

@AbdurRahmanSnow 

try this

answer = ifScript();
function ifScript() {
    var date;
    var user = '105d95b80f3f52007b3a3e7ce1050edc';
    var gr = new GlideRecord("sys_user");
    gr.addQuery("sys_id", user);
    gr.query();
    if (gr.next()) {
        date = gr.sys_created_on;
        gs.info("User " + gr.name + " User creation date " + date);
    }
 
    var nowTime = new GlideDateTime(date).getDate();
    var dateField = new GlideDateTime('2025-03-11 11:11:03').getDate();
    var c_date = new GlideDate();
    var dur1 = GlideDate.subtract(nowTime, c_date).getDayPart();
 
    if (dur1 == 0) {
        gs.info("Start Date of field " + dateField);
        gs.info("Creation date trimming time " + nowTime);
        var dur = GlideDateTime.subtract(nowTime, dateField);
        var days = dur.getDayPart();
        gs.info("Real time " + days);
        if (days >= -3 && days <= 28) {
            return 'yes';
        }
    }
    return 'no';
}

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

OlaN
Giga Sage
Giga Sage

Hi,

So you have a Catalog item that gets submitted, and a scheduled job that runs regularly, and submits another Catalog item based on some conditions from this first catalog item. Why?

Seems unnecessary complex. Why not do all the logic in the first Catalog item directly ?

Hi OlaN. I found a similar condition in worklfow script. The code is below. Please check, why for existing users, it is creating RITM/REQTASK.

answer = ifScript();
gs.info('answer is: ' + answer);

function ifScript() {
    var date;
    var user = '105d95b80f3f52007b3a3e7ce1050edc';
    var gr = new GlideRecord("sys_user");
    gr.addQuery("sys_id", user);
    gr.query();
    if (gr.next()) {
        date = gr.sys_created_on;
        gs.info("User " + gr.name + "User creation date " + date);
    }
 
    var nowTime = new GlideDateTime(date).getDate();
    var dateField = new GlideDateTime('2025-03-11 11:11:03').getDate();
    var c_date = new GlideDate();
    var dur1 = new GlideDuration();
    dur1 = GlideDate.subtract(nowTime, c_date).getDayPart();
 
    if (dur1 == '0') {
 
        gs.info("Start Date  of field " + dateField);
        //var nowTime = new GlideDateTime(date).getDate();
        gs.info("Creation date trimming time " + nowTime);
        var dur = new GlideDuration();
        // dur = GlideDateTime.subtract(dateField, nowTime);
        dur = GlideDateTime.subtract(nowTime, dateField);
        var days = dur.getDayPart();
        gs.info("Real time " + days);
        if (days >= -3 && days <= 28)
            return 'yes';
       
    }
    return 'no';
 
}