Can someone identify what is wrong with this script?

Lisa Goldman
Kilo Sage

Hello,

 

I'm attempting to populate my direct reportee text box based on the name in the 'My name' box, but I couldn't get it to work. Can someone identify what is wrong with this script? Thank you.

 

LisaGoldman_0-1707440203340.png

 

Client Scripts:

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var requestor = g_form.getValue('my_name');
    var ga = new GlideAjax('UserUtils');
    ga.addParam('sysparm_name', 'getDirectReports');
    ga.addParam('sysparm_user', requestor);
    ga.getXMLAnswer(populateDirectReports);

    function populateDirectReports(answer) {
        if (answer) {
            var arr = JSON.parse(answer);
            var direct_reports = arr.join("\n");
            g_form.setValue('my_direct_reportee_text', direct_reports);
        }
    }

}
 
Script Include:
Client callable option is checked
var UserUtils = Class.create();
UserUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    getDirectReports: function() {
       
        var directReports = [];
       
        var grUser = new GlideRecord('sys_user');
        grUser.addActiveQuery();
        grUser.addQuery('manager', this.getParameter('sysparm_user'));
        grUser.orderBy('name');
        grUser.query();
       
        while (grUser.next()) {
            directReports.push(grUser.getValue('name'));
        }
       
        return JSON.stringify(directReports);
       
    },

    type: 'UserUtils'
});
 

 

 

2 ACCEPTED SOLUTIONS

Harish KM
Kilo Patron
Kilo Patron

Hi @Lisa Goldman there is a error in your script include

getDirectReports: function() {

var directReports = [];

var grUser = new GlideRecord('sys_user');
grUser.addActiveQuery();
grUser.addQuery('sys_id',this.getParameter('sysparm_user')); // need to get user's manager, in this case abraham manager
//grUser.addQuery('manager', this.getParameter('sysparm_user'));
grUser.orderBy('name');
grUser.query();

while (grUser.next()) {
directReports.push(grUser.getDisplayValue('manager'));// get display value of manager
}

return JSON.stringify(directReports);

},

Regards
Harish

View solution in original post

Hi @Lisa Goldman Users will have always a single manager so I have modified your script include and client script as below

Script include:

getDirectReports: function() {

var grUser = new GlideRecord('sys_user');
grUser.addActiveQuery();
grUser.addQuery('sys_id', this.getParameter('sysparm_user'));
grUser.orderBy('name');
grUser.query();
if(grUser.next())
{
if (grUser.manager == '') {
return "";// no manager return blank value
}
else{

return grUser.manager.name.toString();

}
}
},

 

client script:

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var requestor = g_form.getValue('my_name');
    var ga = new GlideAjax('catalogUtils');
    ga.addParam('sysparm_name', 'getDirectReports');
    ga.addParam('sysparm_user', requestor);
    ga.getXMLAnswer(populateDirectReports);

    function populateDirectReports(answer) {


        if (answer) {
            g_form.setValue('my_direct_reportee_text', answer);
        } else {
            alert("not found");
        }
    }

}
Regards
Harish

View solution in original post

8 REPLIES 8

Harish KM
Kilo Patron
Kilo Patron

Hi @Lisa Goldman there is a error in your script include

getDirectReports: function() {

var directReports = [];

var grUser = new GlideRecord('sys_user');
grUser.addActiveQuery();
grUser.addQuery('sys_id',this.getParameter('sysparm_user')); // need to get user's manager, in this case abraham manager
//grUser.addQuery('manager', this.getParameter('sysparm_user'));
grUser.orderBy('name');
grUser.query();

while (grUser.next()) {
directReports.push(grUser.getDisplayValue('manager'));// get display value of manager
}

return JSON.stringify(directReports);

},

Regards
Harish

Hi @Harish KM ,

One last question: I need to add a popup message in the code if a user does not have a manager. Could you please help?  Thanks

Hi @Lisa Goldman you could add else part in client script like below

function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var requestor = g_form.getValue('my_name');
var ga = new GlideAjax('UserUtils');
ga.addParam('sysparm_name', 'getDirectReports');
ga.addParam('sysparm_user', requestor);
ga.getXMLAnswer(populateDirectReports);

function populateDirectReports(answer) {

if (answer) {
var arr = JSON.parse(answer);
var direct_reports = arr.join("\n");
g_form.setValue('my_direct_reportee_text', direct_reports);
}
else
{
alert("No Manager found");
}

}
}

Regards
Harish

@Harish KM 

I copied your suggested code. I wonder why the 'else' condition is not triggering.

I have tried the following users, but the alert did not display.

LisaGoldman_0-1707445461442.png