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.