- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-14-2023 02:11 PM
I am looking to retrieve associated attributes from Application CI records as they are applied to a Project's field called "Impacted Applications" (field type = List). With the client script below, I am able to do this if a single Application CI exists in the Impacted Application field, but it does not work when there are 2 or more Application CIs in the list. Below is the script that is working with a single Application. Could someone help me get this to loop through the Application CIs when multiple are applied and identify related user values for all Applications in the list?
Client Script
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-15-2023 10:18 PM
Hi @JamieD
Okay, let's try my approach below.
#ClientCallable Script Include
var CLProjectUtilsAJAX = Class.create();
CLProjectUtilsAJAX.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getAppValues: function() {
var appIDs = this.getParameter('sysparm_ci');
var arrApp = [];
var grApp = new GlideRecord('cmdb_ci_business_app');
grApp.addQuery('sys_id', 'IN', appIDs);
grApp.query();
while (grApp.next()) {
var jsonObj = {};
jsonObj.rto = CI.getValue('u_dr_priority_rto');
jsonObj.sox = CI.getValue('u_sox');
jsonObj.slagrp = CI.getValue('u_app_sla_group');
jsonObj.avail = CI.getValue('u_expected_availability');
jsonObj.aprv = CI.getValue('u_app_change_approval_needed');
jsonObj.buslead = CI.getValue('owned_by');
jsonObj.prodowner = CI.getValue('u_product_owner');
jsonObj.pba = CI.getValue('u_primary_business_analyst');
jsonObj.sba = CI.getValue('u_secondary_business_analyst');
jsonObj.appowner = CI.getValue('managed_by');
jsonObj.techprim = CI.getValue('supported_by');
jsonObj.techsec = CI.getValue('u_technical_sme_secondary');
jsonObj.infraprim = CI.getValue('u_infrastructure_sme_primary');
jsonObj.infrasec = CI.getValue('u_infrastructure_sme_secondary');
arrApp.push(jsonObj);
}
return JSON.stringify(arrApp);
},
type: 'CLProjectUtilsAJAX'
});
#OnChange Client Script (Impacted Applications)
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading) {
return;
}
//clear value when Application changes to Empty
if (newValue === '') {
g_form.clearValue('u_system_admins_developers');
g_form.clearValue('u_sme_s');
return;
}
//Use this when you'd like to keep the existing users
//who are manually added (not from the application attributes)
/*
var devs = g_form.getValue('u_system_admins_developers').split(',');
var smes = g_form.getValue('u_sme_s').split(',');
*/
var ga = new GlideAjax('CLProjectUtilsAJAX');
ga.addParam('sysparm_name', 'getAppValues');
ga.addParam('sysparm_ci', newValue);
ga.getXMLAnswer(function(response) {
var arrApp = JSON.parse(response);
var arrDev = [];
var arrSME = [];
for (var i in arrApp) {
//dev
arrDev.push(arrApp[i].buslead);
arrDev.push(arrApp[i].appowner);
//etc
//sme
arrSME.push(arrApp[i].techprim);
arrSME.push(arrApp[i].prodowner);
//etc
}
//Use this when you'd like to keep the existing users
//who are manually added (not from the application attributes)
/*
for (var j=0; j<devs.length; j++) {
if (arrDev.indexOf(devs[j]) === -1) {
continue;
}
arrDev.push(devs[j]);
}
for (var k=0; k<smes.length; k++) {
if (arrSME.indexOf(smes[k]) >= 0) {
continue;
}
arrSME.push(smes[k]);
}
*/
g_form.setValue('u_system_admins_developers', arrDev.join(','));
g_form.setValue('u_sme_s', arrSME.join(','));
});
}
Happy Coding Hours !
Cheers,
Tai Vu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-28-2023 08:42 AM
Ah yes! I missed the "Client Callable" checkbox on the Script Include. It is working now. Thank you so much for your help!