Name

sn_cimaf.CIActionProvider

Description

Implements extension point sn_reacf.RemedialActionEngine for class type sn_cimaf_action

Script

var CIActionProvider = Class.create();
CIActionProvider.prototype = {
  initialize: function() {},

  TABLES: {
  	SN_CIMAF_ACTION: "sn_cimaf_action",
  	SN_CIMAF_ACTION_OUTPUT: "sn_cimaf_action_output",
  	SN_CIMAF_ACTION_REQUEST: "sn_cimaf_action_request",
  },

  CONSTANTS: {
  	ACTION_EXECUTION_TABLE: "action_execution_table",
  	ACTION_EXECUTION_ID: "action_execution_id",
  	ACTION_REQUEST: "action_request",
  	STATE: "state",
  	PAYLOAD: "payload"

  },

  /**
   * @param String className - class name to check which action is being executed
   **/
  handles: function(className) {
  	return className === this.TABLES.SN_CIMAF_ACTION;
  },

  /**
   * @param Object ciActionGr - GlideRecord reference to the ci action record
   * @param Object remedialActionGr - GlideRecord reference to the remedial action record
   * @return Boolean value indicating if logged-in user is authorized to execute given ci action
   **/
  isAuthorized: function(ciActionGr, remedialActionGr) {
  	if (ciActionGr.isValidRecord())
  		return new sn_cimaf.CIActionEngine().isAuthorized(ciActionGr);
  	else
  		gs.error("[CIActionProvider][isAuthorized]: ciAction glide record is invalid.");
  	return false;
  },

  /**
   * @param Object ciActionGr - GlideRecord reference to the ci action record
   * @param Object ci - GlideRecord reference to the target ci item
   * @param JSON actionParams - required parameters to execute the action
   * @return JSON object with attributes action_execution_table and action_execution_id
   **/
  execute: function(ciActionGr, ci, actionParams) {
  	var response = {};
  	var ciActionEngine = new sn_cimaf.CIActionEngine();
  	var actionRequestId = ciActionEngine.execute(ciActionGr, ci, actionParams);
  	response[this.CONSTANTS.ACTION_EXECUTION_TABLE] = this.TABLES.SN_CIMAF_ACTION_REQUEST;
  	response[this.CONSTANTS.ACTION_EXECUTION_ID] = actionRequestId;
  	return response;
  },

  /**
   * @param Object ciActionRequestGr - GlideRecord reference to the ci action request record
   * Checks associated action execution status and return response if available
   * @return JSON with attributes state and output Payload
   **/
  getOutput: function(ciActionRequestGr) {
  	if (gs.nil(ciActionRequestGr) || !ciActionRequestGr.isValidRecord()) {
  		gs.error("[CIActionProvider][getOutput]: Invalid action request record");
  		return;
  	}
  	var actionOutputGr = new GlideRecord(this.TABLES.SN_CIMAF_ACTION_OUTPUT);
  	actionOutputGr.addQuery(this.CONSTANTS.ACTION_REQUEST, ciActionRequestGr.getUniqueValue());
  	actionOutputGr.query();
  	var output = {
  		"status": {
  			"value": ciActionRequestGr.getValue(this.CONSTANTS.STATE),
  			"displayValue": ciActionRequestGr.getDisplayValue(this.CONSTANTS.STATE)
  		},
  		"payload": []
  	};
  	while (actionOutputGr.next()) {
  		output.payload.push(actionOutputGr.getValue(this.CONSTANTS.PAYLOAD));
  	}
  	return output;
  },

  type: 'CIActionProvider'
};

Sys ID

d8f9f50f437c2110cd5b8beeaab8f2ee

Offical Documentation

Official Docs: