Onchange client script with script include
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-07-2023 09:45 PM
I want to pass two values from onchange client script and get their company values from the script include. what is the best approach.
Client script:
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var cmdb={};
cmdb.var1 = g_form.getValue('business_service');
cmdb.var2 = newValue;
var array = Object.toJSON(cmdb);
var Value = new GlideAjax('global.Brazil_Script');
Value.addParam('sysparm_name', 'GetService');
Value.addParam('sysparm_service_name', array);
// Value.addParam('sysparm_cmdb_name', newValue);
Value.getXML(setVal);
// alert(ser1);
// alert(sysparm_cmdb_name);
function setVal(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
var resultData = JSON.parse(answer);
var ServiceCompany = resultData.var1;
var ApplCompany = resultData.var2;
alert(ServiceCompany);
alert(ApplCompany);
var OPCO;
getMessage('BrazilsysID', function(msg) {
OPCO = JSON.parse(msg);
if (ServiceCompany == OPCO.Company1 || ServiceCompany == OPCO.Company2) {
var sername = ser.name;
var cat = 'BR_' + sername; //concat
g_form.setValue('category', cat);
g_form.setReadOnly('category', true);
}
if (ApplCompany == OPCO.Company3 || ApplCompany == OPCO.Company1) {
var ciname = ci.name;
var subcat = 'BR_' + ciname; //concat
var setTimer = '';
setTimer = setTimeout(setTimerDelay, 2000); //To set the timer for 2 sec
function setTimerDelay() {
g_form.setValue('subcategory', subcat);
g_form.setReadOnly('subcategory', true);
}
}
});
}
}
Script include:
var Brazil_Script = Class.create();
Brazil_Script.prototype = {
GetService: function() {
var value = {};
var str = this.getParameter('sysparm_service_name');
var arr = new JSON().decode(str);
var serviceName = this.getParameter("sysparm_service_name");
var Service = new GlideRecord('cmdb_ci_service');
Service.addQuery("name", serviceName);
Service.query();
while (Service.next()) {
value.var1 = Service.company;
}
var cmdbName = this.getParameter("sysparm_cmdb_name");
gs.log("Karthik"+cmdbName);
var cmdb = new GlideRecord('cmdb_ci_appl');
cmdb.addQuery("name", cmdbName);
cmdb.query();
while (cmdb.next()) {
value.var2 = cmdb.company;
}
return JSON.stringify(Value);
// var data = json.encode(Value); //JSON formatted string
// return data;
},
type: 'Brazil_Script'
};
6 REPLIES 6
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-07-2023 10:55 PM
Hi @karthik65
Please try like below :
Script Include :
var Brazil_Script = Class.create();
Brazil_Script.prototype = {
/*Start of GetService Function */
GetService: function() {
/* Declare variable to return value */
var result = {
'serviceCompany':'',
'cmdbCompany' : '',
};
/* Get values from client script */
var serviceName = this.getParameter('sysparm_service_name');
var cmdbName = this.getParameter('sysparm_cmdb_name');
/*Glide record on cmdb_ci_service */
var grService = new GlideRecord('cmdb_ci_service');
grService.addQuery("name", serviceName);
grService.query();
if (grService.next()) {
result.serviceCompany = grService.company;
}
/*Glide record on cmdb_ci_appl */
var grCmdb = new GlideRecord('cmdb_ci_appl');
grCmdb.addQuery("name", cmdbName);
grCmdb.query();
if (grCmdb.next()) {
result.cmdbCompany = grCmdb.company;
}
/* return the result */
return JSON.stringify(result);
},
type: 'Brazil_Script'
};
Client script :
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
var service = g_form.getValue('business_service');
var Value = new GlideAjax('global.Brazil_Script');
Value.addParam('sysparm_name', 'GetService');
Value.addParam('sysparm_service_name', service);
Value.addParam('sysparm_cmdb_name', newValue);
Value.getXMLAnswer(setVal);
function setVal(answer) {
var result = JSON.parse(answer);
var ServiceCompany = result.serviceCompany;
var ApplCompany = result.cmdbCompany;
alert(ServiceCompany);
alert(ApplCompany);
var OPCO;
getMessage('BrazilsysID', function(msg) {
OPCO = JSON.parse(msg);
if (ServiceCompany == OPCO.Company1 || ServiceCompany == OPCO.Company2) {
var sername = ser.name;
var cat = 'BR_' + sername; //concat
g_form.setValue('category', cat);
g_form.setReadOnly('category', true);
}
if (ApplCompany == OPCO.Company3 || ApplCompany == OPCO.Company1) {
var ciname = ci.name;
var subcat = 'BR_' + ciname; //concat
var setTimer = '';
setTimer = setTimeout(setTimerDelay, 2000); //To set the timer for 2 sec
function setTimerDelay() {
g_form.setValue('subcategory', subcat);
g_form.setReadOnly('subcategory', true);
}
}
});
}
}
Vishal Birajdar
ServiceNow Developer
I know one thing, and that is that I know nothing.
- Socrates
ServiceNow Developer
I know one thing, and that is that I know nothing.
- Socrates
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-07-2023 11:20 PM
Hi @karthik65
It should be 2 separated Client Scripts as you're triggering on 2 different variables Business service and Application to autofill Category and Subcategory.
Sample below for Business Service. (You can do the same with Application)
#Client Script OnChange Business Service (Reference variable)
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading) {
return;
}
if (newValue === '') {
g_form.clearValue('category');
g_form.setReadOnly('category', false);
return;
}
var ga = new GlideAjax('global.Brazil_Script');
ga.addParam('sysparm_name', 'getService');
//Business Service is a Reference variable, which store the record's sys_id
ga.addParam('sysparm_business_service_id', newValue);
ga.getXMLAnswer(setVal);
function setVal(response) {
var objService = JSON.parse(response);
if (objService.sys_id == "<your_company_value>" || objService.sys_id == "<your_company_value>") {
var category = 'BR_' + objService.name;
g_form.setValue('category', category);
g_form.setReadOnly('category', true);
return;
}
g_form.clearValue('category');
g_form.setReadOnly('category', false);
}
}
#Script Include
var Brazil_Script = Class.create();
Brazil_Script.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getService: function() {
var result = {};
var serviceID = this.getParameter('sysparm_business_service_id');
var grService = new GlideRecord('cmdb_ci_service');
if(grService.get(serviceID)){
result.sys_id = grService.getUniqueValue();
result.name = grService.getValue('name');
}
return JSON.stringify(result);
},
type: 'Brazil_Script'
});
I can see your Script Include is not Client Callable one. Make sure you create it correctly.
Cheers,
Tai Vu