(function executeRule(current, previous) { /*null when async*/
//Map the SN priority with OpsRamp priority
var snowPriority = current.priority;
var opsRampPriority = snowPriority;
if(snowPriority == '1') {//Critical in SN
opsRampPriority = 'Urgent';//Critical in OpsRamp
} else if(snowPriority == '2') {//High in SN
opsRampPriority = 'High';//High in OpsRamp
} else if(snowPriority == '3') {//Medium in SN
opsRampPriority = 'Normal';//Normal in OpsRamp
} else if(snowPriority == '4') {//Low in SN
opsRampPriority = 'Low';//Low in OpsRamp
} else if(snowPriority == '5') {//Low in SN
opsRampPriority = 'Very Low';//Low in OpsRamp
}
//gs.addErrorMessage('OpsRamp Priority: ' + opsRampPriority);
//gs.addErrorMessage('SNOW Priority: ' + snowPriority);
//Map the SN status with OpsRamp status
var snowState = current.state;
var opsRampStatus = snowState;
if(snowState == '1') {//New in SN
opsRampStatus = 'New';//New in OpsRamp
} else if(snowState == '2') {//In Progress in SN
opsRampStatus = 'Open';//Open in OpsRamp
} else if(snowState == '3') {//On Hold in SN
opsRampStatus = 'On Hold';//On Hold in OpsRamp
} else if(snowState == '6') {//Resolved in SN
opsRampStatus = 'Resolved';//Closed in OpsRamp
}else if(snowState == '7') {//Closed in SN
opsRampStatus = 'Closed';//Closed in OpsRamp
}
//gs.addErrorMessage('OpsRamp Status: ' + opsRampStatus);
//gs.addErrorMessage('SNOW State: ' + snowState);
//Update incident properties
//gs.addErrorMessage('OpsRamp incident ID: ' + current.u_opsramp_incident_id);
//gs.addErrorMessage('OpsRamp client ID: ' + current.company.u_opsramp_client_id);
//gs.addErrorMessage('SNOW incident number: ' + current.number);
//If it is Partner level integration, SNOW company is mapped to OpsRamp client
//OpsRamp client id should be in available in SNOW company - Create custom field in Company
//and add the mapped OpsRamp client id here
//var opsRampClientId = current.company.u_opsramp_client_id;
//If it is client level integration, hard code the OpsRamp client id here
var opsRampClientId = 'client_392';
if(!JSUtil.nil(current.u_opsramp_incident_id)) {//Update incident
var uRestMsg = new sn_ws.RESTMessageV2('See & Try OpsRamp Incident REST', 'Update Incident');
uRestMsg.setStringParameter('tenantId',opsRampClientId);
uRestMsg.setStringParameter('incidentId',current.u_opsramp_incident_id);
uRestMsg.setStringParameter('priorityToken',opsRampPriority);
uRestMsg.setStringParameter('statusToken',opsRampStatus);
//If work notes added?
//gs.addErrorMessage("Work notes changed? : " + current.work_notes.changes());
if(current.work_notes.getJournalEntry(1) && current.work_notes.changes()){
var content = current.work_notes.getJournalEntry(1);
content = content.replace(/(?:rn|r|n)/g, 'n');
content = content.replace(/(?:t)/g, 't');
//gs.addErrorMessage("Work notes: " + content);
uRestMsg.setStringParameter('responseToken',content);
}
//Execute script
var uRestMsgResponse = uRestMsg.executeAsync();
//var opsRampUpdateIncJSON = new JSON().decode(uRestMsgResponse.getBody());
//gs.addErrorMessage("Status Code: " + uRestMsgResponse.getStatusCode());
//gs.addErrorMessage("Error Msg: " + uRestMsgResponse.getErrorMessage());
} else if(snowState == '1') { //New incident
//gs.addErrorMessage('New incident creation...');
var cRestMsg = new sn_ws.RESTMessageV2('See & Try OpsRamp Incident REST', 'Create Incident');
cRestMsg.setStringParameter('tenantId',opsRampClientId);
//Set SN incident short description as OpsRamp subject
subject = current.short_description;
subject = subject.replace(/(?:rn|r|n)/g, 'n');
subject = subject.replace(/(?:t)/g, 't');
cRestMsg.setStringParameter('subjectToken',subject);
//Set SN incident description as OpsRamp description
description = current.description;
description = description.replace(/(?:rn|r|n)/g, 'n');
description = description.replace(/(?:t)/g, 't');
cRestMsg.setStringParameter('descriptionToken',description);
cRestMsg.setStringParameter('extTicketIdToken',current.sys_id);
cRestMsg.setStringParameter('priorityToken',opsRampPriority);
var cRestMsgResponse = cRestMsg.executeAsync();
//Read OpsRamp incidentId from response and update to SN incident.
//gs.addErrorMessage('responseBody: ' + cRestMsgResponse.getBody());
//gs.log('OpsRamp create incident response body: ' + cRestMsgResponse.getBody());
var opsRampCreateIncJSON = new JSON().decode(cRestMsgResponse.getBody());
var inc = new GlideRecord('incident');
inc.get(current.sys_id);
inc.u_opsramp_incident_id=opsRampCreateIncJSON.id;
inc.updateWithReferences();
}
})(current, previous);
ServiceNow Business Rule Script
Updated Sep 5, 2022