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.

How to pass multiple Multi Row variable set values as JSON using Script in a Flow Designer

User205031
Tera Contributor

Hi All,

I have a catalog form with 2 variable sets:

User205031_0-1743155645823.png

 

I want to pass the values in JSON format so that the output looks like:

"[{\"serial\":\"1\",\"datetime\":\"2\",\"target_version\":\"3\"},{\"site_wan_iterface\":\"4\",\"port_num\":\"5\",\"bandwidth\":\"6\"}]"

 

I have written below script:

function addOSUpgrade(grRITM2) {
        var ritm_variables2 = {};
        for (var prop2 in grRITM2.variables) {
            if (prop2 == 'os_upgrade_configuration') {
                ritm_variables2.vars = JSON.parse(grRITM2.variables.os_upgrade_configuration.toString());
                var add_os = [];
                for (var i = 0; i < ritm_variables2.vars.length; i++) {
                    var sserial = setSerial(ritm_variables2.vars[i].serial);
                    var sdatetime = setDateTime(ritm_variables2.vars[i].datetime);
                    var starget = setTargetVersion(ritm_variables2.vars[i].target_version);
                    var obj2 = {
                        "serial": sserial,
                        "datetime": sdatetime,
                        "target_version": starget
                    }
                    add_os.push(obj2);
                }
            }
        }
        return JSON.stringify(add_os);
    }
 
function addWANInterface(grRITM3) {
        var ritm_variables3 = {};
        for (var prop3 in grRITM3.variables) {
            if (prop3 == 'wan_interface_bandwidth_configuration') {
                ritm_variables3.vars = JSON.parse(grRITM3.variables.wan_interface_bandwidth_configuration.toString());
                var add_wan = [];
                for (var i = 0; i < ritm_variables3.vars.length; i++) {
                    var ssitewan = setWanInterface(ritm_variables3.vars[i].site_wan_iterface);
                    var sportnum = setPortNum(ritm_variables3.vars[i].port_num);
                    var sbandwidth = setBandwidth(ritm_variables3.vars[i].bandwidth);
                    var obj3 = {
                        "site_wan_iterface": ssitewan,
                        "port_num": sportnum,
                        "bandwidth": sbandwidth
                    }
                    add_wan.push(obj3);
                }
            }
        }
        return JSON.stringify(add_wan);
    }
 
var grRITM2 = new GlideRecord('sc_req_item');
    grRITM2.addQuery('number', inputs.ritm_no);
    grRITM2.query();
    if (grRITM2.next()) {
        var finalObj = addOSUpgrade(grRITM2);
    }

    var grRITM3 = new GlideRecord('sc_req_item');
    grRITM3.addQuery('number', inputs.ritm_no);
    grRITM3.query();
    if (grRITM3.next()) {
        var finalObj = addWANInterface(grRITM3);
    }
 
outputs.sdwans = JSON.stringify(finalObj);
 
How to pass the values in the output.sdwans with the format below shown:
"[{\"serial\":\"1\",\"datetime\":\"2\",\"target_version\":\"3\"},{\"site_wan_iterface\":\"4\",\"port_num\":\"5\",\"bandwidth\":\"6\"}]"
1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

@User205031 

so basically you want to combine both the json array and keep only 1 and then send

try this

function addOSUpgrade(grRITM2) {
    var ritm_variables2 = {};
    var add_os = [];
    for (var prop2 in grRITM2.variables) {
        if (prop2 == 'os_upgrade_configuration') {
            ritm_variables2.vars = JSON.parse(grRITM2.variables.os_upgrade_configuration.toString());
            for (var i = 0; i < ritm_variables2.vars.length; i++) {
                var sserial = setSerial(ritm_variables2.vars[i].serial);
                var sdatetime = setDateTime(ritm_variables2.vars[i].datetime);
                var starget = setTargetVersion(ritm_variables2.vars[i].target_version);
                var obj2 = {
                    "serial": sserial,
                    "datetime": sdatetime,
                    "target_version": starget
                };
                add_os.push(obj2);
            }
        }
    }
    return add_os;
}

