Question about scripting in a Scheduled Job

David Livingst1
Tera Contributor

Hello everyone,

 

 I am trying to fill in two fields on the sys_user_groups table based on the sys_user_group.manager reference field. There is a flag on the User table and we need to bring the user with the flag and their manager over to two fields on the group table. I believe that my issue is in the 'return results' (May be wrong) of the below scripts but I don't know how to retrieve the two pieces of data and update the 2 fields on the group table.

 

var qry = 'active=true^managerISNOTEMPTY';
gr = new GlideRecord('sys_user_group');
gr.addEncodedQuery(qry);
gr.query();
while (gr.next()) {
    var user = gr.manager;
    xltUser(user); //Function in same scheduled job - see below
    var obj = result.evalJSON();
    gr.field1 = obj.x;
    gr.field2 = obj.y;
    gr.update();
}


function xltUser(user) {
    var myObj = {};
    myObj.x = '';
    myObj.y = '';
    var grUser = new GlideRecord('sys_user');
    grUser.addQuery('sys_id', user);
    grUser.query();
    while (grUser.next()) {
        if (grUser.flag == true) {
            myObj.x = grUser;
            myObj.y = grUser.manager;
            var json = new JSON();
            var result = json.encode(myObj);
            return result;
        } else {
            xltUser(grUser.manager);
        }
    }
}
 
Any help is appreciated.
2 REPLIES 2

AnveshKumar M
Tera Sage
Tera Sage

Hi @David Livingst1 

Try the following script. Change the field names as per their original names in your configuration.

 

var qry = 'active=true^managerISNOTEMPTY';

gr = new GlideRecord('sys_user_group');

gr.addEncodedQuery(qry);

gr.query();

while (gr.next()) {

    var user = gr.getValue('manager');

    var obj = xltUser(user);

    gr.setValue('field1', obj.x);

    gr.setValue('field2', obj.y);

    gr.update();

}

 

 

function xltUser(user) {

    var myObj = {

        x : '',

        y : ''

    };

    

    var grUser = new GlideRecord('sys_user');

    grUser.addQuery('sys_id', user);

    grUser.query();

    if (grUser.next()) {

        if (grUser.getValue('flag') == true || grUser.getValue('flag') == '1') {

            myObj.x = grUser.getUniqueValue();

            myObj.y = grUser.getValue('manager');

            return myObj;

        } else {

            xltUser(grUser.getValue('manager'));

        }

    }

    return myObj;

}

 

Please mark my answer helpful and accept as a solution if it helped 👍

Thanks,
Anvesh

Community Alums
Not applicable

Hi @David Livingst1 ,

 

May i know the reason for using scheduled job here.

For me, it seems pretty much a background script or fix script.

 

var gr =new GlideRecord('sys_user_group');

gr.addEncodedQuery('active=true^managerISNOTEMPTY');

gr.query();

while(gr.next()){

var grUser = new GlideRecord('sys_user');

grUser.get('sys_id',gr.manager);

if(grUser.u_flag == true){

gr.u_field1 = grUser;

gr.u_field2 = grUser.manager;

gr.update();

}

}

 

Something like this should update your valid group records. Hope this helps.

 

Regards

Saranesh