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.

Loop through user's manager in hierarchy

Raj Rajpoot
Tera Contributor

Hi All,

I need some help to design the solution. 

 

In my use case, I have 5 managers in user table, so I know the sys_ids and users name. I have created a sys property to store all these sys_ids.

Now, I want to loop through the manager field until 1 of the 5 managers is found at any level.

Once match found, return the manager (N) sys id and sys_id of the manager at a level below (N-1).

For example, caller 1 has 7th levels till the manager is found but for caller 2 the same manager could be at 9th level.

 

Caller 1 > M1 > M2 >M3 >.... M(N-1) > M(N)

Caller 2 > M1 > M2 >M3 > M4 > M5 >.... M(N-1) > M(N)

 

I have tried few solutions from community but didn't get correct result.

Please help with the script or logic.

 

2 REPLIES 2

Chenab Khanna
Tera Expert

Any luck in finding the solution for this?

Raj Rajpoot
Tera Contributor

Hi Chenab,

Here is the example script. 

 

onChange Client script:
 
    var usr = g_form.getValue('field_name'); //Update reference field name
    var setUser = new GlideAjax('script_include_name');
    setUser.addParam('sysparm_name', 'getMembers');
    setUser.addParam('sysparm_usr', usr);
    setUser.getXMLAnswer(setMembers);
 
    function setMembers(answer) {
        answer = JSON.parse(answer); 
 
g_form.setValue('N_reference_field', answer[0]);
 g_form.setValue('N-1_reference_field', answer[1]);
    }
 
Script include:
Same as in (var setUser = new GlideAjax('script_include_name');)
 
getMembers: function(usr, action) {
        var values = [];
        var mngr_tier1 = '';
        var mngr_tier2 = '';
        var managers = gs.getProperty('N _members.list');//Static list of members
 
        var mgr = this.getManager(usr);
        mngr_tier1 = mgr.n;
        mngr_tier2 = mgr.n_1;
        while (managers.indexOf(mngr_tier1) == '-1') {
            mgr = this.getManager(mngr_tier1);
            mngr_tier1 = mgr.n;
            mngr_tier2 = mgr.n_1;
        }
        action.n_member = mngr_tier1;
        action.n_1_member = mngr_tier2;
        action.update();
        var userGroup = new GlideRecord('sys_user_grmember');
        userGroup.addEncodedQuery("group=<sys_id>^user.sys_id=" + mngr_tier2); //Dynamically adding N-1 users in a group to assign a role for access
        userGroup.query();
        if (userGroup.next()) {
        } else {
            userGroup.initialize();
            userGroup.user = mngr_tier2;
            userGroup.group = '<sys_id>';//dynamic group sys id
            userGroup.insert();
        }
    },