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);
    }
}