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