Script only capturing the last row variable values and send via REST call
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-21-2023 07:51 AM
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);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-21-2023 11:38 AM
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();
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-21-2023 10:52 PM
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);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-22-2023 05:28 AM
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);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-22-2023 06:42 AM
Thanks Brad,
The request body being sent is [] in the Outbound HTTP logs and the response is further below. Any additional tweaking required somewhere ?