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.

Want to get the current logged in user Manager Name and Manager's manger name , ned entire hierachy

naveenvenka
Tera Contributor

Upon clicking the button , need to et the current logged in user Manager Name and Manager's manger name , ned entire hierachy.

 

I have wrote this script and will use it in UI Actions , and show it in Incident feild .

 

var gr=new GlideRecord('sys_user');
gr.get(gs.getUserID());
var managersChain=[];
if(gr.isValidRecord()){
var managerID=gr.getValue('manager');
managersChain.push(gr.getDisplayValue('manager'));

while(managerID){
var manager=new GlideRecord('sys_user');
if(manager.get(managerID)){
managerID=manager.getValue('manager');
managersChain.push(manager.getDisplayValue('manager'));
}
else{
break;
}

}

gs.info(managersChain);

}
 
 
Is there any better way i can write and any better approach to minimize the perfomance issues ?
1 ACCEPTED SOLUTION

Sandeep Rajput
Tera Patron
Tera Patron

@naveenvenka I have created this recursive function for you. You can test this function via a background script and it will give the the entire manager hierarchy without causing any performance issues.

 

function getManagerHierarchy(managerArray, next) {
    var glideRecord = new GlideRecord('sys_user');
    if (glideRecord.get(next)) {
        managerArray.push(glideRecord.manager.name + '');
        return getManagerHierarchy(managerArray, glideRecord.getValue('manager'));
        
    } else {        
		return managerArray.toString();
    }
}

var managerArray = [];
gs.info(getManagerHierarchy(managerArray, 'b13cb325931721100143ad44246a4db0')); //Pass the sys_id of person here

 Hope this helps.

View solution in original post

2 REPLIES 2

Sandeep Rajput
Tera Patron
Tera Patron

@naveenvenka I have created this recursive function for you. You can test this function via a background script and it will give the the entire manager hierarchy without causing any performance issues.

 

function getManagerHierarchy(managerArray, next) {
    var glideRecord = new GlideRecord('sys_user');
    if (glideRecord.get(next)) {
        managerArray.push(glideRecord.manager.name + '');
        return getManagerHierarchy(managerArray, glideRecord.getValue('manager'));
        
    } else {        
		return managerArray.toString();
    }
}

var managerArray = [];
gs.info(getManagerHierarchy(managerArray, 'b13cb325931721100143ad44246a4db0')); //Pass the sys_id of person here

 Hope this helps.

Shashank_Jain
Kilo Sage

@naveenvenka ,

 

Try this!

// Get the logged-in user
var userGR = new GlideRecord('sys_user');
if (userGR.get(gs.getUserID())) {
    var managersChain = [];
    var managerID = userGR.getValue('manager');

    while (managerID) {
        var mgr = new GlideRecord('sys_user');
        if (mgr.get(managerID)) {
            managersChain.push(mgr.getDisplayValue('name'));  // manager's name
            managerID = mgr.getValue('manager'); // move to next manager
        } else {
            break;
        }
    }

    var hierarchy = managersChain.join(" > ");
    gs.info("Manager Hierarchy: " + hierarchy);
} else {
    gs.info("No user record found for current session.");
}

 

I have tried it on PDI (Background script) and its working!

 

Hope it helps!

 

If this works, please mark it as helpful/accepted — it keeps me motivated and helps others find solutions.
Shashank Jain