How to pass array values in a reference field ?

Mr khan
Tera Contributor

Client script :

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var arr;
var parentRec = g_form.getValue('u_service_business_app');
var ga = new GlideAjax('bappUtils');
ga.addParam('sysparm_name', 'getChildValues');
ga.addParam('sysparm_recparent', parentRec);
ga.getXML(myCallBack);

function myCallBack(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
// arr = 'sys_idIN' + answer; //.split(",");


var splitAnswer = answer.split(',');
for (var i = 0; i < splitAnswer.length; i++) {
g_form.setValue('u_tech_serv_off_app_service', splitAnswer[i]); //g_form.getValue('description') + '\n' + splitAnswer[i]);
}

 

// g_form.setValue('u_tech_serv_off_app_service', arr);
}

}

 

Script Include :

var bappUtils = Class.create();
bappUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

getChildValues: function() {
var array = [];
var uid = this.getParameter('sysparm_recparent');
var prj = new GlideRecord('cmdb_rel_ci');
prj.addEncodedQuery("parent.sys_class_name=cmdb_ci_business_app^child.sys_class_name=cmdb_ci_service_auto");
prj.addQuery('parent.sys_id', uid);
prj.query();
while (prj.next()) {

var list1 = prj.child.sys_id;

array.push(list1); JSON.stringify(variable);

}
return JSON.stringify(array); //'sys_idIN' + array; //.toString(); //return 'sys_idIN' + retArrayy;
},
type: 'bappUtils'
});

 

 

#Anyone help me out here

1 ACCEPTED SOLUTION

@Mr khan 

like this

getChildValues: function(u_service_business_app) {
				var array = [];
				var prj = new GlideRecord('cmdb_rel_ci');
				prj.addEncodedQuery("parent.sys_class_name=cmdb_ci_business_app^child.sys_class_name=cmdb_ci_service_auto");
				prj.addQuery('parent.sys_id', u_service_business_app);
				prj.query();
				while (prj.next()) {
					var list1 = prj.child.sys_id;
					array.push(list1.toString());
				}
				return 'sys_idIN' + array;
			},
Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

View solution in original post

14 REPLIES 14

BharathChintala
Mega Sage

@Mr khan 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var parentRec = g_form.getValue('u_service_business_app');
var ga = new GlideAjax('bappUtils');
ga.addParam('sysparm_name', 'getChildValues');
ga.addParam('sysparm_recparent', parentRec);
ga.getXML(myCallBack);

function myCallBack(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");


var ans= answer.split(',');
g_form.setValue('field1', ans[0]); // this will be first value in array

g_form.setValue('field2',ans[1]);// second and go on push values according in Script include

}

}

 

Script Include :

var bappUtils = Class.create();
bappUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

getChildValues: function() {
var array = [];
var uid = this.getParameter('sysparm_recparent');
var prj = new GlideRecord('cmdb_rel_ci');
prj.addEncodedQuery("parent.sys_class_name=cmdb_ci_business_app^child.sys_class_name=cmdb_ci_service_auto");
prj.addQuery('parent.sys_id', uid);
prj.query();
while (prj.next()) {
array.push(prj.child.sys_id.toString()); 

}
return array.toString();
},
type: 'bappUtils'
});

 

Thanks,

Bharath

If my inputs have helped with your question, please mark my answer as accepted solution, and give a thumb up.
Bharath Chintala

Mrkhan_0-1674638468876.png

Here based on the business appplication i need to list out related application services.[Note : one business applications can have multiple application services.]

 

ricker
Tera Guru

@Mr khan,

Might be able to help but what are you trying to do? If your script isn't failing on "JSON.stringify(variable)" because variable is not defined then you're setting the value of u_tech_serv_off_app_service over and over...why?

You also have sys_idIN commented out...are you trying to make a reference qualifier....reference qualifier wouldn't use a client script.

jaheerhattiwale
Mega Sage
Mega Sage

@Mr khan A reference field can hold only one reference value. If it's an array you need to create a list type field which can hold an comma separated list of reference values.

 

Please mark as correct answer if this solves your issue.

Please mark the answer as correct or helpful based on impact
ServiceNow Community Rising Star, Class of 2023