Name
global.ProcessSyncUtils
Description
Utility functions for Process Sync Scripted Rest API
Script
var ProcessSyncUtils = Class.create();
ProcessSyncUtils.IH_SYNC_REMOTE_SYSTEM = "ih_sync_remote_system";
ProcessSyncUtils.INBOUND_USER = "inbound_api_user";
ProcessSyncUtils.EXTERNAL_ID = "external_id";
ProcessSyncUtils.INBOUND_STATE = "inbound_state";
ProcessSyncUtils.prototype = {
initialize: function() {},
validateRequestHeaders: function( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
var missingHeadersStr = null, i;
var mandatoryHeaders = ["local-object", "process-event", "remote-system", "operation"];
for(i=0; i<mandatoryHeaders.length; i++){
var headerVal = request.getHeader(mandatoryHeaders[i]);
if(gs.nil(headerVal)){
if(missingHeadersStr == null){
missingHeadersStr = mandatoryHeaders[i];
} else {
missingHeadersStr = missingHeadersStr + ", " + mandatoryHeaders[i];
}
}
}
if(missingHeadersStr != null){
response.setError(new sn_ws_err.BadRequestError('Request missing mandatory headers: ' + missingHeadersStr));
return false;
}
var operation = request.getHeader("operation").toLowerCase();
if (!(operation === "create" ||
operation === "update" ||
operation ==="delete")) {
response.setError(new sn_ws_err.BadRequestError('operation header valid values are create/update/delete'));
return false;
}
return true;
},
validateRequestParams: function( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
var missingParamsStr,
mandatoryParams = ["remote_system", "correlation_id"],
params = request.queryParams;
for (var i = 0; i < mandatoryParams.length; i++) {
var paramVal = params[mandatoryParams[i]];
if (gs.nil(paramVal)) {
if (missingParamsStr) {
missingParamsStr = missingParamsStr + ", " + mandatoryParams[i];
} else {
missingParamsStr = mandatoryParams[i];
}
}
}
if (missingParamsStr) {
response.setError(new sn_ws_err.BadRequestError('Request missing mandatory params: ' + missingParamsStr));
return false;
}
var remoteSystemExtId = params["remote_system"];
if (!gs.nil(remoteSystemExtId)) {
var remoteSystemId = this.getRemoteSystemId(remoteSystemExtId, response);
if (gs.nil(remoteSystemId)) {
return false;
}
}
return true;
},
<!-- Get remote system sys id by checking external id, inbound state as active and inbound user as system user -->
getRemoteSystemId: function(/*String*/ remoteSystem, /*RESTAPIResponse*/ response){
var remoteSystemGR = new GlideRecord(ProcessSyncUtils.IH_SYNC_REMOTE_SYSTEM);
remoteSystemGR.addQuery(ProcessSyncUtils.EXTERNAL_ID, remoteSystem);
remoteSystemGR.addQuery(ProcessSyncUtils.INBOUND_STATE, "!=", "disabled");
remoteSystemGR.query();
if(remoteSystemGR.hasNext()){
remoteSystemGR.next();
if(remoteSystemGR.getValue(ProcessSyncUtils.INBOUND_USER) === gs.getUserID())
return remoteSystemGR.getValue("sys_id");
else {
response.setStatus(401);
response.setError(new sn_ws_err.BadRequestError('API caller does not match with remote system user'));
return null;
}
}
response.setStatus(400);
response.setError(new sn_ws_err.BadRequestError('No active remote system found'));
return null;
},
type: 'ProcessSyncUtils'
};
Sys ID
cb8a88d053d21010b7deddeeff7b12eb