Name
sn_grc.IssueGroupingBase
Description
No description available
Script
var IssueGroupingBase = Class.create();
IssueGroupingBase.prototype = {
initialize: function() {
},
getDefaultIssueGroupRule: function(set) {
return this._getDefaultIssueGroupRule(set);
},
groupIssueBasedOnRule: function(issue) {
return this._groupIssueBasedOnRule(issue);
},
hasOpenTasks: function(issue) {
return this._hasOpenTasks(issue);
},
hasOpenAccTasks: function(poam) {
return this._hasOpenAccTasks(poam);
},
hasOpenMilestones: function(poam) {
return this._hasOpenMilestones(poam);
},
closeChildIssues: function(issue) {
return this._closeChildIssues(issue);
},
_getDefaultIssueGroupRule: function(set) {
var rule = new GlideRecord('sn_grc_issue_group_rule');
rule.addQuery('is_default', true);
rule.addQuery('set', set);
rule.setLimit(1);
rule.query();
if (rule.next())
return rule.sys_id + '';
return null;
},
_groupIssueBasedOnRule: function(issue) {
var rule = issue.item.content.issue_group_rule + '';
var content = issue.item.content + '';
var groupColumn1 = issue.item.content.issue_group_rule.group_by_column_1 + '';
var groupColumn2 = issue.item.content.issue_group_rule.group_by_column_2 + '';
var groupColumn3 = issue.item.content.issue_group_rule.group_by_column_3 + '';
var group1 = issue.getElement(groupColumn1);
var group2 = '';
var group3 = '';
if (groupColumn2 != '')
group2 = issue.getElement(groupColumn2);
if (groupColumn3 != '')
group3 = issue.getElement(groupColumn3);
var groupId = '';
var issueCandidate = new GlideRecord('sn_grc_issue');
issueCandidate.addActiveQuery();
issueCandidate.addQuery('sys_id', '!=', issue.sys_id + '');
issueCandidate.addQuery('item.content', content);
issueCandidate.addQuery('parent_issue.issue_group_rule', rule);
issueCandidate.addQuery(groupColumn1, group1);
if (group2 != '')
issueCandidate.addQuery(groupColumn2, group2);
if (group3 != '')
issueCandidate.addQuery(groupColumn3, group3);
issueCandidate.query();
if (issueCandidate.next()) {
groupId = issueCandidate.parent_issue.sys_id + '';
}
else {
var assigned_to = '';
if (group1 != '' && group1.getReferenceTable() == 'sys_user')
assigned_to = group1;
else if (group2 != '' && group2.getReferenceTable() == 'sys_user')
assigned_to = group2;
else if (group3 != '' && group3.getReferenceTable() == 'sys_user')
assigned_to = group3;
var newIssueGroup = new GlideRecord('sn_grc_issue');
newIssueGroup.issue_group_rule = rule;
newIssueGroup.short_description = gs.getMessage('Issue created from {0}', [issue.item.content.issue_group_rule.getDisplayValue()]);
newIssueGroup.content = content;
newIssueGroup.assigned_to = assigned_to;
if (groupColumn1.indexOf('.') < 0)
newIssueGroup[groupColumn1] = group1;
if ((groupColumn2.indexOf('.') < 0) && (groupColumn2 != ''))
newIssueGroup[groupColumn2] = group2;
if ((groupColumn3.indexOf('.') < 0) && (groupColumn3 != ''))
newIssueGroup[groupColumn3] = group3;
newIssueGroup.is_group = true;
groupId = newIssueGroup.insert();
}
return groupId;
},
_hasOpenTasks: function(issue) {
var visited = {};
visited[issue.sys_id + ''] = true;
var queue = [];
var rootId = issue.sys_id + '';
var nodeId = '';
var taskList = [];
queue.push(rootId);
taskList = this.getTaskList(rootId, taskList);
while(queue.length != 0) {
nodeId = queue.shift();
var childIssue = new GlideRecord('sn_grc_issue');
childIssue.addQuery('parent_issue', nodeId);
childIssue.addActiveQuery();
childIssue.query();
while(childIssue.next()) {
if(!visited[childIssue.sys_id + '']) {
taskList = this.getTaskList(childIssue.sys_id + '', taskList);
visited[childIssue.sys_id + ''] = true;
queue.push(childIssue.sys_id + '');
}
}
}
return taskList;
},
_hasOpenAccTasks: function(issue) {
var visited = {};
var issueSysID = issue.sys_id;
visited[issueSysID + ''] = true;
var queue = [];
var rootId = issueSysID + '';
var nodeId = '';
var taskList = [];
queue.push(rootId);
taskList = this.getAccTaskList(rootId, taskList);
while (queue.length != 0) {
nodeId = queue.shift();
var childIssue = new GlideRecord('sn_grc_issue');
childIssue.addQuery('parent_issue', nodeId);
childIssue.addActiveQuery();
childIssue.query();
while (childIssue.next()) {
var childIssueSysID = childIssue.getUniqueValue();
if (!visited[childIssueSysID + '']) {
taskList = this.getAccTaskList(childIssueSysID + '', taskList);
visited[childIssueSysID + ''] = true;
queue.push(childIssueSysID + '');
}
}
}
return taskList;
},
_hasOpenMilestones: function(issue) {
var visited = {};
var issueSysID = issue.sys_id;
visited[issueSysID + ''] = true;
var queue = [];
var rootId = issueSysID + '';
var nodeId = '';
var taskList = [];
queue.push(rootId);
taskList = this.getMilestoneList(rootId, taskList);
while (queue.length != 0) {
nodeId = queue.shift();
var childIssue = new GlideRecord('sn_grc_issue');
childIssue.addQuery('parent_issue', nodeId);
childIssue.addActiveQuery();
childIssue.query();
while (childIssue.next()) {
var childIssueSysID = childIssue.getUniqueValue();
if (!visited[childIssueSysID + '']) {
taskList = this.getMilestoneList(childIssueSysID + '', taskList);
visited[childIssueSysID + ''] = true;
queue.push(childIssueSysID + '');
}
}
}
return taskList;
},
getTaskList: function(issueId, taskList) {
var task = new GlideRecord('sn_grc_task');
task.addQuery('issue', issueId);
task.addActiveQuery();
task.query();
while(task.next())
taskList.push(task.sys_id + '');
return taskList;
},
getAccTaskList: function(issueId, taskList) {
var task = new GlideRecord('sn_irm_cont_auth_acceptance_task');
if(!task.isValid()) return null;
task.addQuery('issue', issueId);
task.addActiveQuery();
task.query();
while (task.next())
taskList.push(task.sys_id + '');
return taskList;
},
getMilestoneList: function(issueId, taskList) {
var task = new GlideRecord('sn_irm_cont_auth_milestone_task');
if(!task.isValid()) return null;
task.addQuery('issue', issueId);
task.addActiveQuery();
task.query();
while (task.next())
taskList.push(task.sys_id + '');
return taskList;
},
_closeChildIssues: function(parentIssue) {
var childIssue = new GlideRecord('sn_grc_issue');
childIssue.addQuery('parent_issue', parentIssue.sys_id);
childIssue.addActiveQuery();
childIssue.query();
while(childIssue.next()) {
childIssue.state = parentIssue.state;
childIssue.response = parentIssue.response + '';
childIssue.explanation = parentIssue.explanation + '';
childIssue.update();
}
},
groupIssues: function(parentIssueId, ids, groupingType, content, configurationItem,
location, profile, deleteGroup) {
return this._groupIssues(parentIssueId, ids, groupingType, content, configurationItem,
location, profile, deleteGroup);
},
_groupIssues: function(parentIssueId, ids, groupingType, content, configurationItem,
location, profile, deleteGroup) {
var returnValue = false;
if(groupingType == 'child')
returnValue = this._groupChildIssues(parentIssueId, ids);
if(groupingType == 'parent')
returnValue = this._groupParentIssues(parentIssueId, ids, deleteGroup);
var parentIssue = new GlideRecord('sn_grc_issue');
if(parentIssue.get(parentIssueId)) {
parentIssue.is_reparenting_group = false;
parentIssue.update();
}
return returnValue;
},
_groupChildIssues: function(parentIssueId, childIds) {
var success = true;
var parentIssueListIds = {};
for(var i in childIds) {
var issue = new GlideRecord('sn_grc_issue');
if(issue.get(childIds[i])) {
parentIssueListIds[issue.parent_issue + ''] = "true";
issue.parent_issue = parentIssueId;
if(!issue.update())
success = false;
}
else
success = false;
}
var newParentIssue = new GlideRecord("sn_grc_issue");
newParentIssue.get(parentIssueId);
for (var parentIssueListId in parentIssueListIds) {
var childIssue = new GlideAggregate("sn_grc_issue");
childIssue.addQuery("parent_issue", parentIssueListId);
childIssue.query();
if(!childIssue.hasNext()) {
var parentIssue = new GlideRecord('sn_grc_issue');
parentIssue.get(parentIssueListId);
var l10nATI = gs.getMessage("aggregated to issue");
var l10nATI2 = gs.getMessage("aggregated to issue {0}", newParentIssue.number);
var index = parentIssue.short_description.indexOf("(" + l10nATI);
if(index == -1)
parentIssue.short_description += " (" + l10nATI2 + ")";
else
parentIssue.short_description = parentIssue.short_description.substring(0, index) + "(" + l10nATI2 + ")";
var messages = [];
messages.push(newParentIssue.number);
messages.push(newParentIssue.short_description);
parentIssue.comments = gs.getMessage("The issues originally under this group have been moved to the group \"{0}: {1}\" hence this group has been closed.", messages);
parentIssue.state = "3";
parentIssue.update();
}
}
// If something goes wrong, roll back
if(!success) {
for(var j in childIds) {
var childIssue = new GlideRecord('sn_grc_issue');
if(childIssue.get(childIds[j])) {
childIssue.parent_issue = '';
childIssue.update();
}
}
}
return success;
},
_groupParentIssues: function(parentIssueId, parentIds, deleteGroup) {
var success = true;
for(var i in parentIds) {
var issue = new GlideRecord('sn_grc_issue');
issue.addQuery("parent_issue", parentIds[i]);
issue.query();
while(issue.next()) {
issue.parent_issue = parentIssueId;
if(!issue.update())
success = false;
}
var newParentIssue = new GlideRecord("sn_grc_issue");
newParentIssue.get(parentIssueId);
var parentIssue = new GlideRecord('sn_grc_issue');
if(parentIssue.get(parentIds[i])) {
var remediationTask = new GlideRecord("sn_grc_task");
remediationTask.addQuery("issue", parentIds[i]);
remediationTask.query();
while(remediationTask.next()) {
remediationTask.setValue("issue", parentIssueId);
remediationTask.update();
}
if(deleteGroup == 'true')
parentIssue.deleteRecord();
else {
var l10nATI = gs.getMessage("aggregated to issue");
var l10nATI2 = gs.getMessage("aggregated to issue {0}", newParentIssue.number);
var index = parentIssue.short_description.indexOf("(" + l10nATI);
if(index == -1)
parentIssue.short_description += " (" + l10nATI2 + ")";
else
parentIssue.short_description = parentIssue.short_description.substring(0, index) + " (" + l10nATI2 + ")";
var messages = [];
messages.push(newParentIssue.number);
messages.push(newParentIssue.short_description);
parentIssue.comments = gs.getMessage("The issues originally under this group have been moved to the group \"{0}: {1}\" hence this group has been closed.", messages);
parentIssue.state = "3";
parentIssue.update();
}
}
}
return success;
},
reopenParentIssue: function(issueId) {
return this._reopenParentIssue(issueId);
},
_reopenParentIssue: function(issueId) {
var issue = new GlideRecord("sn_grc_issue");
if (issue.get(issueId)) {
if (!issue.parent_issue.nil()) {
var parentIssue = new GlideRecord("sn_grc_issue");
if (parentIssue.get(issue.parent_issue)) {
if (parentIssue.state == "3" || parentIssue.state == "4") {
parentIssue.state = "2";
parentIssue.update();
}
}
}
}
return true;
},
type: 'IssueGroupingBase'
};
Sys ID
a427298ad7100300bbc783e80e6103bb