I need to Fetch caller/user's manager and manager's manager and so on till top level until the last manager whose manager should be empty

bhanu27
Tera Expert

Hi Leads, 

i had a requirement below, please help on this.

  • caller creates a incident.
  • Background process (a rule or client script) looks at caller's manager ànd  manager’s manager so on …  till top level until the last manager whose manager should be empty.
  • But using below script i can able to loop till third level, is any feature in snow restricting my function, or my script is wrong please help.

Client Script: 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {

var callerID = g_form.getValue('caller_id');
var si =new GlideAjax('getCallerID');
si.addParam('sysparm_name','getUserInfo');
si.addParam('sysparm_caller_id',callerID);
//si.getXML(getManager);
si.getXML(getUserInfo);
//function getManager(response){
function getUserInfo(response){

var manager = response.responseXML.documentElement.getAttribute('answer');
alert("Manager Name: "+ manager);

}
}

Script Include : 

 

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

getUserInfo: function() {
var userID = this.getParameter('sysparm_caller_id');
var gr = new GlideRecord('sys_user');
gr.addQuery('sys_id',userID);
gr.query();
gr.next();
if(gr.manager!=''){
//while(gr.next()!=''){
for (i = 0; i < gr.next(); i++)
{
manager = gr.manager.getRefRecord().getDisplayValue('manager');
}
// var i= 0;
// do{
// //if(i<1){
// if(gr.manager()!=''){
// manager = gr.manager.getRefRecord().getDisplayValue('manager');
// return manager;
// }
// i++;
// }while(i<5);

return manager;
}
},
type: 'getCallerID'
});

12 REPLIES 12

Can you try with minor change:

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

    getUserInfo: function () {
        var userID = this.getParameter('sysparm_caller_id');
        var manager = '';
        var topManager = '';
        var gr = new GlideRecord('sys_user');
        gr.addQuery('sys_id', userID);
        gr.query();
        while (gr.next()) {
            manager = checkManager(userID);
            while(manager != topManager){
                manager = getManager(manager);
                if(manager){
                    topManager = manager;
                }
            }
            return topManager;
        }
    },
    checkManager: function (user) {
        var gr = new GlideRecord('sys_user');
        gr.get(user)
        if(gr.manager){
            return gr.manager.getDisplayValue();
        }
        else{
            return '';
        }
    },


    type: 'getCallerID'
});

Sorry, it is also not working, as giving return null value.

Oh made an error. Will update my previous reply

Hi Bhanu,

 

I have updated the script in the first reply, can you try it?

Hi Willem,

Sorry, it is also not working, as giving return null value, is any mistake from my end?, please let me know 

thanks