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!