Populate Reference field value to other reference field parent value
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-11-2024 12:32 PM
Hi Team,
I created a new catalog item, there is a 2 reference variables and 1 is list collector variable
1. variable called 'computer' reference to 'cmdb_ci_computer' table - eg. value is "lenovo" parent is "Servicenow"
2. variable called 'parent computer' reference to 'cmdb_ci_computer' table - dependent on 1st variable parent and display only parent value - eg. parent is - Servicenow and parent parent is Salesforce
3. (List collector)variable called 'all computers' reference to 'cmdb_ci_computer' table - dependent on 2nd variable parent and display under the values from this parent - eg. parent is Salesforce - values (apple, windows)
Thanks
Anil
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-11-2024 08:30 PM - edited ‎01-11-2024 08:33 PM
Hi @AnilM99 ,
Please see the below script for reference.
You can have an onChange on your 1st field, somthing like:
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ga_user = new GlideAjax('global.getComputerDetails');
ga_user.addParam('sysparm_name', 'getParent');
ga_user.addParam('sysparm_computer', newValue);
ga_user.getXMLAnswer(userDetails);
function userDetails(response) {
var answer = response;
g_form.setValue('parent_computer',answer);
}
}
and then on the 2nd one based on which your list collector will populate :
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ga_user = new GlideAjax('global.getComputerDetails');
ga_user.addParam('sysparm_name', 'getComputersUnderParent');
ga_user.addParam('sysparm_parent_computer', newValue);
ga_user.getXML(userDetails);
function userDetails(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
g_form.setValue('all_computers', answer);
}
}
Script Include :
var getComputerDetails = Class.create();
getComputerDetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getParent: function() {
var comp = this.getParameter('sysparm_computer');
var compRec = new GlideRecord('cmdb_ci_computer')
if (compRec.get(comp)) {
var parent_comp = compRec.u_parent.u_parent;
}
return parent_comp;
},
getComputersUnderParent: function() {
var comp_under_parent = [];
var comp_parent = this.getParameter('sysparm_parent_computer');
var compParentRec = new GlideRecord('cmdb_ci_computer')
compParentRec.addQuery('u_parent', comp_parent);
compParentRec.query();
while (compParentRec.next()) {
comp_under_parent.push(compParentRec.sys_id.toString());
gs.info('comp ' + comp_under_parent.toString());
}
return comp_under_parent.toString();
},
type: 'getComputerDetails'
});
Remember tohave something in place to clear values. I haven't included that here. Refine the script more as per your requirement and test it out.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-12-2024 12:58 AM
Hi @Sonam_Tiwari thanks for the replay,
I added Reference qualifier for the 2 variables it's working perfect.
Thanks
Anil!