Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

glideajax and script include code

Kanika4
Tera Contributor

Hi

I have a requirement to only show users who are managers on the form

I am doing glideajax call onload of form.

 

Script include function:

 getGMapproval: function() {
        var managersList = [];
        var userManager = new GlideRecord('sys_user');
        userManager.addQuery('manager','userManager');
        userManager.query();
        while (userManager.next()) {
            managersList.push(userManager.getUniqueValue());
        }
        return managersList;
    },
 
ClientScript:
 
   var manager = new GlideAjax('ClientUtils');
    manager.addParam('sysparm_name', 'getGMapproval');
    //manager.addParam('sysparm_user', g_form.getValue(''));
    manager.getXML(setGMapproval);

    function setGMapproval(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");
        g_form.addOption('u_manager', answer);
    }
 
 
The code is not correctly filtering out the managers. 
4 REPLIES 4

Pradnyesh
Kilo Sage

Hello @Kanika4 ,

From below scripting you will get all the list of managers and you can put it in a choice field on any form.

Do one client script and use below code in it : 

function onLoad() {
    //Type appropriate comment here, and begin script below
    var ga = new GlideAjax('getManagers');


    ga.addParam('sysparm_name', 'callManager');


    ga.getXML(HelloWorldParse);



    function HelloWorldParse(response) {


        var answer = response.responseXML.documentElement.getAttribute("answer");


        //alert(typeof(answer));
        var arr = answer.split(',');
        alert(arr);
        alert(typeof(arr));

        var newArr = [];
        for (var i = 0; i < arr.length; i++) {
            if (!newArr.includes(arr[i])) {
                newArr.push(arr[i]);
            }
        }
        for(var j = 0; j < newArr.length; j++){
            g_form.addOption('u_managers', newArr[j], newArr[j]);
        }
       


    }

}
And also do one client callable script include as below : 

var getManagers = Class.create();
getManagers.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    callManager: function(){
        gs.log('30082024 Enter in function');
        managers = [];
        var gr = new GlideRecord('sys_user');
        gr.addEncodedQuery('managerISNOTEMPTY');
        gr.query();
        while(gr.next()){
            managers.push(gr.manager.name);
        }
        gs.log('30082024 '+managers);
        gs.log('30082024 '+typeof(managers));
        return managers.toString();
    },

    type: 'getManagers'
});
While doing client callable script include, ACL will generate at background with your providing role so you can choose a role so that script include run for user who has that role and options will see in that field.

Pradnyesh_0-1724997700868.pngPradnyesh_1-1724997749933.png


If above solution resolve your problem then please mark my answer as helpful.
Thank You !

Hi,

 

When I tried to implemented your code, the form field is just loading and loading and the page keeps on loading and become unresponsive. I have tried everything but its working.

 

Could you pls point out whats the issue with my code

   // getGMapproval: function() {
    //  var au = new global.ArrayUtil();
    //     var managersList = [];
    //     var managersUniqueList = [];
    //     var user = new GlideRecord('sys_user');
    //     user.addEncodedQuery('manager.active=true^managerISNOTEMPTY');
    //     user.setLimit(200);
    //     user.query();
    //     while (user.next()) {
    //         managersList.push(user.getUniqueValue());
    //     }
    //     managersUniqueList = au.unique(managersList);
    //     return managersUniqueList;
    // },
 
 
-------------------
   //Type appropriate comment here, and begin script below
    // var manager = new GlideAjax('MinorWorksClientUtils');
    // manager.addParam('sysparm_name', 'getGMapproval');
    // manager.getXML(setGMapproval);

    // function setGMapproval(response) {
    //     var answer = response.responseXML.documentElement.getAttribute("answer");
    //     var arr = answer.split(',');

    //     for (var i = 0; i < arr.length; i++) {
    //         g_form.addOption('u_gm_approver', arr[i]);
    //     }
    // }

Also, its not filtering out the managers. Ihave seen the users who are not managers for any other user.

Arya123
Tera Expert

Hi @Kanika4 

Please try the below code:

 

var ClientUtils = Class.create();
ClientUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    getGMapproval: function() {
        var managersList = [];
        var userManager = new GlideRecord('sys_user');
        userManager.addNotNullQuery('manager');
        userManager.query();
        while (userManager.next()) {
            var managerName = userManager.getValue('name');
            var managerSysId = userManager.getUniqueValue(); // manager's sys_id
            managersList.push(managerSysId + ':' + managerName); // Return both sys_id and name for the option
        }
        return managersList.join(',');
    }
});

-----------------------------------------------------------------
Client Script

var manager = new GlideAjax('ClientUtils');
manager.addParam('sysparm_name', 'getGMapproval');
manager.getXMLAnswer(setGMapproval);

function setGMapproval(response) {
    var managers = response.split(',');
    g_form.clearOptions('u_manager');

   
    for (var i = 0; i < managers.length; i++) {
        var managerData = managers[i].split(':');
        var managerSysId = managerData[0];
        var managerName = managerData[1];
        g_form.addOption('u_manager', managerSysId, managerName);
    }
}