Name
sn_grc.ManualIndicatorStrategyBase
Description
Manual indicator strategy
Script
var ManualIndicatorStrategyBase = Class.create();
ManualIndicatorStrategyBase.prototype = Object.extendsObject(IndicatorStrategy, {
addExceedsErrorMessage: function() {
this._addExceedsErrorMessage();
},
addResult: function(passed, valueType, value, taskId, target_type, target) {
this._addResult(passed, valueType, value, taskId, target_type, target);
},
maxNumIndicatorTasksExceeded: function() {
return this._maxNumIndicatorTasksExceeded();
},
notifyMaxNumIndicatorTasksExceeded: function() {
this._notifyMaxNumIndicatorTasksExceeded();
},
run: function() {
return this._run();
},
_addExceedsErrorMessage: function() {
gs.addErrorMessage(gs.getMessage('There are too many open indicator tasks. No task was created.'));
},
_addResult: function(passed, valueType, value, taskId, target_type, target) {
var resultId = IndicatorStrategy.prototype.addResult.apply(this, arguments);
this._attachSupportingDataToResult(resultId, taskId);
},
_attachSupportingDataToResult: function(resultId, taskId) {
var supportingData = new GlideRecord('sn_grc_indicator_supporting_data');
supportingData.addQuery('task', taskId);
supportingData.result = resultId;
supportingData.updateMultiple();
},
_maxNumIndicatorTasksExceeded: function() {
var maxNumberOfIndicatorTasks = parseInt(gs.getProperty('sn_grc.max_open_indicator_tasks', '1000'));
if (isNaN(maxNumberOfIndicatorTasks))
maxNumberOfIndicatorTasks = 1000;
var indTasks = new GlideAggregate('sn_grc_indicator_task');
indTasks.addAggregate('COUNT');
indTasks.addEncodedQuery('state=1^ORstate=2');
indTasks.query();
indTasks.next();
return indTasks.getAggregate('COUNT') >= maxNumberOfIndicatorTasks;
},
_notifyMaxNumIndicatorTasksExceeded: function() {
var users = [];
var grUserRoles = new GlideRecord('sys_user_has_role');
grUserRoles.addQuery('role', '93e2b4c2cb200200829cf865734c9cac'); //GRC manager
grUserRoles.query();
while (grUserRoles.next())
users.push(grUserRoles.getValue('user'));
gs.eventQueue("sn_grc.max_tasks_exceeded", null, users + '');
},
_run: function() {
var taskId = '';
if (this.maxNumIndicatorTasksExceeded()) {
this.addExceedsErrorMessage();
return 'exceed';
}
var indicatorTask = new GlideRecord('sn_grc_indicator_task');
indicatorTask.assigned_to = this.indicatorRecord.item.owner;
indicatorTask.short_description = gs.getMessage("Task for {0}", this.indicatorRecord.name);
indicatorTask.instructions = this._formatInstructions(this.indicatorRecord.instructions + '');
indicatorTask.indicator = this.indicatorRecord.sys_id + '';
taskId = indicatorTask.insert();
if (taskId) {
gs.addInfoMessage(gs.getMessage('An indicator task has been created.'));
if (this.indicatorRecord.supporting_data)
this.collectSupportingData(null, taskId);
}
return taskId;
},
_formatInstructions: function(input) {
if (!input)
return "";
var arr = input.split("\n");
var output = "";
for (var i = 0; i < arr.length; i++) {
var spaces = "";
for (var j = arr[i].search(/\S/); j > 0; j--) {
spaces = spaces + ' ';
}
output = output + spaces + arr[i].trim() + '<br>';
}
return output.slice(0, -4);
},
type: 'ManualIndicatorStrategyBase'
});
Sys ID
3d012e92d7320200bbc783e80e6103a5