Name
sn_risk_advanced.GrcARAIntegrationUtilsBase
Description
No description available
Script
var GrcARAIntegrationUtilsBase = Class.create();
GrcARAIntegrationUtilsBase.prototype = {
initialize: function() {},
getRiskFromSourceRecord: function(table, sysId, handler) {
return this._getRiskFromSourceRecord(table, sysId, handler);
},
addRollupResultToEntity: function(rollUpResult) {
this._addRollupResultToEntity(rollUpResult);
},
getAssessmentInfo: function(ramId) {
return this._getAssessmentInfo(ramId);
},
setRollupResultToEntity: function(entity) {
this._setRollupResultToEntity(entity);
},
getRAMsToDisplayOnEnityForm: function(entity) {
return this._getRAMsToDisplayOnEnityForm(entity);
},
getRAMsToDisplayOnEnityClassForm: function(entityClass) {
return this._getRAMsToDisplayOnEnityClassForm(entityClass);
},
updateEntitiesRiskOnPrimaryChange: function(entityClassRef) {
this._updateEntitiesRiskOnPrimaryChange(entityClassRef);
},
populateControlScoreOnRisk: function(risk) {
this._populateControlScoreOnRisk(risk);
},
updateMitigationEffectiveness: function(factorChoice) {
this._updateMitigationEffectiveness(factorChoice);
},
getCurrencyValue: function(currencyRefValue) {
return this._getCurrencyValue(currencyRefValue);
},
getPrimaryRAMofEntity: function(riskRef) {
return this._getPrimaryRAMofEntity(riskRef);
},
_getPrimaryRAMofEntity: function(riskRef) {
var profileClass = riskRef.profile.profile_class;
if (profileClass != '') {
var profileClassGr = new GlideRecord("sn_grc_profile_class");
profileClassGr.get(profileClass);
return profileClassGr.primary_risk_assessment_methodology;
}
return '';
},
_updateMitigationEffectiveness: function(factorChoice) {
var controlIds = [];
var entityClassesArr = [];
var entityClasses = new GlideRecord('sn_grc_profile_class');
entityClasses.addQuery('primary_risk_assessment_methodology', factorChoice.factor.risk_assessment_methodology);
entityClasses.query();
while (entityClasses.next()) {
entityClassesArr.push(entityClasses.getUniqueValue());
}
var responses = new GlideRecord('sn_risk_advanced_risk_assessment_instance_response');
responses.addNotNullQuery('control');
responses.addQuery('assessment_instance_id.entity_1.profile_class', 'IN', entityClassesArr);
responses.addQuery('factor', factorChoice.factor);
responses.addQuery('factor_response', factorChoice.score);
responses.query();
while (responses.next()) {
controlIds.push(responses.getValue('control'));
}
var riskContrlm2m = new GlideRecord('sn_risk_m2m_risk_control');
riskContrlm2m.addQuery('sn_compliance_controlIN' + controlIds);
riskContrlm2m.addNotNullQuery('sn_risk_advanced_mitigation_effectiveness');
riskContrlm2m.query();
while (riskContrlm2m.next()) {
var newString = this._getNewMitigationEffectivenessStr(riskContrlm2m.sn_risk_advanced_mitigation_effectiveness, factorChoice.display_value);
riskContrlm2m.setValue('sn_risk_advanced_mitigation_effectiveness', newString);
riskContrlm2m.update();
}
},
_getNewMitigationEffectivenessStr: function(oldEffectiveness, newChoiceString) {
if (oldEffectiveness == '')
return;
var oldChoiceString = oldEffectiveness.substring(0, oldEffectiveness.indexOf('( Score'));
var newEffectiveness = oldEffectiveness.replace(oldChoiceString, newChoiceString);
return newEffectiveness;
},
_populateControlScoreOnRisk: function(risk) {
var controlIds = [];
var responseObjs = [];
var responses = new GlideRecord('sn_risk_advanced_risk_assessment_instance_response');
responses.addQuery('assessment_instance_id', risk.assessment_instance);
responses.addNotNullQuery('control');
responses.query();
while (responses.next()) {
var obj = {};
controlIds.push(responses.control + '');
obj.controlId = responses.control + '';
obj.mitigationScore = responses.qualitative_response + '';
obj.mitigationEffectiveness = this._constructMitigationEffectiveness(responses);
responseObjs[responses.control] = obj;
}
var riskContrlm2m = new GlideRecord('sn_risk_m2m_risk_control');
riskContrlm2m.addQuery('sn_compliance_controlIN' + controlIds);
riskContrlm2m.query();
while (riskContrlm2m.next()) {
var mitigationScores = responseObjs[riskContrlm2m.sn_compliance_control];
riskContrlm2m.setValue('sn_risk_advanced_mitigation_score', mitigationScores.mitigationScore);
riskContrlm2m.setValue('sn_risk_advanced_mitigation_effectiveness', mitigationScores.mitigationEffectiveness);
riskContrlm2m.update();
}
//Remove stale values from other controls - for example, if control c1, c2 were assessed in R1.1 and in R1.2 only C1 was assessed, where R1.2 is reassessment for R1.1, the remove stale mitigation values
this._clearStaleControlScores(risk, controlIds);
},
_clearStaleControlScores: function(risk, controlIds) {
var riskContrlm2m = new GlideRecord('sn_risk_m2m_risk_control');
riskContrlm2m.addQuery('sn_risk_risk', risk.getUniqueValue());
riskContrlm2m.addQuery('sn_compliance_control', 'NOT IN', controlIds);
riskContrlm2m.query();
riskContrlm2m.setValue('sn_risk_advanced_mitigation_score', '');
riskContrlm2m.setValue('sn_risk_advanced_mitigation_effectiveness', '');
riskContrlm2m.updateMultiple();
},
_constructMitigationEffectiveness: function(factorResponse) {
var responseString = factorResponse.factor_response;
if (factorResponse.factor.user_response == '1') {
responseString = this._getChoiceString(factorResponse.factor, factorResponse.factor_response);
}
if (factorResponse.factor.user_response == '4') {
responseString = this._getCurrencyValue(responseString);
}
var effectiveness = responseString + '( Score: ' + factorResponse.qualitative_response + ')';
return effectiveness;
},
_getCurrencyValue: function(currencyRefValue) {
var currencyStr = currencyRefValue.substring(0, currencyRefValue.indexOf(';'));
var gr = new GlideRecord('fx_currency');
gr.addQuery('code', currencyStr);
gr.query();
if (gr.next()) {
return currencyRefValue.replace(currencyStr + ';', gr.getValue('symbol'));
}
return currencyRefValue;
},
_getChoiceString: function(factorId, response) {
var factorChoice = new GlideRecord('sn_risk_advanced_factor_choice');
factorChoice.addQuery('factor', factorId);
factorChoice.addQuery('score', response);
factorChoice.query();
if (factorChoice.next())
return factorChoice.getValue('display_value');
return '';
},
_updateEntitiesRiskOnPrimaryChange: function(entityClassRef) {
var primaryRAM = "NULL";
if (entityClassRef.primary_risk_assessment_methodology != "") {
primaryRAM = entityClassRef.primary_risk_assessment_methodology;
}
var entity = new GlideRecord('sn_grc_profile');
entity.addQuery('profile_class', entityClassRef.getUniqueValue());
entity.query();
entity.setValue('sn_risk_advanced_primary_risk_assessment_methodology', primaryRAM);
entity.updateMultiple();
},
_getRAMsToDisplayOnEnityForm: function(entity) {
var sysids = [];
var assessmentResult = new GlideRecord('sn_risk_advanced_risk_assessment_result');
assessmentResult.addQuery('entity', entity.getUniqueValue());
assessmentResult.orderBy('sys_created_on');
assessmentResult.query();
while (assessmentResult.next()) {
sysids.push(assessmentResult.risk_assessment_methodology + '');
}
return sysids;
},
_getRAMsToDisplayOnEnityClassForm: function(entityClass) {
var sysids = [];
var rams = new GlideRecord('sn_risk_advanced_risk_assessment_methodology');
rams.addEncodedQuery('entity_classesLIKE' + entityClass.getUniqueValue());
rams.addQuery('state', '2');
rams.query();
while (rams.next()) {
sysids.push(rams.getUniqueValue());
}
return sysids;
},
_setRollupResultToEntity: function(entity) {
var assessmentResult = new GlideRecord('sn_risk_advanced_risk_assessment_result');
assessmentResult.addQuery('entity', entity.getUniqueValue());
assessmentResult.addQuery('risk_assessment_methodology', entity.sn_risk_advanced_primary_risk_assessment_methodology);
assessmentResult.addQuery('statement', '');
assessmentResult.query();
if (assessmentResult.next())
entity.sn_risk_advanced_rollup_result = assessmentResult.getUniqueValue();
else
entity.sn_risk_advanced_rollup_result = '';
},
_getAssessmentInfo: function(ramId) {
var assessmentInfo = {};
var assessmentTypeReference = new GlideRecord('sn_risk_advanced_assessment_type');
assessmentTypeReference.addQuery('risk_assessment_methodology', ramId);
assessmentTypeReference.query();
assessmentInfo.isInherentAsmtEnabled = false;
assessmentInfo.isControlAsmtEnabled = false;
assessmentInfo.isResidualAsmtEnabled = false;
assessmentInfo.isTargetAsmtEnabled = false;
while (assessmentTypeReference.next()) {
if (assessmentTypeReference.name == "Inherent Assessment") {
assessmentInfo.isInherentAsmtEnabled = true;
assessmentInfo.inherentAssessmentContribution = assessmentTypeReference.getValue('assessment_contribution');
} else if (assessmentTypeReference.name == "Residual Assessment") {
assessmentInfo.isResidualAsmtEnabled = true;
assessmentInfo.residualAssessmentContribution = assessmentTypeReference.getValue('assessment_contribution');
} else if (assessmentTypeReference.name == "Target Assessment") {
assessmentInfo.isTargetAsmtEnabled = true;
assessmentInfo.targetAssessmentContribution = assessmentTypeReference.getValue('assessment_contribution');
} else {
assessmentInfo.isControlAsmtEnabled = true;
}
}
return assessmentInfo;
},
_addRollupResultToEntity: function(rollUpResult) {
var entity = new GlideRecord('sn_grc_profile');
entity.get(rollUpResult.entity);
if (gs.nil(entity.getValue('sn_risk_advanced_primary_risk_assessment_methodology'))) {
entity.setValue('sn_risk_advanced_primary_risk_assessment_methodology', rollUpResult.risk_assessment_methodology);
}
if (entity.getValue('sn_risk_advanced_primary_risk_assessment_methodology') == rollUpResult.risk_assessment_methodology) {
entity.setValue('sn_risk_advanced_rollup_result', rollUpResult.getUniqueValue());
entity.update();
}
},
_getRiskFromSourceRecord: function(table, sysId, handler) {
var result = {};
if (sysId.split(',').length > 1) {
result.status = 0;
result.errorMsg = gs.getMessage("Please select only one record at a time.");
return result;
}
var hooks = new GlideScriptedExtensionPoint().getExtensions('sn_risk_advanced.GetRiskFromSourceRecord');
var visited = false;
hooks.forEach(function(hook) {
if (hook.handles(handler)) {
result = hook.getRiskInfo(table, sysId);
visited = true;
}
});
if (!visited) {
result.status = 0;
result.errorMsg = gs.getMessage("Error fetching the risk details. Please contact your system administrator.");
}
return result;
},
type: 'GrcARAIntegrationUtilsBase'
};
Sys ID
77121e6b0f491010bad14bb768767e44