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

Offical Documentation

Official Docs: