- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-20-2022 10:28 AM
Hi All,
Hope you are all well!. I need your valuable thought about how to store multi row variable values in an object. Currently I'm developing a rest API GET method to retrieve data from ServiceNow. Below is the high-level scripted REST API GET method I'm developing. However I could retrieve variable values, But I'm getting undefined error when I trying to retrieve multi row variable set values. Appreciate your help here.
var g = new GlideRecord('sc_task');
g.get(SYS_ID OF THE SCTASK);
scTask.query();
while(g.next()) {
var obj = {};
obj.app= obj.application_name= g.variables.app_id.getDisplayValue();//working fine
obj.account= g.variables.account.toString();//working fine
obj.multiCategory=g.variables.multiRowVariableSet1.user_name; // This part is not working. Multi row variable set name is multiRowVariableSet1 and the variable name is user_name. I need to store this multi row variable values in the same obj I've created here.
result.push(obj);
Thanks & Regards,
Pawan
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2022 09:24 PM
sys_id will only select 1 record so the other conditions shouldn't be necessary.
The script will return the following error when there is no mrvs in the ritm with the name "multirowvariableset1".
Evaluator: com.glide.script.RhinoEcmaError: Unexpected token: u
To avoid a script error, use try-catch block.
var sctaskSysid;
var query = 'sys_id=' + sctaskSysid + '^request_item.cat_item=32126h5689kht65t896431g76j9ld432^variables.3f79j5639827hn936068f36k8f6n9753=No'; // paste encoded query here
var result = [];
var grSctask = new GlideRecord('sc_task');
grSctask.addEncodedQuery(query);
grSctask.query();
while (grSctask.next()) {
try {
var requestItem = grSctask.request_item; // get request item for the task
var mrvs = requestItem.variables.multirowvariableset1; // to get content of mrvs
var jsonObj = JSON.parse(mrvs);
var userList = [];
for (var i = 0; i < jsonObj.length; i++) {
userList.push(jsonObj[i].user_name.toString());
}
var obj = {};
//obj.app= obj.application_name= grSctaskgr.variables.app_id.getDisplayValue();//working fine
//obj.account= grSctask.variables.account.toString();//working fine
obj.multiCategory = userList.join(',').toString();
result.push(obj);
gs.info(result[0].multiCategory);
} catch (e) {}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-20-2022 10:09 PM
Awesome Hitoshi. It's working as expected for one task. Much appreciated your support. QQ: I need this to use as a iterate script for all the SCTASKS when the query is meet. When I tried this to use as addEncodedQuery instead of if statement, It returns an abnormal error as below.
Query: var gr = new GlideRecord('sc_task'); gr.addEncodedQuery('descriptionSTARTSWITHcategory'); gr.query();
Error: Evaluator: com.glide.script.RhinoEcmaError: Unexpected token: u script : Line(155) column(0)
Appreciate your thought.
Thanks in advance!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-20-2022 10:31 PM
Hi,
try this
var result = [];
var gr = new GlideRecord('sc_task');
gr.addQuery('sys_id','ee3c63e99739011086d3b4b3f153af2c'));
gr.addEncodedQuery('descriptionSTARTSWITHcategory');
gr.query();
while(gr.next())
{
var requestItem= gr.request_item; // get request item for the task
var mrvs = requestItem.variables.multirowvariableset1;
// to get content of mrvs
var jsonObj = JSON.parse(mrvs);
var userList = [];
for (var i=0; i< jsonObj.length; i++) {
userList.push(jsonObj[i].user_name.toString());
}
var obj = {};
//obj.app= obj.application_name= gr.variables.app_id.getDisplayValue();//working fine
//obj.account= gr.variables.account.toString();//working fine
obj.multiCategory = userList.join(',').toString();
//gs.info('obj:' + obj.multiCategory);
result.push(obj);
gs.info(result[0].multiCategory);
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2022 07:11 PM
Hi Mahesh,
Appreciate your support. When I try this one, It will push same value of 'ee3c63e99739011086d3b4b3f153af2c'(scTASK) for all the SCTASKS. Not dynamically getting values from each scTasks. Appreciate your further assistance.
Thanks in advance!

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-20-2022 11:06 PM
Just set the query string in variable "query". "query" can be dynamically generated. In the example, it's setting sys_id in the query.
var sctaskSysid = 'ee3c63e99739011086d3b4b3f153af2c'; // example to dynamically generate query
var query = 'sys_id=' + sctaskSysid + '^numberSTARTSWITHSCTASK'; // paste encoded query here
var result = [];
var grSctask= new GlideRecord('sc_task');
grSctask.addEncodedQuery(query);
grSctask.query();
while (grSctask.next()) {
var requestItem= grSctask.request_item; // get request item for the task
var mrvs = requestItem.variables.multirowvariableset1;
// to get content of mrvs
var jsonObj = JSON.parse(mrvs);
var userList = [];
for (var i=0; i< jsonObj.length; i++) {
userList.push(jsonObj[i].user_name.toString());
}
var obj = {};
//obj.app= obj.application_name= grSctaskgr.variables.app_id.getDisplayValue();//working fine
//obj.account= grSctask.variables.account.toString();//working fine
obj.multiCategory = userList.join(',').toString();
result.push(obj);
gs.info(result[0].multiCategory);
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2022 07:08 PM
Hi Hitoshi,
Really appreciate your help. I tried above in background script. But it's not return any results 😞 . Appreciate your further assistance to get this sorted out.
Thanks in advance!