REST API Integration not working while using the PUT method to update incident on another SNOW instance

suhan07
Kilo Contributor

Hi, 

I am new to REST API Integration, still exploring the ServiceNow learning curve. I am trying to implement an eBonding integration between two SN instances - SN1 (source) and SN2 (target). 

I am able to successfully create the incident. However, when I am trying to update the incident using the "PUT" method, any update in SN1 is not being reflected in SN2. For your reference, I am providing the BR below, would really appreciate some help here?

(function executeRule(current, previous /*null when async*/) {

// Add your code here

var body = {
"short_description": current.short_description.toString(),
"description": current.description.toString(),
"caller_id": current.getDisplayValue('caller_id'),
"state": current.getDisplayValue('state'),
"impact": current.getDisplayValue('impact'),
"urgency": current.getDisplayValue('urgency')
};

var corID = current.getValue('correlation_id');

try {
var r = new sn_ws.RESTMessageV2('TDC Integration', 'Default PUT');
r.setEndpoint('https://dev100277.service-now.com/api/now/table/incident/'+corID);
r.setRequestBody(JSON.stringify(body));

//override authentication profile
//authentication type ='basic'/ 'oauth2'
//r.setAuthenticationProfile(authentication type, profile name);

//set a MID server name if one wants to run the message on MID
//r.setMIDServer('MY_MID_SERVER');

//if the message is configured to communicate through ECC queue, either
//by setting a MID server or calling executeAsync, one needs to set skip_sensor
//to true. Otherwise, one may get an intermittent error that the response body is null
//r.setEccParameter('skip_sensor', true);

var response = r.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();

}
catch(ex) {
var message = ex.message;
}
})(current, previous);

   

 

17 REPLIES 17

MrMuhammad
Giga Sage

I have placed few logs, please execute and let me know what you get in the logs. Also, please make sure credentials and sys_id is correct. 

(function executeRule(current, previous /*null when async*/ ) {

    // Add your code here

    var body = {
        "short_description": current.short_description.toString(),
        "description": current.description.toString(),
        "caller_id": current.getDisplayValue('caller_id'),
        "state": current.getDisplayValue('state'),
        "impact": current.getDisplayValue('impact'),
        "urgency": current.getDisplayValue('urgency')
    };

    var corID = current.getValue('correlation_id');

    try {
        var r = new sn_ws.RESTMessageV2();
        r.setEndpoint('https://dev100277.service-now.com/api/now/table/incident/' + corID);
        r.setHttpMethod("put");
        r.setRequestBody(JSON.stringify(body));
        var requestBody = r.getRequestBody();
        gs.info("SH - "+ requestBody);
        
        //override authentication profile
        //authentication type ='basic'/ 'oauth2'
        //r.setAuthenticationProfile(authentication type, profile name);

        var response = r.execute();
        var responseBody = response.getBody();
        gs.info("SH - " + responseBody);
        var httpStatus = response.getStatusCode();
        gs.info("SH - " + httpStatus);

    } catch (ex) {
        var message = ex.message;
    }
})(current, previous);

Please mark this correct & helpful if it answered your question.

Thanks & Regards,
Sharjeel

 

Regards,
Muhammad

Firstly thank you Muhammad for sharing the logs. Pasting below what I got in the log. I guess, I need to retrieve the sys-ID of the Incident created in the target instance and then pass that in the url within the business rule. 

 

Would really appreciate some help here?

 

 

find_real_file.png 

Hi Suhan, 

By looking at the error message you should verify two things.

  • The sys_id you are using to update the record is correct?
  • All the write roles required to write the incident record is given to service/api account?
  • Try using PATCH request instead of PUT. I had faced issues with PUT request but that was year back when I had implemented the same integration.

 

Please mark this correct & helpful if it answered your question.

Thanks & Regards,
Sharjeel

Regards,
Muhammad

Hi @suhan07,

In eBonding Spoke we have update action available that you can leverage to update the remote incident. 

 

Please mark this correct & helpful if it answered your question.

Thanks & Regards,
Sharjeel

 

Regards,
Muhammad