Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

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

Saurabh Gupta
Kilo Patron

Hi Pawan,

You can easily get the MRVS value at server end using below syntax -

 

var mrvsObj=ritmGR.variables.name_of_mrvs;

ritmGr is the GlideRecord object of RITM.

 

for any specific variable you will get as bleow

var mrvsobj=ritmGR.variables.name_of_mrvs;
for(var i=0;i<mrvsobj.getRowCount();i++)
{
gs.print(mrvsobj.getRow(i).name_of_var_inside_mrvs)
}

 

If my answer replied your question please mark appropriate response as correct so that the question will appear as resolved for other users who may have a similar question in the future.

Regards,
Saurabh


Thanks and Regards,

Saurabh Gupta

Hi Saurabh,

 

Thanks for the response and I really appreciate your support. I can see this coding will return the multi row variable set values. But no comma separator. It's return as a one word instead of multi values. Could you help me to print it separately instead of printing as a one word.

 

Thanks in advance

Hi Pawan,

MRVS is an object. you need to apply the loop to get the different values of a variable.

 

If my answer replied your question please mark appropriate response as correct so that the question will appear as resolved for other users who may have a similar question in the future.

Regards,
Saurabh


Thanks and Regards,

Saurabh Gupta

Hitoshi Ozawa
Giga Sage
Giga Sage

 

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.<name of mrvs>;  // replace with name of mrvs

  // to get content of mrvs
  var jsonObj = JSON.parse(mrvs);
  for (var i=0; i< jsonObj.length; i++) {
    gs.info(jsonObj[i].<mrvs_field>);
  }
}