- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-04-2024 09:05 PM
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.
Solved! Go to Solution.
- 987 Views
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-04-2024 09:37 PM
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:
Thank you, please make helpful if you accept the solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-04-2024 09:40 PM - edited 07-05-2024 04:12 AM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
09-30-2024 05:36 AM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-04-2024 09:37 PM
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:
Thank you, please make helpful if you accept the solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-04-2024 09:38 PM
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-04-2024 09:40 PM - edited 07-05-2024 04:12 AM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-04-2024 09:49 PM