Name
sn_sla_brkdwn.SLABreakdownDefinitionSNC
Description
No description available
Script
var SLABreakdownDefinitionSNC = Class.create();
SLABreakdownDefinitionSNC.prototype = {
initialize: function(breakdownDefinitionGr) {
this._gr = breakdownDefinitionGr;
},
getActiveBreakdownTableData: function() {
return this.getBreakdownTableData(true);
},
getBreakdownTableData: function(excludeInactiveDefinitions) {
excludeInactiveDefinitions = excludeInactiveDefinitions + "" === "true";
var tableData = [];
var tableNames = this._getBreakdownTableNames();
tableNames.sort();
tableNames.forEach(function(tableName) {
tableData.push({tableName: tableName,
tableLabel: this._getTableLabel(tableName),
taskTypesDefined: this._getTaskTypesByBreakdownTable(tableName, excludeInactiveDefinitions)});
}, this);
return tableData;
},
activeBreakdownDefinitionAlreadyExists: function() {
if (!this._gr || !this._gr.isValidRecord())
return false;
var breakdownDefinitionGr = new GlideRecord(SLABreakdown.SLA_BREAKDOWN_DEFINITION);
breakdownDefinitionGr.addQuery("sla_breakdown_table", this._gr.getValue("sla_breakdown_table"));
breakdownDefinitionGr.addQuery("task_table", this._gr.getValue("task_table"));
breakdownDefinitionGr.addQuery("active", true);
breakdownDefinitionGr.addQuery("sys_id", "!=", this._gr.getUniqueValue());
breakdownDefinitionGr.setLimit(1);
breakdownDefinitionGr.query();
return breakdownDefinitionGr.hasNext();
},
breakdownDataExists: function() {
if (!this._gr || !this._gr.isValidRecord())
return false;
var breakdownTable = this._gr.getValue("sla_breakdown_table");
return new global.SLABreakdownUtils().breakdownDataExists(breakdownTable, this._getBreakdownDefinitionQuery());
},
activeBreakdownDataExists: function() {
if (!this._gr || !this._gr.isValidRecord())
return false;
var breakdownTable = this._gr.getValue("sla_breakdown_table");
return new global.SLABreakdownUtils().breakdownDataExists(breakdownTable, this._getBreakdownDefinitionQuery("task_sla.active=true"));
},
removeRelatedSlaDefinitions: function() {
if (!this._gr || !this._gr.isValidRecord())
return false;
var slaDefinitionSlaBreakdownGr = new GlideRecord(SLABreakdown.SLA_DEFINITION_SLA_BREAKDOWN);
slaDefinitionSlaBreakdownGr.addQuery("sla_breakdown_definition", this._gr.getUniqueValue());
slaDefinitionSlaBreakdownGr.query();
if (!slaDefinitionSlaBreakdownGr.hasNext())
return;
while (slaDefinitionSlaBreakdownGr.next())
slaDefinitionSlaBreakdownGr.deleteRecord();
gs.addInfoMessage(gs.getMessage("All related SLA Definitions have been removed from breakdown definition {0}", "<b>" + this._gr.getValue("name") + "</b>"));
},
removeRelatedFields: function () {
if (!this._gr || !this._gr.isValidRecord())
return false;
var breakdownDefinitionFieldGr = this._getBreakdownDefinitionFields();
while (breakdownDefinitionFieldGr.next())
breakdownDefinitionFieldGr.deleteRecord();
gs.addInfoMessage(gs.getMessage("Breakdown definition fields have been deleted from breakdown definition {0}", "<b>" + this._gr.getValue("name") + "</b>"));
},
deleteBreakdownDataForActiveSLAs: function() {
if (!this._gr || !this._gr.isValidRecord())
return;
var breakdownTable = this._gr.getValue("sla_breakdown_table");
return new global.SLABreakdownUtils().deleteBreakdownData(breakdownTable, this._getBreakdownDefinitionQuery("task_sla.active=true"));
},
validateRelatedFields: function() {
if (!this._gr || !this._gr.isValidRecord())
return false;
var breakdownDefinitionFieldGr = this._getBreakdownDefinitionFields();
var breakdownTableGr = new GlideRecord(this._gr.getValue("sla_breakdown_table"));
var taskTableGr = previous !== null ? new GlideRecord(previous.getValue("task_table")) : new GlideRecord(this._gr.getValue("task_table"));
var invalidFields = [];
while (breakdownDefinitionFieldGr.next()) {
var breakdownFieldName = breakdownDefinitionFieldGr.getValue("breakdown_field_name");
var sourceFieldName = breakdownDefinitionFieldGr.getValue("source_field_name");
var availableSourceFields = new SLABreakdownDefinitionSourceField().getSourceFields(this._gr.getValue("task_table"),
this._gr.getValue("sla_breakdown_table"),
breakdownFieldName);
if (availableSourceFields.indexOf(sourceFieldName) < 0) {
var breakdownFieldLabel = breakdownFieldName;
var breakdownFieldElement = breakdownTableGr.getElement(breakdownFieldName);
if (breakdownFieldElement + "" !== "null")
breakdownFieldLabel = breakdownFieldElement.getED().getLabel();
var sourceFieldLabel = sourceFieldName;
var sourceFieldElement = taskTableGr.getElement(sourceFieldName);
if (sourceFieldElement + "" !== "null")
sourceFieldLabel = sourceFieldElement.getED().getLabel();
invalidFields.push({breakdownFieldLabel: breakdownFieldLabel, sourceFieldLabel: sourceFieldLabel});
breakdownDefinitionFieldGr.deleteRecord();
}
}
if (invalidFields.length === 0)
return;
var sourceTableName = new GlideRecord(this._gr.getValue("task_table")).getED().getLabel();
var deletedFieldsMsg = gs.getMessage("The following breakdown fields were deleted from breakdown definition {0} as they reference fields that are not available in table {1}: ",
["<b>" + this._gr.getValue("name") + "</b>", "<b>" + sourceTableName + "</b>"]) + "<br/><br/>";
invalidFields.forEach(function(invalidField) {
deletedFieldsMsg += "<span style='padding-left:1em'>" + gs.getMessage("Breakdown field: {0}", "<b>" + invalidField.breakdownFieldLabel + "</b>") + "</span>" +
"<span style='padding-left:1em'>" + gs.getMessage("Source field: {0}", "<b>" + invalidField.sourceFieldLabel + "</b>") + "<br/></span>";
});
gs.addInfoMessage(deletedFieldsMsg);
},
_getBreakdownTableNames: function() {
return new GlideTableHierarchy(SLABreakdown.SLA_BREAKDOWN_CORE).getTableExtensions();
},
_getTableLabel: function(tableName) {
var tableDisplayValue = "";
if (!gs.tableExists(tableName))
return tableDisplayValue;
var td = new GlideRecord(tableName).getED();
return td.getLabel() + " [" + tableName +"]";
},
_getTaskTypesByBreakdownTable: function(tableName, excludeInactiveDefinitions) {
excludeInactiveDefinitions = excludeInactiveDefinitions + "" === "true";
var taskTypes = {};
if (!tableName)
return taskTypes;
var breakdownDefinitionGr = new GlideAggregate(SLABreakdown.SLA_BREAKDOWN_DEFINITION);
breakdownDefinitionGr.addQuery("sla_breakdown_table", tableName);
if (excludeInactiveDefinitions)
breakdownDefinitionGr.addQuery("active", true);
breakdownDefinitionGr.groupBy("task_table");
breakdownDefinitionGr.query();
while (breakdownDefinitionGr.next())
taskTypes[breakdownDefinitionGr.getValue("task_table")] = true;
return taskTypes;
},
_getBreakdownDefinitionFields: function() {
var breakdownDefinitionFieldGr = new GlideRecord(SLABreakdown.SLA_BREAKDOWN_DEFINITION_FIELD);
breakdownDefinitionFieldGr.addQuery("sla_breakdown_definition", this._gr.getUniqueValue());
breakdownDefinitionFieldGr.query();
return breakdownDefinitionFieldGr;
},
_getBreakdownDefinitionQuery: function(partialQuery) {
return (partialQuery ? partialQuery + "^" : "") + "sla_breakdown_definition=" + this._gr.getUniqueValue() + "^EQ";
},
type: 'SLABreakdownDefinitionSNC'
};
Sys ID
370a57d357801300ff01ac11ac94f990