The CreatorCon Call for Content is officially open! Get started here.

Script only capturing the last row variable values and send via REST call

amamd
Tera Contributor

Script is only sending the last row of the variable values from a  multirow table.

Need to construct a json load to include variable values of all rows filled up in the multirow table. (could be  1 row to up to 5)

Below can have up to 5 body of data. 

GREEN text are only static ones, only the 5 Black bold values can repeat.

{
"input_vars": {
      "Template": [{
          "number": var1,
           "perh": var2,
           "ear": var3,
           "file": var4,
           "day": var5

},

{
           "number": var6,
           "perh": var7,
           "ear": var8,
           "file": var9,
           "day": var10

},

.

.

.

.

.

],
"work": "taskreq"
}
}

 

__________________________________________________________

var SysId = current.sys_id;

var jsons;
var gr = new GlideRecord("sc_req_item");
gr.addQuery("sys_id", SysId);
gr.query();
if (gr.next()) {
jsons = gr.variables.Multirow_Set;
}
var parser = JSON.parse(jsons);
var lengths = parser.length;

 

for(var i = 0 ; i < parser.length; i++){

 

var var1 = parser[i].number;
var var2 = parser[i].perh;
var var3 = parser[i].ear;
var var4 = parser[i].file;
var var5 = parser[i].day;

 

var obj = {
"input_vars": {
"Template": [{
"number": var1,
"perh": var2,
"ear": var3,
"file": var4,
"day": var5
}],
"work": "taskreq"
}
};
}

var json = JSON.stringify(obj);

 

 

6 REPLIES 6

Brad Bowman
Kilo Patron
Kilo Patron

Try adding a .toString() everywhere you are storing object values in a script variable, and some log lines to see what is happening throughout the script, so like this:

var SysId = current.sys_id.toString();

var jsons;
var gr = new GlideRecord("sc_req_item");
gr.addQuery("sys_id", SysId);
gr.query();
if (gr.next()) {
jsons = gr.variables.Multirow_Set;
gs.info('Script jsons=' + jsons);
var parser = JSON.parse(jsons);
var lengths = parser.length;
gs.info('Script lengths=' + jsons);
 
for(var i = 0 ; i < parser.length; i++){
var var1 = parser[i].number.toString();
var var2 = parser[i].perh.toString();
var var3 = parser[i].ear.toString();
var var4 = parser[i].file.toString();
var var5 = parser[i].day.toString();
 

 

Thanks Brad, but still getting the last row of variables in the json load. Need to have a loop to include all variables added to the payload to construct something like below (e.g for a two row values), green ones are one off text in the json load, the others are dynamic values as per row.

{
"input_vars": {
      "Template": [{
          "number": var1,
           "perh": var2,
           "ear": var3,
           "file": var4,
           "day": var5

},

{
           "number": var1,
           "perh": var2,
           "ear": var3,
           "file": var4,
           "day": var5

}],

"work": "taskreq"
}}

 

 

var SysId = current.sys_id.toString();

var jsons;
var gr = new GlideRecord("sc_req_item");
gr.addQuery("sys_id", SysId);
gr.query();
if (gr.next()) {
jsons = gr.variables.Multirow_Set;
gs.info('Script jsons=' + jsons);
var parser = JSON.parse(jsons);
var lengths = parser.length;
gs.info('Script lengths=' + jsons);
 
for(var i = 0 ; i < parser.length; i++){
var var1 = parser[i].number.toString();
var var2 = parser[i].perh.toString();
var var3 = parser[i].ear.toString();
var var4 = parser[i].file.toString();
var var5 = parser[i].day.toString();
var obj = {
"input_vars": {
"Template": [{
"number": var1,
"perh": var2,
"ear": var3,
"file": var4,
"day": var5
}],
"work": "taskreq"
}
};
}

var json = JSON.stringify(obj);

 

Sorry, I missed that you weren't pushing the objects to an array

var SysId = current.sys_id.toString();
var jsons;
var objArr = [];
var gr = new GlideRecord("sc_req_item");
gr.addQuery("sys_id", SysId);
gr.query();
if (gr.next()) {
    jsons = gr.variables.Multirow_Set;
    gs.info('Script jsons=' + jsons);
    var parser = JSON.parse(jsons);
    var lengths = parser.length;
    gs.info('Script lengths=' + jsons);
    for(var i = 0 ; i < parser.length; i++){
        var var1 = parser[i].number.toString();
        var var2 = parser[i].perh.toString();
        var var3 = parser[i].ear.toString();
        var var4 = parser[i].file.toString();
        var var5 = parser[i].day.toString();
        objArr.push = ({
            "input_vars": {
                "Template": [{
                    "number": var1,
                    "perh": var2,
                    "ear": var3,
                    "file": var4,
                    "day": var5
                }],
                "work": "taskreq"
            }
        });
    }
}
var json = JSON.stringify(objArr);

Thanks Brad, 

The request body being sent is [] in the Outbound HTTP logs and the response is further below. Any additional tweaking required somewhere ? 

 

amamd_0-1679492388410.png

 

 

amamd_1-1679492449901.png