function addWANInterface(grRITM3) {
    var ritm_variables3 = {};
    var add_wan = [];
    for (var prop3 in grRITM3.variables) {
        if (prop3 == 'wan_interface_bandwidth_configuration') {
            ritm_variables3.vars = JSON.parse(grRITM3.variables.wan_interface_bandwidth_configuration.toString());
            for (var i = 0; i < ritm_variables3.vars.length; i++) {
                var ssitewan = setWanInterface(ritm_variables3.vars[i].site_wan_iterface);
                var sportnum = setPortNum(ritm_variables3.vars[i].port_num);
                var sbandwidth = setBandwidth(ritm_variables3.vars[i].bandwidth);
                var obj3 = {
                    "site_wan_iterface": ssitewan,
                    "port_num": sportnum,
                    "bandwidth": sbandwidth
                };
                add_wan.push(obj3);
            }
        }
    }
    return add_wan;
}

var grRITM2 = new GlideRecord('sc_req_item');
grRITM2.addQuery('number', inputs.ritm_no);
grRITM2.query();
var finalObj = [];

if (grRITM2.next()) {
    finalObj = finalObj.concat(addOSUpgrade(grRITM2));
}

var grRITM3 = new GlideRecord('sc_req_item');
grRITM3.addQuery('number', inputs.ritm_no);
grRITM3.query();

if (grRITM3.next()) {
    finalObj = finalObj.concat(addWANInterface(grRITM3));
}

outputs.sdwans = JSON.stringify(finalObj);

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

2 REPLIES 2

Ankur Bawiskar
Tera Patron
Tera Patron

@User205031 

so basically you want to combine both the json array and keep only 1 and then send

try this

function addOSUpgrade(grRITM2) {
    var ritm_variables2 = {};
    var add_os = [];
    for (var prop2 in grRITM2.variables) {
        if (prop2 == 'os_upgrade_configuration') {
            ritm_variables2.vars = JSON.parse(grRITM2.variables.os_upgrade_configuration.toString());
            for (var i = 0; i < ritm_variables2.vars.length; i++) {
                var sserial = setSerial(ritm_variables2.vars[i].serial);
                var sdatetime = setDateTime(ritm_variables2.vars[i].datetime);
                var starget = setTargetVersion(ritm_variables2.vars[i].target_version);
                var obj2 = {
                    "serial": sserial,
                    "datetime": sdatetime,
                    "target_version": starget
                };
                add_os.push(obj2);
            }
        }
    }
    return add_os;
}

function addWANInterface(grRITM3) {
    var ritm_variables3 = {};
    var add_wan = [];
    for (var prop3 in grRITM3.variables) {
        if (prop3 == 'wan_interface_bandwidth_configuration') {
            ritm_variables3.vars = JSON.parse(grRITM3.variables.wan_interface_bandwidth_configuration.toString());
            for (var i = 0; i < ritm_variables3.vars.length; i++) {
                var ssitewan = setWanInterface(ritm_variables3.vars[i].site_wan_iterface);
                var sportnum = setPortNum(ritm_variables3.vars[i].port_num);
                var sbandwidth = setBandwidth(ritm_variables3.vars[i].bandwidth);
                var obj3 = {
                    "site_wan_iterface": ssitewan,
                    "port_num": sportnum,
                    "bandwidth": sbandwidth
                };
                add_wan.push(obj3);
            }
        }
    }
    return add_wan;
}

var grRITM2 = new GlideRecord('sc_req_item');
grRITM2.addQuery('number', inputs.ritm_no);
grRITM2.query();
var finalObj = [];

if (grRITM2.next()) {
    finalObj = finalObj.concat(addOSUpgrade(grRITM2));
}

var grRITM3 = new GlideRecord('sc_req_item');
grRITM3.addQuery('number', inputs.ritm_no);
grRITM3.query();

if (grRITM3.next()) {
    finalObj = finalObj.concat(addWANInterface(grRITM3));
}

outputs.sdwans = JSON.stringify(finalObj);

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Hi Ankur,

 

It is working now.

 

Thank you!