Name
global.VANotificationActionAPI
Description
Script API to create VA notification action.
Script
var VANotificationActionAPI = Class.create();
VANotificationActionAPI.prototype = {
TOPIC_REF_QUALIFIER: "active=true^published=true^libraryISEMPTY^ORlibrary=false^is_system_topicISEMPTY^ORis_system_topic=false",
VA_NOTIFICATION_ACTION_TABLE: "sys_notification_va_action",
initialize: function() {},
/**
* API to create VA Action for a notification.
* @param notificationId : valid notification (sys_notification) sys_id
* @param payload: Array of action objects. Each object contains valid required fields for creating the action. Example:
* [{
name: “topic action”, (Mandatory),
topic: "sys_id of topic sys_cs_topic", (Mandatory)
active: true/false, (default is true if not provided)
}]
* @return {"name of action1": "sys_id of action1", "name of action2": "sys_id of action2", message: "Any error message" }
*/
createActions: function(notificationId, payload) {
if (!VANotificationAPIHelper.isNotificationValid(notificationId)) {
return {
sys_id: null,
message: "Failed to create or update VA action for notification. Invalid notification ID"
};
}
var payloadValidationResult = this._validateActionPayloadAndCreateActionObj(notificationId, payload);
if (!payloadValidationResult.isValid) {
return {
sys_id: null,
message: payloadValidationResult.message
};
}
var result = this._insertActions(notificationId, payloadValidationResult.actionArr);
result.message = "";
return result;
},
/**
* API to update VA Action for a notification.
* @param actionId : valid VA action (sys_notification_va_action) sys_id
* @param payload: object contains valid fields for updating the action. Example:
* {
name: “topic action”,
topic: "sys_id of topic sys_cs_topic",
active: true/false
}
* @return {sys_id: "sys_id of updated action", message: "Any error message" }
*/
updateAction: function(actionId, payload) {
if (!this._isActionValid(actionId)) {
return {
sys_id: null,
message: "Failed to update VA action for notification. Invalid action ID"
};
}
var actionObj = {};
actionObj.sys_id = actionId;
if (!gs.nil(payload.name)) {
var actionGr = this._getActionGr(actionId);
var notificationId = actionGr.getValue('notification');
if (this._isActionExistWithSameName(payload.name, notificationId, actionId)) {
return {
sys_id: null,
message: "Failed to update VA action for notification. Action with same name exist"
};
}
actionObj.name = payload.name;
}
if (!gs.nil(payload.topic)) {
if (!this._isTopicValid(payload.topic)) {
return {
isValid: false,
message: "Failed to update VA action for notification. Invalid topic"
};
}
actionObj.topic = payload.topic;
}
if (!gs.nil(payload.active))
actionObj.active = payload.active;
var actionSysId = this._updateAction(actionObj);
return {
sys_id: actionSysId,
message: ""
};
},
_validateActionPayloadAndCreateActionObj: function(notificationId, payload) {
if (gs.nil(payload) || !payload.length) {
return {
isValid: false,
message: "Failed to create VA action for notification. Invalid payload"
};
}
var actionArr = [];
var names = {};
for (var i = 0; i < payload.length; i++) {
var actionObj = {};
if (gs.nil(payload[i].name)) {
return {
isValid: false,
message: "Failed to create VA action for notification. Invalid name"
};
}
if (names.hasOwnProperty(payload[i].name) || this._isActionExistWithSameName(payload[i].name, notificationId)) {
return {
isValid: false,
message: "Failed to create VA action for notification. Duplicate name for action"
};
} else {
names[payload[i].name] = true;
}
actionObj.name = payload[i].name;
if (gs.nil(payload[i].topic) || !this._isTopicValid(payload[i].topic)) {
return {
isValid: false,
message: "Failed to create VA action for notification. Invalid topic"
};
}
actionObj.topic = payload[i].topic;
actionObj.active = gs.nil(payload[i].active) ? true : payload[i].active;
actionArr.push(actionObj);
}
return {
isValid: true,
actionArr: actionArr
};
},
_isTopicValid: function(topicId) {
var topicGr = new GlideRecordSecure("sys_cs_topic");
topicGr.addQuery("sys_id", topicId);
topicGr.addEncodedQuery(this.TOPIC_REF_QUALIFIER);
topicGr.query();
topicGr.next();
return topicGr.isValidRecord();
},
_insertActions: function(notificationId, actionArr) {
var returnObj = {};
actionArr.forEach(function(action) {
var actionGr = new GlideRecordSecure(this.VA_NOTIFICATION_ACTION_TABLE);
actionGr.initialize();
if (action.sys_id)
actionGr.get(action.sys_id);
actionGr.setValue("notification", notificationId);
for (var key in action)
actionGr.setValue(key, action[key]);
var sysId = actionGr.update();
returnObj[action['name']] = sysId;
}, this);
return returnObj;
},
_updateAction: function(actionObj) {
var actionGr = new GlideRecordSecure(this.VA_NOTIFICATION_ACTION_TABLE);
actionGr.initialize();
if (actionObj.sys_id)
actionGr.get(actionObj.sys_id);
for (var key in actionObj)
actionGr.setValue(key, actionObj[key]);
return actionGr.update();
},
_isActionValid: function(actionId) {
var actionGr = new GlideRecordSecure(this.VA_NOTIFICATION_ACTION_TABLE);
actionGr.get(actionId);
return actionGr.isValidRecord();
},
_getActionGr: function(actionId) {
var actionGr = new GlideRecordSecure(this.VA_NOTIFICATION_ACTION_TABLE);
actionGr.get(actionId);
return actionGr;
},
_isActionExistWithSameName: function(name, notificationId, actionId) {
var actionGr = new GlideRecordSecure(this.VA_NOTIFICATION_ACTION_TABLE);
actionGr.addQuery('notification', notificationId);
actionGr.addQuery('name', name.trim());
if (!gs.nil(actionId))
actionGr.addQuery('sys_id', '!=', actionId);
actionGr.query();
return actionGr.hasNext();
},
type: 'VANotificationActionAPI'
};
Sys ID
4ced699c5338211031a5ddeeff7b12e6