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

Hi @Lisa Goldman could you check alert here and respond back?

 

function populateDirectReports(answer) {
alert(JSON.stringify(answer,null,4);
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 

We are almost there. Just need a bit of cleaning:

The alert should display: 'No Manager found.'

Instead of this

 

LisaGoldman_0-1707446230312.png

 

or

 

LisaGoldman_1-1707446375166.png

 

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

@Harish KM 

Thank you for your time and effort. It's working beautifully.