Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

Auto populate Manger Levels in incident form

Anandini
Tera Expert

In Incident form, i created three custom fields( le1,le2,le3) and based on 'caller_id' selection those fields has to automatically populate by caller manager, caller manager's manager, caller manager's manager's manager.

it should be like an hierarchy.

anyone know how to achieve this.. i think i have to write a client script on caller field. 

3 ACCEPTED SOLUTIONS

Yashsvi
Kilo Sage

Hi @Anandini,

try below script:

Client Script:

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }

    var ga = new GlideAjax('UserHierarchyHelper');
    ga.addParam('sysparm_name', 'getHierarchy');
    ga.addParam('sysparm_user_id', newValue);
    ga.getXMLAnswer(function(response) {
        var result = response.responseText;
        if (result) {
            var hierarchy = JSON.parse(result);
            g_form.setValue('le1', hierarchy.manager || '');
            g_form.setValue('le2', hierarchy.manager_manager || '');
            g_form.setValue('le3', hierarchy.manager_manager_manager || '');
        }
    });
}

Script Include:

var UserHierarchyHelper = Class.create();
UserHierarchyHelper.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getHierarchy: function() {
        var userId = this.getParameter('sysparm_user_id');
        var result = {};

        var user = new GlideRecord('sys_user');
        if (user.get(userId)) {
            result.manager = user.manager.getDisplayValue();
            
            if (user.manager) {
                var manager = new GlideRecord('sys_user');
                if (manager.get(user.manager.sys_id)) {
                    result.manager_manager = manager.manager.getDisplayValue();
                    
                    if (manager.manager) {
                        var manager_manager = new GlideRecord('sys_user');
                        if (manager_manager.get(manager.manager.sys_id)) {
                            result.manager_manager_manager = manager_manager.manager.getDisplayValue();
                        }
                    }
                }
            }
        }

        return JSON.stringify(result);
    }
});

please check below link:

https://www.servicenow.com/community/developer-forum/i-want-to-populate-the-manager-details-in-the-i...

Thank you, please make helpful if you accept the solution.

View solution in original post

Aditya02
Tera Guru

Hi @Anandini  ,

 

You can achieve this functionality by writing a Script Include and calling it from an onChange Client Script on the Caller field. Here are the scripts:

 

Script Include:

var levelofmanager = Class.create();
levelofmanager.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    managers: function() {
        //gs.addInfoMessage('started');
        var id = this.getParameter('callersysid');  // to get the passed parameters

        var obj = {};
        var l1 = new GlideRecord('sys_user');
        if (l1.get(id)) {
            obj.m1 = l1.manager.sys_id.toString();

            var l2 = new GlideRecord('sys_user');
            if (l2.get(l1.manager)) {
                obj.m2 = l2.manager.sys_id.toString();;
               
                var l3 = new GlideRecord('sys_user');
                if (l3.get(l2.manager)) {
                    obj.m3 = l3.manager.sys_id.toString();
                }
            }
        }
        return JSON.stringify(obj);
    },
    type: 'levelofmanager'
});


Client Script:

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }
    var user = g_form.getValue('caller_id');
    var sys = new GlideAjax('levelofmanager');
    sys.addParam('sysparm_name', 'managers');
    sys.addParam('callersysid', user);
    sys.getXMLAnswer(handleResponse);     // Used for Array or Obj as Response.

    function handleResponse(response) {
        var res = JSON.parse(response);    // Used to get json formated response.
        g_form.setValue('u_le1', res.m1);
        g_form.setValue('u_le2', res.m2);
        g_form.setValue('u_le3', res.m3);
    }
}

If this solution resolves your task, please mark this as the 'correct answer' and give it a like.

 

Thanks,
Aditya

View solution in original post

Manikanta Kota
Mega Guru

Hi @Anandini ,

Try this script onload client script

var cal = g_form.getReference('caller_id'); {
        if (cal) {
            g_form.setValue('u_manager', caller.manager);


            g_form.setValue('u_manager2', caller.manager.manager);
                }

Should my answer prove to be helpful, kindly mark it as such by clicking "Accept as Solution" and "Helpful."

 

Regards,

Manikanta. Kota

View solution in original post

8 REPLIES 8

Yashsvi
Kilo Sage

Hi @Anandini,

try below script:

Client Script:

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }

    var ga = new GlideAjax('UserHierarchyHelper');
    ga.addParam('sysparm_name', 'getHierarchy');
    ga.addParam('sysparm_user_id', newValue);
    ga.getXMLAnswer(function(response) {
        var result = response.responseText;
        if (result) {
            var hierarchy = JSON.parse(result);
            g_form.setValue('le1', hierarchy.manager || '');
            g_form.setValue('le2', hierarchy.manager_manager || '');
            g_form.setValue('le3', hierarchy.manager_manager_manager || '');
        }
    });
}

Script Include:

