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

Hi Hitoshi,

 

Thanks for the response and I really appreciate your support. But still this script return undefined unfortunately. Appreciate if you could help me to get these values into the object.

 

Thanks in advance,

Pawan

Hitoshi Ozawa
Giga Sage
Giga Sage

Following should set obj.multiCategory with comma separated user_name from mrvs.

var g = new GlideRecord('sc_task');
if (gr.get(<SYS_ID OF THE SCTASK>)) {
  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= g.variables.app_id.getDisplayValue();//working fine
  obj.account= g.variables.account.toString();//working fine
  obj.multiCategory=userList.join(',');
  result.push(obj);
}

Hi Hitoshi.

Thanks for the prompt response. Much appreciated. Can we try this in a background script. Cause when I add this part userList.push(jsonObj[i].user_name.toString()); It will return an error. If I remove this part and run, It will return values continuesly as a word without comma separator. Appreciate your further assistance.

 

Thanks in advance.

Can we test this in a background script? When I try below in background script, It returns [object object instead of values. Not sure I've done a mistake here. Appreciate your help.

 

var gr = new GlideRecord('sc_task');

if (gr.get('sys_id')) {

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.multiCategory=userList.join(',');

gs.print(obj);

}

The problem was with the name of the mrvs. ServiceNow converts to all lowercase.

var result = [];
var gr = new GlideRecord('sc_task');
if (gr.get('ee3c63e99739011086d3b4b3f153af2c')) {
  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);
}

Execution result:

*** Script: test user 1,test user 2

This is my variables in RITM.

find_real_file.png