Name
sn_grc_pa.GRCPAIndicatorUtilsBase
Description
General GRC PA Utilities Base
Script
var GRCPAIndicatorUtilsBase = Class.create();
GRCPAIndicatorUtilsBase.prototype = {
initialize: function() {
},
getBreakdownForPAIndicator: function(paIndicator) {
return this._getBreakdownForPAIndicator(paIndicator);
},
refreshScores: function(item, type) {
return this._refreshScores(item, type);
},
generatePAIndicatorRelationship: function(contentId, paIndicatorId) {
return this._generatePAIndicatorRelationship(contentId, paIndicatorId);
},
generatePAIndicatorItemRelationship: function(item, paIndicatorId, breakdown) {
this._generatePAIndicatorItemRelationship(item, paIndicatorId, breakdown);
},
hasContentPAIndicatorRelationship: function(contentId) {
return this._hasContentPAIndicatorRelationship(contentId);
},
hasItemPAIndicatorRelationship: function(itemId) {
return this._hasItemPAIndicatorRelationship(itemId);
},
getIndicatorBreakdownList: function(contentId) {
return this._getIndicatorBreakdownList(contentId);
},
_getIndicatorBreakdownList: function(contentId) {
var paContentIndicatorList = {};
var paContentIndicator = new GlideRecord("sn_grc_pa_m2m_content_pa_indicator");
paContentIndicator.addQuery("sn_grc_content", contentId);
paContentIndicator.query();
while (paContentIndicator.next()) {
var paIndicatorBreakdown = new GlideRecord("pa_indicator_breakdowns");
paIndicatorBreakdown.addQuery("indicator", paContentIndicator.pa_indicator);
paIndicatorBreakdown.query();
var breakdown = [];
while(paIndicatorBreakdown.next()) {
var sourceFactTable = paIndicatorBreakdown.breakdown.dimension.facts_table + '';
var sourceCondition = paIndicatorBreakdown.breakdown.dimension.conditions + '';
var sourceBreakdown = paIndicatorBreakdown.breakdown + '';
breakdown.push({sourceBreakdown: sourceBreakdown, sourceFactTable: sourceFactTable, sourceCondition: sourceCondition});
}
paContentIndicatorList[paContentIndicator.pa_indicator] = breakdown;
}
return paContentIndicatorList;
},
_hasContentPAIndicatorRelationship: function(contentId) {
var paIndicatorRelationship = new GlideRecord("sn_grc_pa_m2m_content_pa_indicator");
paIndicatorRelationship.addQuery("sn_grc_content", contentId);
paIndicatorRelationship.setLimit(1);
paIndicatorRelationship.query();
return paIndicatorRelationship.hasNext();
},
_hasItemPAIndicatorRelationship: function(itemId) {
var paIndicatorRelationship = new GlideRecord("sn_grc_pa_m2m_item_pa_indicator");
paIndicatorRelationship.addQuery("sn_grc_item", itemId);
paIndicatorRelationship.setLimit(1);
paIndicatorRelationship.query();
return paIndicatorRelationship.hasNext();
},
_generatePAIndicatorRelationship: function(contentId, paIndicatorId) {
var paIndicatorBreakdown = new GlideRecord("pa_indicator_breakdowns");
paIndicatorBreakdown.addQuery("indicator", paIndicatorId);
paIndicatorBreakdown.query();
var breakdown = [];
while(paIndicatorBreakdown.next()) {
var sourceFactTable = paIndicatorBreakdown.breakdown.dimension.facts_table + '';
var sourceCondition = paIndicatorBreakdown.breakdown.dimension.conditions + '';
var sourceBreakdown = paIndicatorBreakdown.breakdown + '';
breakdown.push({sourceBreakdown: sourceBreakdown, sourceFactTable: sourceFactTable, sourceCondition: sourceCondition});
}
var item = new GlideRecord("sn_grc_item");
item.addQuery("content", contentId);
item.query();
while(item.next())
this._generatePAIndicatorItemRelationship(item, paIndicatorId, breakdown);
},
_generatePAIndicatorItemRelationship: function(item, paIndicatorId, breakdown) {
var profile = new GlideRecord("sn_grc_profile");
if (profile.get(item.profile)) {
var profileTable = profile.table;
var profileId = profile.applies_to;
var tableHierarchy = (new GlideTableHierarchy(profileTable)).getHierarchy();
var tableHierarchyMap = {};
for (var table=0; table<tableHierarchy.length; table++)
tableHierarchyMap[tableHierarchy[table]] = true;
var itemToPAIndicator = null;
var hasCreatedRelationship = false;
for (var i=0; i<breakdown.length; i++) {
if (tableHierarchyMap[breakdown[i].sourceFactTable]) {
var breakdownSource = new GlideRecord(profileTable);
breakdownSource.addEncodedQuery(breakdown[i].sourceCondition);
breakdownSource.addQuery("sys_id", profileId);
breakdownSource.query();
var breakdownId = breakdown[i].sourceBreakdown;
if (!this._isRelationshipPresent(item.sys_id, paIndicatorId, breakdownId, profileId)) {
if (breakdownSource.hasNext()) {
itemToPAIndicator = new GlideRecord("sn_grc_pa_m2m_item_pa_indicator");
itemToPAIndicator.setValue("sn_grc_item", item.sys_id);
itemToPAIndicator.setValue("pa_indicator", paIndicatorId);
itemToPAIndicator.setValue("pa_breakdown", breakdownId);
itemToPAIndicator.setValue("pa_element", profileId);
itemToPAIndicator.insert();
hasCreatedRelationship = true;
}
}
else
hasCreatedRelationship = true;
}
}
if (!hasCreatedRelationship && !this._isRelationshipPresent(item.sys_id, paIndicatorId, "", "")) {
itemToPAIndicator = new GlideRecord("sn_grc_pa_m2m_item_pa_indicator");
itemToPAIndicator.setValue("sn_grc_item", item.sys_id);
itemToPAIndicator.setValue("pa_indicator", paIndicatorId);
itemToPAIndicator.setValue("pa_breakdown", "");
itemToPAIndicator.setValue("pa_element", "");
itemToPAIndicator.insert();
}
}
},
_isRelationshipPresent: function(item, pa_indicator, pa_breakdown, pa_element) {
var itemToPAIndicator = new GlideRecord("sn_grc_pa_m2m_item_pa_indicator");
itemToPAIndicator.addQuery("sn_grc_item", item);
itemToPAIndicator.addQuery("pa_indicator", pa_indicator);
itemToPAIndicator.addQuery("pa_breakdown", pa_breakdown);
itemToPAIndicator.addQuery("pa_element", pa_element);
itemToPAIndicator.query();
return itemToPAIndicator.hasNext();
},
_refreshScores: function(item, type) {
var paIndicatorRelation = null;
if (type == "content") {
paIndicatorRelation = new GlideRecord("sn_grc_pa_m2m_content_pa_indicator");
paIndicatorRelation.addQuery("sn_grc_content", item);
}
else {
paIndicatorRelation = new GlideRecord("sn_grc_pa_m2m_item_pa_indicator");
paIndicatorRelation.addQuery("sn_grc_item", item);
}
paIndicatorRelation.query();
while (paIndicatorRelation.next())
this._resetTrend(type, paIndicatorRelation);
},
_resetTrend: function(type, paIndicatorRelation) {
var scorecards = null;
if (type != "content")
scorecards = (new global.GRCPerformanceAnalytics()).getPAScorecards(paIndicatorRelation.pa_indicator, paIndicatorRelation.pa_breakdown, paIndicatorRelation.pa_element);
else
scorecards = (new global.GRCPerformanceAnalytics()).getPAScorecards(paIndicatorRelation.pa_indicator);
var uuid = scorecards.uuid;
var changepercFormatted = scorecards.changepercFormatted;
var direction = scorecards.direction;
var changeFormatted = scorecards.changeFormatted;
var directionSymbol = "";
var trend = "";
if (direction == "1") {
if (changeFormatted == "0" || changeFormatted == null)
color = "black";
else
color = "red";
}
else if (direction == "2") {
if (changeFormatted != null && changeFormatted != "") {
if (changeFormatted == "0") {
color = "black";
}
else if (changeFormatted.indexOf('-') !== -1) {
directionSymbol = "▼ ";
color = "green";
}
else {
directionSymbol = "▲ ";
color = "red";
}
}
}
else {
if (changeFormatted != null && changeFormatted != "") {
if (changeFormatted == "0") {
color = "black";
}
else if (changeFormatted.indexOf('-') === -1) {
directionSymbol = "▲ ";
color = "green";
}
else {
directionSymbol = "▼ ";
color = "red";
}
}
}
if (changeFormatted != null && changepercFormatted != null && changeFormatted != "" && changepercFormatted != "") {
trend = directionSymbol + changeFormatted + " (" + changepercFormatted + ")";
} else {
color = "black";
trend = gs.getMessage("No score");
}
paIndicatorRelation.trend = trend;
paIndicatorRelation.trend_color = color;
paIndicatorRelation.update();
},
_getBreakdownForPAIndicator: function(paIndicator) {
var indicatorBreakdown = new GlideRecord("pa_indicator_breakdowns");
indicatorBreakdown.addQuery("indicator", paIndicator.pa_indicator);
indicatorBreakdown.query();
var query = "";
if (indicatorBreakdown.hasNext()) {
indicatorBreakdown.next();
query="sys_idIN" + indicatorBreakdown.breakdown;
while (indicatorBreakdown.next())
query += "," + indicatorBreakdown.breakdown;
query += "^EQ";
}
else
query="sys_id=-1^EQ";
return query;
},
type: 'GRCPAIndicatorUtilsBase'
};
Sys ID
02752811c303120044b2db1122d3ae17