- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-31-2022 10:17 PM
Hi All,
There are three fields on the form, based on one field I am trying to populate data in two other fields
On Process table we have two reference fields ABC Process Owner and XYZ Process Owner
1) "Impacted Process" (Field 1 - List collector - can select two or more values) - Multiple options present in the list collector
2) Based on selection in Impacted Process "ABC Process owner"(Field 2 - Multiline text - read only) data should populate line by line (If one Impacted Process is selected then that Process' owner should be populated. If two selections, respectively owner should get populated here line by line)
3) Based on selection in Impacted Process "XYZ Process Owner"(Field 2 - Multiline text - read only) data should populate line by line (If one Impacted Process is selected then that Process' owner should be populated. If two selections, owner should get populated here line by line)
PFB form design
Script Include -
populateImpactServices: function() {
var sysid = this.getParameter('sysparm_user_name');
var obj = {};
var rec = new GlideRecord('cmdb_ci_business_process');
rec.addQuery('name', sysid);
rec.query();
while (rec.next()) {
obj.owned_by = rec.getDisplayValue('owned_by').toString();
obj.managed_by = rec.getDisplayValue('managed_by').toString();
}
var data = JSON.stringify(obj);
return data;
Client Script -
var arr = {};
var caller = g_form.getDisplayValue('impacted_process');
var glide = new GlideAjax('populateImpactServices');
glide.addParam('sysparm_name', 'populateImpactServices');
glide.addParam('sysparm_user_name', caller);
glide.getXMLAnswer(Hello);
function Hello(response) {
arr = JSON.parse(response);
var owner = '';
var manage = '';
for (var i = 0; i < arr.length; i++) {
var value = 'Process' + (i + 1) + ': ';
var value1 ='Process' + (i + 1) + ': ';
value += arr[i].owned_by;
value1 += arr[i].managed_by;
owner += value + '\n';
manage += value1 + '\n';
}
g_form.setValue('abc_process_owner', owner);
g_form.setValue('xyz_process_owner',manage);
}
}
Please let me know where I am lagging.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-01-2022 10:47 PM
Please use the below code block in your script include
populateImpactServices : function() {
var sysid = this.getParameter('sysparm_user_name');
var obj = {};
var owned_by_arr = [];
var managed_by_arr = [];
var rec = new GlideRecord('cmdb_ci_business_process');
rec.addQuery('name', "IN", sysid);
rec.query();
while (rec.next()) {
var process_name = rec.name;
owned_by_arr.push(process_name+":"+rec.getDisplayValue('owned_by').toString());
managed_by_arr.push(process_name+":"+rec.getDisplayValue('managed_by').toString());
}
obj.owned_by = owned_by_arr.join("\n");
obj.managed_by = managed_by_arr.join("\n");
return JSON.stringify(obj);
}
Thanks & Regards,
Vasanth
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-01-2022 11:23 PM
Glad that I'm able to help you and we learn together 🙂
Thanks & Regards,
Vasanth
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-01-2022 10:27 PM
Hi,
Could you please check once with below script:
Client script:
// Client Script -
//var arr = {};
var impacted_processes = g_form.getValue('impacted_process'); // it can be single or multiple
alert("impacted_processes: " + impacted_processes);
var glide = new GlideAjax('populateImpactServices');
glide.addParam('sysparm_name', 'populateImpactServices');
glide.addParam('sysparm_impacted_process', impacted_processes);
glide.getXMLAnswer(Hello);
function Hello(response) {
var processData = JSON.parse(response);
alert(JSON.stringify(processData));
var index = 1;
var ownedBy = [];
var managedBy = [];
for (var data in processData) {
var eachProcess = processData[data];
ownedBy.push("Process" + index + ":" + eachProcess["owned_by"]);
managedBy.push("Process" + index + ":" + eachProcess["managed_by"]);
index += 1;
}
g_form.setValue('abc_process_owner', ownedBy.join("\n"));
g_form.setValue('xyz_process_owner', managedBy.join("\n"));
}
Script include:
// Script Include -
populateImpactServices: function() {
var impacted_process = this.getParameter('sysparm_impacted_process');
gs.info("impacted_processIds: " + impacted_process); // it should prints the selected process id's seprated by comma
var obj = {};
var finalArray = [];
var rec = new GlideRecord('cmdb_ci_business_process');
rec.addEncodedQuery('sys_idIN' + impacted_process]);
rec.query();
while (rec.next()) {
obj.owned_by = rec.getDisplayValue('owned_by');
obj.managed_by = rec.getDisplayValue('managed_by');
finalArray.push(obj);
}
gs.info("finalArray: " + JSON.stringify(finalArray));
return JSON.stringify(finalArray);
Please mark my respsone as helpful/correct, if it answer your question.
Thanks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-01-2022 10:37 PM
Hi Mahendra,
Thanks for sharing, wanted to confirm
Do you mean to write
rec.addEncodedQuery('sys_idIN' + impacted_process[i]); in script include?
and instead of Process : index if I want to add process name, how to add? because it is not populating sequentially
Desired Output:
<impacted_process_name> : owner
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-01-2022 10:57 PM
Hello Tejas,
Please check once with updated code as mentioned below:
Client Script:
// Client Script -
//var arr = {};
var impacted_processes = g_form.getValue('impacted_process'); // it can be single or multiple
alert("impacted_processes: " + impacted_processes);
var glide = new GlideAjax('populateImpactServices');
glide.addParam('sysparm_name', 'populateImpactServices');
glide.addParam('sysparm_impacted_process', impacted_processes);
glide.getXMLAnswer(Hello);
function Hello(response) {
var processData = JSON.parse(response);
alert(JSON.stringify(processData));
var index = 1;
var impactedProcess = impacted_processes.split(",");
var ownedBy = [];
var managedBy = [];
for (var data in impactedProcess) {
var eachProcess = impactedProcess[data];
ownedBy.push(processData[eachProcess]["name"] + ":" + processData[eachProcess]["owned_by"]);
managedBy.push(processData[eachProcess]["name"] + ":" + processData[eachProcess]["managed_by"]);
index += 1;
}
g_form.setValue('abc_process_owner', ownedBy.join("\n"));
g_form.setValue('xyz_process_owner', managedBy.join("\n"));
}
Script Include:
// Script Include -
populateImpactServices: function() {
var impacted_process = this.getParameter('sysparm_impacted_process');
gs.info("impacted_processIds: " + impacted_process); // it should prints the selected process id's seprated by comma
var ownerData = {};
var rec = new GlideRecord('cmdb_ci_business_process');
rec.addEncodedQuery('sys_idIN' + impacted_process);
rec.query();
while (rec.next()) {
var recordGuid = rec.getUniqueValue();
if (!ownerData[recordGuid]) {
ownerData[recordGuid] = {};
ownerData[recordGuid]["name"] = rec.getDisplayValue('name');
ownerData[recordGuid]["owned_by"] = rec.getDisplayValue('owned_by');
ownerData[recordGuid]["managed_by"] = rec.getDisplayValue('managed_by');
}
gs.info("ownerData: " + JSON.stringify(ownerData));
return JSON.stringify(ownerData);
Please mark my respsone as helpful/correct, if it answer your question.
Thanks