Multi Row variable set values store in an object

pawan2
Tera Expert

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

1 ACCEPTED SOLUTION

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) {}
}

 

View solution in original post

21 REPLIES 21

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!

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);
}

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!

 

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);
}

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!