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