Insert and update Case requests from another Servicenow instance through REST script

maneesh3
Tera Contributor

Hi Team,

 

I am working on a requirement in integration b/w  two ServiceNow Instances and struck with REST script to insert a new request and update exisiting ticket, I have below script but it is creating duplicates:

 

(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
 
    var body = request.body.dataString;
    var payload = JSON.parse(body);
 
    //Get data from payload
    var sysID = payload.sys_id;
    var state = payload.state;
    var comments = payload.comments;
    var priority = payload.priority;
    var correlationID = payload.sys_id;
    var short1 = payload.short_description;
    var desc1 = payload.description;
    var custnum = payload.number;
 
 
 
    //handle the JSON array into string
    // var field9Raw = payload.u_field_9;
    // var field9 = JSON.stringify(field9Raw);
 
    var importTable = new GlideRecord('sn_customerservice_case');
    importTable.addQuery("number", custnum);
    importTable.addQuery("correlation_id", correlationID);
    importTable.query();

    if (!importTable.next()) {
    importTable.initialize();
 
    //Set data to staging table record
    importTable.sys_id = sysID;
    importTable.state = state;
    importTable.comments = comments;
    importTable.priority = priority;
    importTable.correlation_id = correlationID;
   // importTable.u_field_9 = field9;
    importTable.short_description = short1;
    importTable.description = desc1;
    importTable.u_customer_ticket = custnum;
 
 
 
    //Insert record to staging table
    importTable.insert();
 
    }


else {
 importTable.sys_id = sysID;
    importTable.state = state;
    importTable.comments = comments;
    importTable.priority = priority;
    importTable.correlation_id = correlationID;
   
    importTable.short_description = short1;
    importTable.description = desc1;
    importTable.u_customer_ticket = custnum;
    importTable.update();





}
var responseBody = {
       
        caseNumber: importTable.number,
        message: 'Case created successfully'
      //  Add more fields as needed
    };
 
    // Send response
    response.setStatus(200);
    response.setContentType('application/json');
    response.setBody(responseBody);
   
 
})(request, response);
 
 
 
 
Please help!!
1 ACCEPTED SOLUTION

Satishkumar B
Giga Sage
Giga Sage

Hi @maneesh3 
It looks like your script is intended to handle both creating and updating cases in a ServiceNow instance, but it's creating duplicates. Here are a few suggestions to resolve the duplication issue:

  • Query by Unique Field: Use a unique field (like number) to check if a record already exists.
  • Avoid Setting sys_id Directly
  • Insert or Update Based on Existence: If no record is found, insert a new one. If a record exists, update it.

 

 

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

    var body = request.body.dataString;
    var payload = JSON.parse(body);

    // Get data from payload
    var sysID = payload.sys_id;
    var state = payload.state;
    var comments = payload.comments;
    var priority = payload.priority;
    var correlationID = payload.sys_id;
    var short1 = payload.short_description;
    var desc1 = payload.description;
    var custnum = payload.number;

    var importTable = new GlideRecord('sn_customerservice_case');
    
    // Check if a record with the same number exists
    importTable.addQuery("number", custnum);
    importTable.query();

    if (!importTable.next()) {
        // No existing record found, create a new one
        importTable.initialize();
        
        // Set data to new record
        importTable.state = state;
        importTable.comments = comments;
        importTable.priority = priority;
        importTable.correlation_id = correlationID;
        importTable.short_description = short1;
        importTable.description = desc1;
        importTable.u_customer_ticket = custnum;

        // Insert new record
        importTable.insert();
    } else {
        // Record found, update it
        importTable.state = state;
        importTable.comments = comments;
        importTable.priority = priority;
        importTable.correlation_id = correlationID;
        importTable.short_description = short1;
        importTable.description = desc1;
        importTable.u_customer_ticket = custnum;

        // Update existing record
        importTable.update();
    }

    var responseBody = {
        caseNumber: importTable.number,
        message: 'Case processed successfully'
        // Add more fields as needed
    };

    // Send response
    response.setStatus(200);
    response.setContentType('application/json');
    response.setBody(responseBody);

})(request, response);
​

 

 

 

……………………………………………………………………………………………………

Please Mark it helpful 👍and Accept Solution✔️!! If this helps you to understand. 

 

 

View solution in original post

3 REPLIES 3

Satishkumar B
Giga Sage
Giga Sage

Hi @maneesh3 
It looks like your script is intended to handle both creating and updating cases in a ServiceNow instance, but it's creating duplicates. Here are a few suggestions to resolve the duplication issue:

  • Query by Unique Field: Use a unique field (like number) to check if a record already exists.
  • Avoid Setting sys_id Directly
  • Insert or Update Based on Existence: If no record is found, insert a new one. If a record exists, update it.

 

 

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

    var body = request.body.dataString;
    var payload = JSON.parse(body);

    // Get data from payload
    var sysID = payload.sys_id;
    var state = payload.state;
    var comments = payload.comments;
    var priority = payload.priority;
    var correlationID = payload.sys_id;
    var short1 = payload.short_description;
    var desc1 = payload.description;
    var custnum = payload.number;

    var importTable = new GlideRecord('sn_customerservice_case');
    
    // Check if a record with the same number exists
    importTable.addQuery("number", custnum);
    importTable.query();

    if (!importTable.next()) {
        // No existing record found, create a new one
        importTable.initialize();
        
        // Set data to new record
        importTable.state = state;
        importTable.comments = comments;
        importTable.priority = priority;
        importTable.correlation_id = correlationID;
        importTable.short_description = short1;
        importTable.description = desc1;
        importTable.u_customer_ticket = custnum;

        // Insert new record
        importTable.insert();
    } else {
        // Record found, update it
        importTable.state = state;
        importTable.comments = comments;
        importTable.priority = priority;
        importTable.correlation_id = correlationID;
        importTable.short_description = short1;
        importTable.description = desc1;
        importTable.u_customer_ticket = custnum;

        // Update existing record
        importTable.update();
    }

    var responseBody = {
        caseNumber: importTable.number,
        message: 'Case processed successfully'
        // Add more fields as needed
    };

    // Send response
    response.setStatus(200);
    response.setContentType('application/json');
    response.setBody(responseBody);

})(request, response);
​

 

 

 

……………………………………………………………………………………………………

Please Mark it helpful 👍and Accept Solution✔️!! If this helps you to understand. 

 

 

It Worked Thanks a ton

BillMartin
Giga Sage
Giga Sage

@maneesh3 ,

 

Sharing you my clip. hope it helps!