Will Update work in the Insert Scripted Rest API

Ksnow
Tera Contributor

Hello all, @shloke04 @Ankur Bawiskar 

I have used scripted rest API (Insert), POST method to Insert the data, It worked fine.

There are few records inserted, all good here but later I have added 1 or 2 fields in that table and updated the scripted accordingly, just to update those 2 fields without disturbing the earlier records but the problem here is now records or inserting again as duplicates even though we have check point to stop duplicates.

Update function will not work in the Insert scripted rest API?

find_real_file.png

Please help!

Thanks,

Ksnow

17 REPLIES 17

Ankur Bawiskar
Tera Patron
Tera Patron

Hi,

unfortunately you haven't shared the script etc

HTPP post method is just a nomenclature for inserting but it depends on your script whether it allows insert/update

Regards
Ankur

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

(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

// For each Virtual Network
for (var i = 0; i < request.body.data.length; i++) {

var vnet = request.body.data[i];

var rgSysId;
var grRg = new GlideRecord("u_cmdb_ci_azure_resource_group");
grRg.addQuery("name", vnet.resourceGroup);
grRg.query();
while (grRg.next()) {
rgSysId = grRg.sys_id;
}
// added location field and glided the table to get the value
var locSysid;
var grAL = new GlideRecord("u_azure_location");
grAL.addQuery("u_backend", vnet.u_azure_location);
grAL.query();
while (grAL.next()) {
locSysid = grAL.sys_id;

}
var subscriptionSysId;
var grSub = new GlideRecord("cmdb_ci_azure_subscription");
grSub.addQuery("u_azure_id", vnet.u_azure_subscription);
grSub.query();
while (grSub.next()) {
subscriptionSysId = grSub.sys_id;
}

var vnetSysId;
var grVnet = new GlideRecord("u_cmdb_ci_azure_virtual_network");
grVnet.addQuery("name", vnet.name);
grVnet.addQuery("u_resource_group", rgSysId);
grVnet.query();
// If there is not already a Virtual Network with this name, insert it
if (!grVnet.hasNext()) {
grVnet.initialize();
grVnet.u_resource_group = rgSysId;
grVnet.u_azure_location = locSysid;
grVnet.name = vnet.name;
grVnet.u_azure_subscription = subscriptionSysId;
grVnet.u_active = vnet.u_active;
vnetSysId = grVnet.insert();
} else {
grVnet.u_azure_location = locSysid;
grVnet.u_azure_subscription = subscriptionSysId;
grVnet.u_active = vnet.u_active;
grVnet.setWorkflow(false);
grVnet.autoSysFields(false);
grVnet.update();
while (grVnet.next()) {
vnetSysId = grVnet.sys_id.toString();


}
}

// For each Subnet
for (var i2 = 0; i2 < vnet.subnets.length; i2++) {
var subnet = vnet.subnets[i2];
var grSubnet = new GlideRecord("u_azure_subnets");
grSubnet.addQuery("name", subnet.name);
grSubnet.addQuery("u_virtual_network", vnetSysId);
grSubnet.query();
// If there is not already a Subnet with this name UNDER this vnet, insert it
if (!grSubnet.hasNext()) {
grSubnet.initialize();
grSubnet.u_virtual_network = vnetSysId;
grSubnet.name = subnet.name;
grSubnet.u_cidr = subnet.cidr;
grSubnet.u_active = subnet.u_active;
grSubnet.insert();}



}

}

return request.body.data;

})(request, response);

Hi,

update as this

use next() and not hasNext()

(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

    // For each Virtual Network
    for (var i = 0; i < request.body.data.length; i++) {

        var vnet = request.body.data[i];
        var rgSysId;
        var grRg = new GlideRecord("u_cmdb_ci_azure_resource_group");
        grRg.addQuery("name", vnet.resourceGroup);
        grRg.query();
        while (grRg.next()) {
            rgSysId = grRg.sys_id;
        }
        // added location field and glided the table to get the value
        var locSysid;
        var grAL = new GlideRecord("u_azure_location");
        grAL.addQuery("u_backend", vnet.u_azure_location);
        grAL.query();
        while (grAL.next()) {
            locSysid = grAL.sys_id;

        }
        var subscriptionSysId;
        var grSub = new GlideRecord("cmdb_ci_azure_subscription");
        grSub.addQuery("u_azure_id", vnet.u_azure_subscription);
        grSub.query();
        while (grSub.next()) {
            subscriptionSysId = grSub.sys_id;
        }

        var vnetSysId;
        var grVnet = new GlideRecord("u_cmdb_ci_azure_virtual_network");
        grVnet.addQuery("name", vnet.name);
        grVnet.addQuery("u_resource_group", rgSysId);
        grVnet.query();
        // If there is not already a Virtual Network with this name, insert it
        if (!grVnet.next()) {
            grVnet.initialize();
            grVnet.u_resource_group = rgSysId;
            grVnet.u_azure_location = locSysid;
            grVnet.name = vnet.name;
            grVnet.u_azure_subscription = subscriptionSysId;
            grVnet.u_active = vnet.u_active;
            vnetSysId = grVnet.insert();
        } else {
            grVnet.u_azure_location = locSysid;
            grVnet.u_azure_subscription = subscriptionSysId;
            grVnet.u_active = vnet.u_active;
            grVnet.setWorkflow(false);
            grVnet.autoSysFields(false);
            grVnet.update();
            while (grVnet.next()) {
                vnetSysId = grVnet.sys_id.toString();
            }
        }

        // For each Subnet
        for (var i2 = 0; i2 < vnet.subnets.length; i2++) {
            var subnet = vnet.subnets[i2];
            var grSubnet = new GlideRecord("u_azure_subnets");
            grSubnet.addQuery("name", subnet.name);
            grSubnet.addQuery("u_virtual_network", vnetSysId);
            grSubnet.query();
            // If there is not already a Subnet with this name UNDER this vnet, insert it
            if (!grSubnet.hasNext()) {
                grSubnet.initialize();
                grSubnet.u_virtual_network = vnetSysId;
                grSubnet.name = subnet.name;
                grSubnet.u_cidr = subnet.cidr;
                grSubnet.u_active = subnet.u_active;
                grSubnet.insert();}

        }
    }

    return request.body.data;

})(request, response);

Regards
Ankur

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

I tried @Ankur Bawiskar , still we have duplicates