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

Hi Willem,

It's working, but again it is also rolling upto 2 levels am getting the return value as 2nd level manager.

Is there any restrictions on Snow instance.

Hard to do it without being able to test, but can you try this:

- Call the function with topManager each time.

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 = this.checkManager(userID);
            while(manager != topManager){
                manager = this.checkManager(topManager);
                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'
});

Hi Willem,

 

Yes, it's true.

 

if you are okay, I can provide you my instance details 😉 but i hope it will be too much to utilize your time.