var UserHierarchyHelper = Class.create();
UserHierarchyHelper.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getHierarchy: function() {
        var userId = this.getParameter('sysparm_user_id');
        var result = {};

        var user = new GlideRecord('sys_user');
        if (user.get(userId)) {
            result.manager = user.manager.getDisplayValue();
            
            if (user.manager) {
                var manager = new GlideRecord('sys_user');
                if (manager.get(user.manager.sys_id)) {
                    result.manager_manager = manager.manager.getDisplayValue();
                    
                    if (manager.manager) {
                        var manager_manager = new GlideRecord('sys_user');
                        if (manager_manager.get(manager.manager.sys_id)) {
                            result.manager_manager_manager = manager_manager.manager.getDisplayValue();
                        }
                    }
                }
            }
        }

        return JSON.stringify(result);
    }
});

please check below link:

https://www.servicenow.com/community/developer-forum/i-want-to-populate-the-manager-details-in-the-i...

Thank you, please make helpful if you accept the solution.

Satishkumar B
Giga Sage
Giga Sage

Hi @Anandini 

 

Steps to Populate Hierarchical Fields in Incident Form

 1. Create Client Script
- Name:Populate Hierarchical Fields
- Table: Incident
- Type: onChange
- Field Name: caller_id

(function executeRule(current, previous /*null when async*/) {
var callerID = g_form.getValue('caller_id');

if (callerID) {
var ga = new GlideAjax('GetCallerHierarchy');
ga.addParam('sys_id', callerID);
ga.addParam('sysparm_name', 'getHierarchy');
ga.getXMLAnswer(function(response) {
var result = JSON.parse(response);
if (result) {
g_form.setValue('le1', result.le1);
g_form.setValue('le2', result.le2);
g_form.setValue('le3', result.le3);
}
});
} else {
g_form.setValue('le1', '');
g_form.setValue('le2', '');
g_form.setValue('le3', '');
}
})(current, previous);
```

2. Create Script Include
- Name: GetCallerHierarchy
- Client Callable: True

var GetCallerHierarchy = Class.create();
GetCallerHierarchy.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getHierarchy: function() {
var sys_id = this.getParameter('sys_id');
var result = { le1: '', le2: '', le3: '' };

var userGR = new GlideRecord('sys_user');
if (userGR.get(sys_id)) {
result.le1 = userGR.manager;
if (userGR.manager) {
var managerGR = new GlideRecord('sys_user');
if (managerGR.get(userGR.manager)) {
result.le2 = managerGR.manager;
if (managerGR.manager) {
var managerManagerGR = new GlideRecord('sys_user');
if (managerManagerGR.get(managerGR.manager)) {
result.le3 = managerManagerGR.manager;
}
}
}
}
}

return JSON.stringify(result);
}
});

 Explanation:

- Client Script: Runs when `caller_id` changes, calls Script Include, sets `le1`, `le2`, `le3`.
- Script Include: Fetches manager hierarchy based on `caller_id`.

This setup will dynamically populate the custom fields `le1`, `le2`, and `le3` based on the hierarchical relationship of the `caller_id`.

 

----------------------------------------
If my response proves useful, please indicate its helpfulness by selecting "Accept as Solution" and " Helpful." This action benefits both the community and me.

Aditya02
Tera Guru

Hi @Anandini  ,

 

You can achieve this functionality by writing a Script Include and calling it from an onChange Client Script on the Caller field. Here are the scripts:

 

Script Include:

var levelofmanager = Class.create();
levelofmanager.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    managers: function() {
        //gs.addInfoMessage('started');
        var id = this.getParameter('callersysid');  // to get the passed parameters

        var obj = {};
        var l1 = new GlideRecord('sys_user');
        if (l1.get(id)) {
            obj.m1 = l1.manager.sys_id.toString();

            var l2 = new GlideRecord('sys_user');
            if (l2.get(l1.manager)) {
                obj.m2 = l2.manager.sys_id.toString();;
               
                var l3 = new GlideRecord('sys_user');
                if (l3.get(l2.manager)) {
                    obj.m3 = l3.manager.sys_id.toString();
                }
            }
        }
        return JSON.stringify(obj);
    },
    type: 'levelofmanager'
});


Client Script:

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }
    var user = g_form.getValue('caller_id');
    var sys = new GlideAjax('levelofmanager');
    sys.addParam('sysparm_name', 'managers');
    sys.addParam('callersysid', user);
    sys.getXMLAnswer(handleResponse);     // Used for Array or Obj as Response.

    function handleResponse(response) {
        var res = JSON.parse(response);    // Used to get json formated response.
        g_form.setValue('u_le1', res.m1);
        g_form.setValue('u_le2', res.m2);
        g_form.setValue('u_le3', res.m3);
    }
}

If this solution resolves your task, please mark this as the 'correct answer' and give it a like.

 

Thanks,
Aditya

Hi @Aditya02 ,

 

The scripts you provided solves my task. I am getting output as expected.

 

Thank you.