- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-04-2018 03:15 AM
Hi
i want to pass this tow value from script include to client script,
its displaying correct value in the script include but then i get this thought client script its displaying this error ([object XMLHttpRequest])
Script Include :-
if(grp.next()){
asgment.push(grp.getDisplayValue('assignment_group'));
priority.push(grp.getDisplayValue('priority'));
}
var result =[asgment,priority];
return result;
Client Script :-
function CallBack(response){
alert(response);
g_form.setValue('short_description', response);
}
Solved! Go to Solution.
- Labels:
-
Best Practices
-
Team Development

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-04-2018 05:12 AM
Hi Ramesh,
When you return a payload from the server, it must be a string. I HIGHLY recommend using JSON to ensure arrays, or objects, are preserved properly and that commas or other special characters don't get in the way of a split command. Here's an example of how you can return the priority and assignment_group display value as a JSON object, stringify it on the server side and parse it on the client side, then create your short_description based on those two properties. Sorry for the crappy formatting in the community editor.
if(grp.next()){
var myAnswer = {
"assignment_group" : grp.getDisplayValue('assignment_group'),
"priority" : grp.getDisplayValue('priority')
};
}
var result = JSON.stringify(myAnswer);
return result;
Client Script :-
function CallBack(response){
var answer = response.responseXML.documentElement.getAttribute("answer");
var myObj = JSON.parse(answer);
var myString = myObj.assignment_group + ' ' + myObj.priority;
g_form.setValue('short_description', myString);
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-05-2018 05:17 AM
To do this from a business rule, I recommend building in another tier to your structure.Right now you have,
Client script ---(calls)---> Client callable script include
Instead, change it to this:
Client script --(calls)---> Client callable script include --(calls)---> (Regular) script include w/logic to do your lookup and return
Then, the business rule can call that third "regular" script include.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-05-2018 06:38 AM
Or can we can write Script Include in such a way that it accommodates the arguments if called on the server side...
var YourScriptInclude = Class.create();
YourScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {
yourFunction: function(parameter1,parameter2){
var functionParameter1= this.getParameter('parameter1')||parameter1;
var functionParameter2 = this.getParameter('parameter2')||parameter2;
....
Client Side Script would be
var ajax = new GlideAjax('YourScriptInclude ');
ajax.addParam('sysparm_name','yourFunction');
ajax.addParam('parameter1', actualParameter1);
ajax.addParam('parameter2', actualParameter2);
ajax.getXML(doSomething);
Server Side Script to use the same SI would be:
var ajax = new GlideAjax('YourScriptInclude ');
ajax.yourfunction(paramter1,paramter2);
I think this should work for you.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-06-2018 02:47 AM
Hi
I have tired this way b@@@ut i am not getting result, instead of getting field value im trying to getting Sys Id of the record from the sys id i will take the field value but its how failure please find the code beloe
======================================================================================
Script Include :-
var getGroupName = Class.create();
getGroupName.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getDetail: function(){
var caller = this.getParameter('sysparm_caller');
var comp = this.getParameter('sysparm_company');
var sysid = [];
var grp = new GlideRecord('u_test_corp');
grp.addQuery('caller', caller);
grp.addQuery('company',comp);
grp.query();
if(grp.next()){
sysid.push(grp.getUniqueValue());
//var res = grp.getUniqueValue();
gs.log("Test Sys ID 11111" + sysid.toString());
return sysid.toString();
}
},
type: 'getGroupName'
});
The above Script include Rerun the particular record Sys id
Ex : 32fd6c81db010300a91fd001cf96194f
Now i want to get caller and company field value from Sys Id in Business Rule and Client Script, please find the BR and Client Script with Error
======================================================================================
Client Script
Now im trying to get the caller and company field value from Sys Id,
Error : Its showing result as undefined
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
//Type appropriate comment here, and begin script below
var caller = g_form.getValue("caller");
var cmpny = g_form.getValue("company");
var gaa = new GlideAjax('getGroupName');
gaa.addParam('sysparm_name','getDetail');
gaa.addParam('sysparm_company', cmpny);
gaa.addParam('sysparm_caller', caller);
gaa.getXML(CallBack2);
function CallBack2(response)
{
var answer = response.responseXML.documentElement.getAttribute("answer");
var test = answer.toString();
g_form.setValue('short_description', test.u_city);
g_form.setValue('description', test.u_address);
}
}
Output form client script:
======================================================================================
Business Rule :-
In this BR im trying to get the caller and company field value from Sys Id,
(function executeRule(current, previous /*null when async*/) {
// Add your code here
var getGroup = new getGroupName();
var result= getDetail.getGroup();
current.short_description = result.u_city;
current.description = result.u_address;
})(current, previous);
Error : its showing error in log
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-06-2018 04:06 AM
Phewww ... Please go through the AJAX documentation ...
https://fruitionpartners.eu/blog/2015/11/17/glideajax-return-multiple-values-using-json/
your code must be something like this : (small tweaks will be needed for sure as I cannot test it on my instance )
//Script Include :-
var getGroupName = Class.create();
getGroupName.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getDetail: function(sysparm_caller,sysparm_company){
var caller = this.getParameter('sysparm_caller')||sysparm_caller;
var comp = this.getParameter('sysparm_company')||sysparm_company;
var array = [];
var grp = new GlideRecord('u_test_corp');
grp.addQuery('caller', caller);
grp.addQuery('company',comp);
grp.query();
if(grp._next()) {
var object = {};
object.uniqueId = grp.getUniqueValue();
object.city = grp.getDisplayValue('u_city');
object.address = grp.getDisplayValue('u_address');
array.push(object);
}
var json = new JSON();
var dataStr = JSON.stringify(array);
return dataStr;
},
type: 'getGroupName'
});
//Client Script
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
//Type appropriate comment here, and begin script below
var caller = g_form.getValue("caller");
var cmpny = g_form.getValue("company");
var gaa = new GlideAjax('getGroupName');
gaa.addParam('sysparm_name','getDetail');
gaa.addParam('sysparm_company',cmpny);
gaa.addParam('sysparm_caller',caller);
gaa.getXML(CallBack2);
function CallBack2(response) {
var answer = response.responseXML.documentElement.getAttribute("answer");
g_form.addInfoMessage(answer); //JSON String
var json = new JSON;
answer = json.parse(answer);
g_form.addInfoMessage(answer);
g_form.setValue('short_description', answer[0].city);
g_form.setValue('description', answer[0].address);
}
}
//Business Rule :-
(function executeRule(current, previous /*null when async*/) {
var getGroup = new getGroupName();
var result = getGroup.getDetail(caller,cmpny);
var json = new JSON;
result = json.parse(result);
gs.setValue('short_description', result[0].city);
gs.setValue('description', result[0].address);
})(current, previous);
Hope this helps

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-06-2018 04:49 AM
I prefer to keep mine modular. Easier to build and unit test.