Name
sn_risk_advanced.RiskAssessmentMethodologyUtilsBase
Description
Utility function for risk assessment methodologytable(Not for customizations)
Script
var RiskAssessmentMethodologyUtilsBase = Class.create();
RiskAssessmentMethodologyUtilsBase.prototype = {
initialize: function() {},
getDomainFromParams: function(options) {
return this._getDomainFromParams(options);
},
performEntitlementCheck: function(ramId) {
return this._performEntitlementCheck(ramId);
},
hasARALimitedLicense: function() {
return this._hasARALimitedLicense();
},
hasIRMEnterpriseLicense: function() {
return this._hasIRMEnterpriseLicense();
},
hasIRMProfessional: function() {
return this._hasIRMProfessional();
},
canCreateNewRAM: function() {
return this._canCreateNewRAM();
},
validateLicense: function(ram) {
return this._validateLicense(ram);
},
copyRAM: function(ram) {
return this._copyRAM(ram);
},
getRAMChoices: function(search) {
return this._getRAMChoices(search);
},
getRiskChoices: function(search) {
return this._getRiskChoices(search);
},
getAssigneeGroups: function(search, type, options) {
return this._getAssigneeGroups(search, type, options);
},
getRAMChoicesForRisk: function(riskId, search) {
return this._getRAMChoicesForRisk(riskId, search);
},
//Overridable functions
deleteRecord: function(tableName, methodologyId) {
return this._deleteRecord(tableName, methodologyId);
},
insertRecord: function(tableName, methodologyId, assessmentTypeName, displayOrder) {
return this._insertRecord(tableName, methodologyId, assessmentTypeName, displayOrder);
},
insertOrDeleteRecord: function(tableName, assessmentTypeName, methodologyId, isFieldChanged, field, displayOrder) {
return this._insertOrDeleteRecord(tableName, assessmentTypeName, methodologyId, isFieldChanged, field, displayOrder);
},
getEntityClasses: function() {
return this._getEntityClasses();
},
getAssessmentTypeCount: function(assessmentType) {
return this._getAssessmentTypeCount(assessmentType);
},
addIfEntityClassPointsOneOrZeroTable: function(ramReference) {
return this._addIfEntityClassPointsOneOrZeroTable(ramReference);
},
validateRAM: function(ramReference) {
return this._validateRAM(ramReference);
},
validateRiskResponseMandatoryScript: function(ramReference) {
return this._validateRiskResponseMandatoryScript(ramReference);
},
validateScript: function(glideRecord, fieldName) {
return this._validateScript(glideRecord, fieldName);
},
checkIfActiveAssessmentExists: function(ramReference) {
return this._checkIfActiveAssessmentExists(ramReference);
},
updateAsmtTypes: function(ramReference) {
this._updateAsmtTypes(ramReference);
},
deleteScopeObjects: function(ramReference) {
this._deleteScopeObjects(ramReference);
},
retireAsmtType: function(ramID) {
this._retireAsmtType(ramID);
},
setAsmtScopeToInActive: function(ramID) {
this._setAsmtScopeToInActive(ramID);
},
retireScheduler: function(ramId) {
this._retireScheduler(ramId);
},
// To be called when assessment type(for eg. inherent risk) checkbox is selected/unselected in RAM form to create or delete assessment type records
assessmentTypeRecordCreationOrDeletion: function(ramRecord) {
return this._assessmentTypeRecordCreationOrDeletion(ramRecord);
},
getDefaultRAMForAnEntity: function(entityId) {
return this._getDefaultRAMForAnEntity(entityId);
},
getAssessmentInstance: function(ramId, entityId, riskId) {
return this._getAssessmentInstance(ramId, entityId, riskId);
},
getAssessmentScope: function(ramId, entityId) {
return this._getAssessmentScope(ramId, entityId);
},
updateARAInfoForEntities: function() {
this._updateARAInfoForEntities();
},
clearARAInfoFromEntities: function() {
this._clearARAInfoFromEntities();
},
getPrimaryRAMForEntityClass: function(entityClass, isPrimary) {
return this._getPrimaryRAMForEntityClass(entityClass, isPrimary);
},
setAlternateRAMPrimary: function(ram) {
this._setAlternateRAMPrimary(ram);
},
updatePrimary: function(ram) {
this._updatePrimary(ram);
},
canRAMBeDraft: function(ramId) {
return this._canRAMBeDraft(ramId);
},
getOldestRAMWithRollupResult: function(entity) {
return this._getOldestRAMWithRollupResult(entity);
},
deleteSchedulers: function(ramID) {
this._deleteSchedulers(ramID);
},
showNavigationLink: function(entity) {
return this._showNavigationLink(entity);
},
getHighResidualRiskRating: function(ramId) {
return this._getHighResidualRiskRating(ramId);
},
checkIfAssessmentTypesPublished: function(ramReference) {
return this._checkIfAssessmentTypesPublished(ramReference);
},
canWriteTargetRisk: function(ramReference) {
return this._canWriteTargetRisk(ramReference);
},
getValidateScriptUIActionConditionForAsmtType: function(asmtType) {
return this._getValidateScriptUIActionConditionForAsmtType(asmtType);
},
_getValidateScriptUIActionConditionForAsmtType: function(asmtType) {
return ((asmtType.qualitative_scoring_logic == 'SCRIPT' || asmtType.quantitative_scoring_logic == 'SCRIPT') && asmtType.state != '2') || asmtType.make_assessment_mandatory == '3' || (asmtType.calculate_based_on == "inherent_control" && asmtType.qualitative_scoring_type == 'script');
},
_canWriteTargetRisk: function(ramReference) {
if (!ramReference.target_risk)
return true;
if (ramReference.state == "1")
return true;
var asmt = new GlideRecord("sn_risk_advanced_target_assessment");
asmt.addQuery('risk_assessment_methodology', ramReference.getUniqueValue());
asmt.query();
if (asmt.next())
return asmt.state != "2";
return true;
},
_updatePrimary: function(ram) {
var entityClasses = ram.entity_classes.split(",");
for (index in entityClasses) {
var entityClassGr = new GlideRecord("sn_grc_profile_class");
entityClassGr.get(entityClasses[index]);
if (entityClassGr.primary_risk_assessment_methodology == '') {
entityClassGr.primary_risk_assessment_methodology = ram.getUniqueValue();
entityClassGr.update();
}
}
},
_showNavigationLink: function(entity) {
return gs.hasRole('sn_risk.user') && gs.getProperty('sn_risk_advanced.hide_risk_legacy_lifecycle', 'false') == 'true' && !gs.nil(entity.sn_risk_advanced_primary_risk_assessment_methodology) && this._checkIfEntityClassApplicable(entity.sn_risk_advanced_primary_risk_assessment_methodology, entity.profile_class);
},
_checkIfEntityClassApplicable: function(ram, entityClass) {
var ramGr = new GlideRecord("sn_risk_advanced_risk_assessment_methodology");
ramGr.get(ram);
return entityClass != '' && ramGr.entity_classes.includes(entityClass);
},
_retireScheduler: function(ramId) {
var scheduler = new GlideRecord('sn_risk_advanced_assessment_scheduler');
scheduler.addQuery('risk_assessment_methodology', ramId);
scheduler.query();
scheduler.setValue('state', '7');
scheduler.updateMultiple();
},
_getEntityClasses: function() {
var allEntityClassSysIds = [];
var notReqdEntityClassSysIds = {};
var filteredEntityClassSysIds = [];
var allEntityClasses = new GlideRecord('sn_grc_profile_class');
allEntityClasses.query();
while (allEntityClasses.next()) {
allEntityClassSysIds.push(allEntityClasses.getUniqueValue());
}
var entityClassRuleReference = new GlideAggregate('sn_grc_profile_class_rules');
entityClassRuleReference.groupBy('profile_class');
entityClassRuleReference.addAggregate('count');
entityClassRuleReference.query();
while (entityClassRuleReference.next()) {
if (parseInt(entityClassRuleReference.getAggregate('count')) > 1) {
notReqdEntityClassSysIds[(entityClassRuleReference.profile_class + '')] = 1;
}
}
for (var i = 0; i < allEntityClassSysIds.length; ++i) {
if (notReqdEntityClassSysIds[allEntityClassSysIds[i]] === undefined) {
filteredEntityClassSysIds.push(allEntityClassSysIds[i]);
}
}
return 'sys_idIN' + filteredEntityClassSysIds;
},
_copyRAM: function(ram) {
var resultObj = {
'error': false,
'errorMsg': ''
};
var ramDataCopySuccess = false;
var columns_to_exclude = 'state,risk_assessment_methodology,number, primary_ram';
var predefObj = {};
predefObj['name'] = 'Copy of ' + ram.name;
var newRAMId = new sn_risk_advanced.FactorUtils().copyRecord(ram, columns_to_exclude, predefObj);
resultObj.newRAMId = newRAMId;
if (newRAMId != null)
ramDataCopySuccess = this._copyRAMRelatedData(ram, newRAMId);
if (ramDataCopySuccess == false) {
this._deleteCopiedRAMWithRelevantData(newRAMId);
resultObj.error = true;
resultObj.errorMsg = gs.getMessage('Error while copying Risk Assessment Methodology');
resultObj.newRAMId = null;
}
return resultObj;
},
_deleteCopiedRAMWithRelevantData: function(newRAMId) {
var factors = [];
var gr = new GlideRecord("sn_risk_advanced_factor");
gr.addQuery("risk_assessment_methodology", newRAMId);
gr.query();
while (gr.next()) {
factors.push(gr.getUniqueValue());
}
var gr1 = new GlideRecord("sn_risk_advanced_risk_assessment_methodology");
gr1.get(newRAMId);
if (gr1.deleteRecord()) {
var groupFactor = new GlideRecord('sn_risk_advanced_group_factor');
groupFactor.addQuery('sys_id', 'IN', factors);
groupFactor.query();
groupFactor.deleteMultiple();
var factor = new GlideRecord('sn_risk_advanced_factor');
factor.addQuery('sys_id', 'IN', factors);
factor.query();
factor.deleteMultiple();
}
},
_copyRAMRelatedData: function(ram, newRAMId) {
var ramDataCopySuccess = true;
var columnsToExclude = 'state,risk_assessment_methodology, y_axis_factor, x_axis_factor, overall_effectiveness_factor, qualitative_script_variables, quantitative_script_variables';
if (ram.inherent_risk == true)
ramDataCopySuccess = this._copyAssessmentTypes(ram, newRAMId, "sn_risk_advanced_inherent_assessment", columnsToExclude);
if (ramDataCopySuccess && ram.getValue("control_effectiveness") == true)
ramDataCopySuccess = this._copyAssessmentTypes(ram, newRAMId, "sn_risk_advanced_control_assessment", columnsToExclude);
if (ramDataCopySuccess && ram.getValue("residual_risk") == true)
ramDataCopySuccess = this._copyAssessmentTypes(ram, newRAMId, "sn_risk_advanced_residual_assessment", columnsToExclude);
if (ramDataCopySuccess && ram.getValue("target_risk") == true)
ramDataCopySuccess = this._copyAssessmentTypes(ram, newRAMId, "sn_risk_advanced_target_assessment", columnsToExclude);
return ramDataCopySuccess;
},
_copyAssessmentTypes: function(ram, newRAMId, table, columnsToExclude) {
var ramDataCopySuccess = true;
var oldAssessmentTypeRecord = new GlideRecord(table);
oldAssessmentTypeRecord.addQuery("risk_assessment_methodology", ram.getUniqueValue());
oldAssessmentTypeRecord.query();
oldAssessmentTypeRecord.next();
var newAssessmentTypeRecord = new GlideRecord(table);
newAssessmentTypeRecord.addQuery("risk_assessment_methodology", newRAMId);
newAssessmentTypeRecord.query();
newAssessmentTypeRecord.next();
var fields = oldAssessmentTypeRecord.getElements();
for (var i = 0; i < fields.length; i++) {
var glideElement = fields[i];
if (!columnsToExclude.contains(glideElement.getName()) && glideElement.getTableName() != 'sys_metadata') {
newAssessmentTypeRecord.setValue(glideElement.getName(), oldAssessmentTypeRecord.getValue(glideElement.getName()));
}
}
newAssessmentTypeRecord.update();
if (this._shouldCopyAssessmentRelevantData(newAssessmentTypeRecord)) {
ramDataCopySuccess = this._copyAssessmentRelevantData(oldAssessmentTypeRecord, newAssessmentTypeRecord);
}
//Copy rating criteria from original RAM in case if residual assessment is same as inherent/ target assessment is same as inherent or residual
if (ramDataCopySuccess && this._shouldCopyRatingCriteria(newAssessmentTypeRecord)) {
ramDataCopySuccess = new sn_risk_advanced.FactorUtils().copyData(oldAssessmentTypeRecord, newAssessmentTypeRecord.getUniqueValue(), {
'sn_risk_advanced_rating_criteria': 'assessment_type'
});
}
newAssessmentTypeRecord.enable_heatmap = true;
newAssessmentTypeRecord.update();
if (ramDataCopySuccess == true && table == "sn_risk_advanced_residual_assessment" && newAssessmentTypeRecord.calculate_based_on == "inherent_control" && newAssessmentTypeRecord.qualitative_scoring_type == "lookup_matrix") {
this._copyMatrixTable(oldAssessmentTypeRecord, newAssessmentTypeRecord);
}
if (ramDataCopySuccess == true && oldAssessmentTypeRecord.enable_heatmap == true) {
this._copyHeatMapTable(oldAssessmentTypeRecord, newAssessmentTypeRecord);
} else {
newAssessmentTypeRecord.enable_heatmap = false;
newAssessmentTypeRecord.update();
}
if (ramDataCopySuccess == true) {
if (oldAssessmentTypeRecord.state == "2")
newAssessmentTypeRecord.state = "2";
newAssessmentTypeRecord.update();
// After the update and the BR - Create qualitative risk criteria rating executes update the risk appetite scale for the Residual assessment whose calculation is based on inherent_control
if (ramDataCopySuccess == true && table == "sn_risk_advanced_residual_assessment" && newAssessmentTypeRecord.calculate_based_on == "inherent_control" && newAssessmentTypeRecord.qualitative_scoring_type == "lookup_matrix") {
this._copyAppetiteScale(oldAssessmentTypeRecord, newAssessmentTypeRecord);
}
}
return ramDataCopySuccess;
},
_shouldCopyAssessmentRelevantData: function(asmtTypeRecord) {
if (asmtTypeRecord.sys_class_name == "sn_risk_advanced_residual_assessment") {
return !((asmtTypeRecord.calculate_based_on == 'factor_responses' && asmtTypeRecord.factors_same_as_inherent) || (asmtTypeRecord.calculate_based_on == 'inherent_control' && asmtTypeRecord.qualitative_scoring_type == 'lookup_matrix'));
} else if (asmtTypeRecord.sys_class_name == "sn_risk_advanced_target_assessment") {
return asmtTypeRecord.calculate_based_on != 'factor_same_as_inherent' && asmtTypeRecord.calculate_based_on != 'factor_same_as_residual';
}
return true;
},
_shouldCopyRatingCriteria: function(asmtTypeRecord) {
if (asmtTypeRecord.sys_class_name == "sn_risk_advanced_residual_assessment") {
return asmtTypeRecord.calculate_based_on == 'factor_responses' && asmtTypeRecord.factors_same_as_inherent;
} else if (asmtTypeRecord.sys_class_name == "sn_risk_advanced_target_assessment") {
return asmtTypeRecord.calculate_based_on == 'factor_same_as_inherent' || asmtTypeRecord.calculate_based_on == 'factor_same_as_residual';
}
return false;
},
_copyAppetiteScale: function(oldAssesment, newAssessment) {
var oldRatingCriteria = new GlideRecord('sn_risk_advanced_rating_criteria');
oldRatingCriteria.addQuery("assessment_type", oldAssesment.getUniqueValue());
oldRatingCriteria.orderBy("lower_interval");
oldRatingCriteria.query();
var newRatingCriteria = new GlideRecord('sn_risk_advanced_rating_criteria');
newRatingCriteria.addQuery("assessment_type", newAssessment.getUniqueValue());
newRatingCriteria.orderBy("lower_interval");
newRatingCriteria.query();
if (oldRatingCriteria.getRowCount() != newRatingCriteria.getRowCount()) {
gs.addErrorMessage(gs.getMessage("Both the assessment types has unequal number of rating criteria"));
return;
}
while (oldRatingCriteria.next() && newRatingCriteria.next()) {
newRatingCriteria.setValue("risk_appetite_scale", oldRatingCriteria.getValue("risk_appetite_scale"));
newRatingCriteria.update();
}
},
_copyHeatMapTable: function(oldAssessmentTypeRecord, newAssessmentTypeRecord) {
var map = new GlideRecord("sn_risk_advanced_heatmap_color_matrix");
map.addQuery("assessment_type", oldAssessmentTypeRecord.getUniqueValue());
map.query();
while (map.next()) {
var copymap = new GlideRecord("sn_risk_advanced_heatmap_color_matrix");
copymap.addQuery("x_axis_factor_score", map.x_axis_factor_score + '');
copymap.addQuery("y_axis_factor_score", map.y_axis_factor_score + '');
copymap.addQuery("assessment_type", newAssessmentTypeRecord.getUniqueValue());
copymap.query();
if (copymap.next()) {
copymap.setValue("risk_color_style", map.getValue("risk_color_style"));
copymap.update();
}
}
},
_copyAssessmentRelevantData: function(oldAssessmentTypeRecord, newAssessmentTypeRecord) {
var ramDataCopySuccess = true;
//copy Factor
ramDataCopySuccess = this._copyFactorForAssessmentType(oldAssessmentTypeRecord, newAssessmentTypeRecord);
if (ramDataCopySuccess == false) {
return ramDataCopySuccess;
}
//copy risk rating criteria.
var tables = {};
if (oldAssessmentTypeRecord.assessment_contribution == "2" || oldAssessmentTypeRecord.assessment_contribution == "3") {
tables['sn_risk_advanced_rating_criteria'] = 'assessment_type';
}
return new sn_risk_advanced.FactorUtils().copyData(oldAssessmentTypeRecord, newAssessmentTypeRecord.getUniqueValue(), tables);
},
_copyFactorForAssessmentType: function(oldAssessmentTypeRecord, newAssessmentTypeRecord) {
var ramDataCopySuccess = true;
if (oldAssessmentTypeRecord.enable_heatmap == true) {
newAssessmentTypeRecord.enable_heatmap = oldAssessmentTypeRecord.enable_heatmap;
}
if (oldAssessmentTypeRecord.sys_class_name == "sn_risk_advanced_control_assessment" && oldAssessmentTypeRecord.getValue("control_assessment_methodology") == "individual_control_assessment") {
if (!gs.nil(oldAssessmentTypeRecord.getValue("overall_effectiveness_factor"))) {
var effectiveFactor = new sn_risk_advanced.FactorUtils().copyFactor(oldAssessmentTypeRecord.getValue("overall_effectiveness_factor"));
new sn_risk_advanced.FactorUtils().publishFactor(effectiveFactor.newFactorID);
newAssessmentTypeRecord.setValue("overall_effectiveness_factor", effectiveFactor.newFactorID);
}
}
var gr = new GlideRecord("sn_risk_advanced_asmt_type_m2m_factor");
gr.query("sn_risk_advanced_assessment_type", oldAssessmentTypeRecord.getUniqueValue());
gr.query();
while (gr.next()) {
var result = new sn_risk_advanced.FactorUtils().copyFactor(gr.getValue("sn_risk_advanced_factor"));
if (!gs.nil(result.newFactorID)) {
var factor = new GlideRecord("sn_risk_advanced_factor");
factor.get(gr.getValue("sn_risk_advanced_factor"));
var newfactor = new GlideRecord(factor.sys_class_name);
newfactor.get(result.newFactorID + '');
newfactor.state = "2";
newfactor.update();
var gr1 = new GlideRecord("sn_risk_advanced_asmt_type_m2m_factor");
gr1.initialize();
gr1.setValue("sn_risk_advanced_assessment_type", newAssessmentTypeRecord.getUniqueValue());
gr1.setValue("sn_risk_advanced_factor", result.newFactorID);
gr1.insert();
if (oldAssessmentTypeRecord.getValue("qualitative_scoring_logic") == "SCRIPT" || oldAssessmentTypeRecord.getValue("quantitative_scoring_logic") == "SCRIPT") {
this._correctScriptwithValidFactor(oldAssessmentTypeRecord, newAssessmentTypeRecord, gr.getValue("sn_risk_advanced_factor"), newfactor);
}
if (oldAssessmentTypeRecord.enable_heatmap == true) {
if (oldAssessmentTypeRecord.getValue("x_axis_factor") == gr.getValue("sn_risk_advanced_factor")) {
newAssessmentTypeRecord.setValue("x_axis_factor", result.newFactorID);
} else if (oldAssessmentTypeRecord.getValue("y_axis_factor") == gr.getValue("sn_risk_advanced_factor")) {
newAssessmentTypeRecord.setValue("y_axis_factor", result.newFactorID);
}
}
} else {
ramDataCopySuccess = false;
break;
}
}
return ramDataCopySuccess;
},
_correctScriptwithValidFactor: function(oldAssessmentTypeRecord, newAssessmentTypeRecord, oldFactorId, newfactor) {
var oldFactor = new GlideRecord("sn_risk_advanced_factor");
oldFactor.get(oldFactorId);
if (new sn_risk_advanced.FactorUtils().checkScriptContainsFactor(oldAssessmentTypeRecord, oldFactor)) {
newAssessmentTypeRecord.setValue("qualitative_script", newAssessmentTypeRecord.getValue("qualitative_script").replace(new RegExp(oldFactor.getValue("number"), 'g'), newfactor.getValue("number")));
newAssessmentTypeRecord.setValue("quantitative_script", newAssessmentTypeRecord.getValue("quantitative_script").replace(new RegExp(oldFactor.getValue("number"), 'g'), newfactor.getValue("number")));
newAssessmentTypeRecord.update();
}
},
_copyMatrixTable: function(oldAssessmentTypeRecord, newAssessmentTypeRecord) {
var orignalInherent = [];
var orignalControl = [];
var astType = new GlideRecord("sn_risk_advanced_assessment_type");
astType.addQuery("risk_assessment_methodology", oldAssessmentTypeRecord.risk_assessment_methodology);
astType.query();
while (astType.next()) {
if (astType.sys_class_name == "sn_risk_advanced_inherent_assessment") {
var inqual = new GlideRecord("sn_risk_advanced_rating_criteria");
inqual.addQuery("assessment_type", astType.getUniqueValue());
inqual.orderBy("lower_interval");
inqual.query();
while (inqual.next()) {
orignalInherent.push(inqual.getUniqueValue());
}
} else if (astType.sys_class_name == "sn_risk_advanced_control_assessment") {
var cqual = new GlideRecord("sn_risk_advanced_rating_criteria");
cqual.addQuery("assessment_type", astType.getUniqueValue());
cqual.orderBy("lower_interval");
cqual.query();
while (cqual.next()) {
orignalControl.push(cqual.getUniqueValue());
}
}
}
var dupInherent = [];
var dupControl = [];
astType = new GlideRecord("sn_risk_advanced_assessment_type");
astType.addQuery("risk_assessment_methodology", newAssessmentTypeRecord.risk_assessment_methodology);
astType.query();
while (astType.next()) {
if (astType.sys_class_name == "sn_risk_advanced_inherent_assessment") {
var inqual1 = new GlideRecord("sn_risk_advanced_rating_criteria");
inqual1.addQuery("assessment_type", astType.getUniqueValue());
inqual1.orderBy("lower_interval");
inqual1.query();
while (inqual1.next()) {
dupInherent.push(inqual1.getUniqueValue());
}
} else if (astType.sys_class_name == "sn_risk_advanced_control_assessment") {
var cqual1 = new GlideRecord("sn_risk_advanced_rating_criteria");
cqual1.addQuery("assessment_type", astType.getUniqueValue());
cqual1.orderBy("lower_interval");
cqual1.query();
while (cqual1.next()) {
dupControl.push(cqual1.getUniqueValue());
}
}
}
for (var a = 0; a < orignalInherent.length; a++) {
for (var j = 0; j < orignalControl.length; j++) {
var oldmatrix = new GlideRecord("sn_risk_advanced_residual_assessment_matrix");
oldmatrix.addQuery("sn_risk_advanced_assessment_type", oldAssessmentTypeRecord.getUniqueValue());
oldmatrix.addQuery("inherent_risk", orignalInherent[a] + '');
oldmatrix.addQuery("control_effectiveness", orignalControl[j] + '');
oldmatrix.query();
var newmatrix = new GlideRecord("sn_risk_advanced_residual_assessment_matrix");
newmatrix.addQuery("sn_risk_advanced_assessment_type", newAssessmentTypeRecord.getUniqueValue());
newmatrix.addQuery("inherent_risk", dupInherent[a] + '');
newmatrix.addQuery("control_effectiveness", dupControl[j] + '');
newmatrix.query();
if (oldmatrix.next() && newmatrix.next()) {
var columnsToExclude1 = 'sn_risk_advanced_assessment_type,inherent_risk, control_effectiveness';
var fields1 = oldmatrix.getElements();
for (var i = 0; i < fields1.length; i++) {
var glideElement = fields1[i];
if (!columnsToExclude1.contains(glideElement.getName()) && glideElement.getTableName() != 'sys_metadata') {
newmatrix.setValue(glideElement.getName(), oldmatrix.getValue(glideElement.getName()));
}
}
newmatrix.update();
}
}
}
},
_setAlternateRAMPrimary: function(ram) {
var entityClasses = ram.entity_classes.split(",");
for (index in entityClasses) {
if (this._getPrimaryRAMForEntityClass(entityClasses[index], true) == ram.getUniqueValue()) {
var alternateRam = this._getPrimaryRAMForEntityClass(entityClasses[index], false);
var entityClassGr = new GlideRecord("sn_grc_profile_class");
entityClassGr.get(entityClasses[index]);
entityClassGr.primary_risk_assessment_methodology = alternateRam;
entityClassGr.update();
}
}
},
_getPrimaryRAMForEntityClass: function(entityClass, primary) {
if (entityClass == '')
return '';
if (primary) {
var entityClassGr = new GlideRecord("sn_grc_profile_class");
entityClassGr.get(entityClass + '');
return entityClassGr.primary_risk_assessment_methodology;
}
var gr = new GlideRecord('sn_risk_advanced_risk_assessment_methodology');
gr.addQuery('state', '2');
gr.addQuery('assessed_on', '0');
gr.addQuery('entity_classesLIKE' + entityClass);
gr.orderBy('sys_created_on');
gr.setLimit(1);
gr.query();
if (gr.next())
return gr.getUniqueValue();
return '';
},
_canRAMBeDraft: function(ramId) {
var canBeDraft = true;
if (new sn_risk_advanced.RiskAssessmentMethodologyUtils().checkIfActiveAssessmentExists(ramId.getUniqueValue())) {
gs.addErrorMessage(gs.getMessage('This risk assessment methodology has active risk assessment instances and cannot be moved back to the draft state'));
canBeDraft = false;
}
return canBeDraft;
},
_getDefaultRAMForAnEntity: function(entityId) {
if (gs.nil(entityId))
return '';
var entity = new GlideRecord('sn_grc_profile');
entity.get(entityId);
var entityClassId = entity.getValue('profile_class');
if (gs.nil(entityClassId))
return this._getOldestRAMWithRollupResult(entity);
else {
var primary_ram = this._getPrimaryRAMForEntityClass(entityClassId, true);
if (primary_ram == '')
return this._getOldestRAMWithRollupResult(entity);
return primary_ram;
}
},
_getOldestRAMWithRollupResult: function(entity) {
var oldestRAM = '';
var aggregatedRiskRams = new sn_risk_advanced.GrcARAIntegrationUtils().getRAMsToDisplayOnEnityForm(entity);
if (aggregatedRiskRams.length > 0) {
oldestRAM = aggregatedRiskRams[0];
}
return oldestRAM;
},
_getAssessmentInstance: function(ramId, entityId, riskId) {
var assessmentInstance = new GlideRecord('sn_risk_advanced_risk_assessment_instance');
assessmentInstance.addQuery('risk_assessment_methodology', ramId);
assessmentInstance.addQuery('entity_1', entityId);
assessmentInstance.addQuery('risk', riskId);
assessmentInstance.addQuery('state', '7');
assessmentInstance.query();
if (assessmentInstance.next())
return assessmentInstance.getUniqueValue();
return '';
},
_getAssessmentScope: function(ramId, entityId) {
var assessmentScope = new GlideRecord('sn_risk_advanced_risk_assessment_scope');
assessmentScope.addQuery('risk_assessment_methodology', ramId);
assessmentScope.addQuery('entity', entityId);
assessmentScope.query();
if (assessmentScope.next())
return assessmentScope.getUniqueValue();
else
return null;
},
_updateARAInfoForEntities: function() {
var entityClass = new GlideRecord("sn_grc_profile_class");
entityClass.addNotNullQuery("primary_risk_assessment_methodology");
entityClass.query();
while (entityClass.next()) {
this._updateEntitiesWithPRAM(entityClass.getUniqueValue(), entityClass.primary_risk_assessment_methodology);
}
},
_updateEntitiesWithPRAM: function(entityClass, primaryRAM) {
var entities = new GlideRecord('sn_grc_profile');
entities.addQuery('profile_class', entityClass);
entities.query();
while (entities.next()) {
entities.setValue('sn_risk_advanced_primary_risk_assessment_methodology', primaryRAM);
entities.update();
}
},
_clearARAInfoFromEntities: function() {
var entityClass = new GlideRecord("sn_grc_profile_class");
entityClass.addNotNullQuery("primary_risk_assessment_methodology");
entityClass.query();
while (entityClass.next()) {
this._clearPrimaryRAMInfo(entityClass.getUniqueValue());
}
},
_clearPrimaryRAMInfo: function(entityClassID) {
var entity = new GlideRecord('sn_grc_profile');
entity.addQuery('profile_class', entityClassID);
entity.query();
entity.setValue('sn_risk_advanced_primary_risk_assessment_methodology', 'NULL');
entity.setValue('sn_risk_advanced_rollup_result', 'NULL');
entity.updateMultiple();
var risks = new GlideRecord('sn_risk_risk');
risks.addQuery('profile.profile_class', entityClassID);
risks.query();
risks.setValue('primary_risk_assessment_methodology', 'NULL');
risks.setValue('assessment_instance', 'NULL');
risks.updateMultiple();
//clear mitigation score from riskControl m2m
var riskContrlm2m = new GlideRecord('sn_risk_m2m_risk_control');
riskContrlm2m.addQuery('sn_risk_risk.profile.profile_class', entityClassID);
riskContrlm2m.query();
riskContrlm2m.setValue('sn_risk_advanced_mitigation_score', '');
riskContrlm2m.setValue('sn_risk_advanced_mitigation_effectiveness', '');
riskContrlm2m.updateMultiple();
},
_updateAsmtTypes: function(ramReference) {
var asmtType = new GlideRecord('sn_risk_advanced_assessment_type');
asmtType.addQuery('risk_assessment_methodology', ramReference);
asmtType.query();
asmtType.state = '1';
asmtType.updateMultiple();
},
_deleteScopeObjects: function(ramReference) {
var asmtScope = new GlideRecord('sn_risk_advanced_risk_assessment_scope');
asmtScope.get('risk_assessment_methodology', ramReference);
asmtScope.deleteMultiple();
},
_deleteSchedulers: function(ramReference) {
var schedulerObj = new GlideRecord('sn_risk_advanced_assessment_scheduler');
schedulerObj.get('risk_assessment_methodology', ramReference);
schedulerObj.deleteMultiple();
},
_checkIfActiveAssessmentExists: function(ramReference) {
var instances = new GlideRecord('sn_risk_advanced_risk_assessment_instance');
instances.addQuery('risk_assessment_methodology', ramReference);
instances.addQuery('state', 'NOT IN', '0,9');
instances.setLimit(1);
instances.query();
return instances.hasNext();
},
//Base functions
_insertRecord: function(tableName, methodologyId, assessmentTypeName, displayOrder) {
var record = new GlideRecord(tableName);
record.risk_assessment_methodology = methodologyId;
record.name = assessmentTypeName;
record.sys_class_name = tableName;
record.display_order = displayOrder;
record.insert();
},
_deleteRecord: function(tableName, methodologyId) {
var record = new GlideRecord(tableName);
record.addQuery('risk_assessment_methodology', methodologyId);
record.query();
if (record.next()) {
record.deleteRecord();
}
},
_insertOrDeleteRecord: function(tableName, assessmentTypeName, methodologyId, isFieldChanged, field, displayOrder) {
if (isFieldChanged) {
if (field == true) {
this.insertRecord(tableName, methodologyId, assessmentTypeName, displayOrder);
this._clearAppetiteScaleForAssessment(methodologyId, assessmentTypeName);
} else {
this.deleteRecord(tableName, methodologyId);
}
}
},
_clearAppetiteScaleForAssessment: function(methodologyId, assessmentTypeName) {
var utils = new sn_risk_advanced.RiskAppetiteUtils();
if (assessmentTypeName == "Residual Assessment") {
utils.clearAppetiteFromAssessmentType('sn_risk_advanced_control_assessment', methodologyId);
utils.clearAppetiteFromAssessmentType('sn_risk_advanced_inherent_assessment', methodologyId);
} else if (assessmentTypeName == "Control Assessment") {
utils.clearAppetiteFromAssessmentType('sn_risk_advanced_inherent_assessment', methodologyId);
}
},
_assessmentTypeRecordCreationOrDeletion: function(ramRecord) {
//If inherent risk checkbox changes, we need to insert asmt type record if selected, else delete existing record.
this.insertOrDeleteRecord('sn_risk_advanced_control_assessment', "Control Assessment", ramRecord.getUniqueValue(), ramRecord.control_effectiveness.changes(), ramRecord.control_effectiveness, '2');
this.insertOrDeleteRecord('sn_risk_advanced_inherent_assessment', "Inherent Assessment", ramRecord.getUniqueValue(), ramRecord.inherent_risk.changes(), ramRecord.inherent_risk, '1');
this.insertOrDeleteRecord('sn_risk_advanced_residual_assessment', "Residual Assessment", ramRecord.getUniqueValue(), ramRecord.residual_risk.changes(), ramRecord.residual_risk, '3');
this.insertOrDeleteRecord('sn_risk_advanced_target_assessment', "Target Assessment", ramRecord.getUniqueValue(), ramRecord.target_risk.changes(), ramRecord.target_risk, '4');
},
_getAssessmentTypeCount: function(assessmentType) {
var gr = new GlideAggregate(assessmentType.getTableName());
gr.addAggregate('COUNT');
gr.addQuery('risk_assessment_methodology', assessmentType.risk_assessment_methodology);
gr.addQuery('sys_class_name', assessmentType.sys_class_name);
gr.query();
if (gr.next())
return gr.getAggregate('COUNT');
else
return 0;
},
_addIfEntityClassPointsOneOrZeroTable: function(ramReference) {
var entityClassRuleReference = new GlideAggregate('sn_grc_profile_class_rules');
entityClassRuleReference.addQuery('profile_class', (ramReference.entity_class_1 + ''));
entityClassRuleReference.addAggregate('COUNT');
entityClassRuleReference.query();
if (entityClassRuleReference.next()) {
if (parseInt(entityClassRuleReference.getAggregate('COUNT')) > 1) {
gs.addErrorMessage(new sn_grc.GRCUtils().getMessage("profile_class_already_exists"));
ramReference.setAbortAction(true);
}
}
},
_validateRAM: function(ramReference) {
var result = {};
var tableAlreadyPresent = this._checkPublishedRAMWithSameTablePresent(ramReference);
if (tableAlreadyPresent) {
result.errorMsg = gs.getMessage('Risk assessment methodology is already present on this table');
return result;
}
var asmtTypesPresent = this._checkIfAssessmentTypesarePresent(ramReference.getUniqueValue());
if (!asmtTypesPresent) {
result.errorMsg = gs.getMessage('Add at least one assessment type to publish the Risk assessment methodology.');
} else {
var inherent = this._validateAssessmentType(ramReference.getUniqueValue(), 'sn_risk_advanced_inherent_assessment');
var control = this._validateAssessmentType(ramReference.getUniqueValue(), 'sn_risk_advanced_control_assessment');
var residual = this._validateAssessmentType(ramReference.getUniqueValue(), 'sn_risk_advanced_residual_assessment');
var target = this._validateAssessmentType(ramReference.getUniqueValue(), 'sn_risk_advanced_target_assessment');
result = inherent && control && residual && target;
}
return result;
},
_validateRiskResponseMandatoryScript: function(ramReference) {
if (gs.hasRole('sn_risk_advanced.ara_admin') || gs.hasRole('sn_grc.developer')) {
var evaluator = new GlideScopedEvaluator();
evaluator.putVariable('result', {});
evaluator.putVariable('asmtId', '');
evaluator.evaluateScript(ramReference, 'risk_response_mandatory_script', null);
var result = evaluator.getVariable('result');
if (result.error && result.error.message)
result.error = result.error.message;
return result;
} else {
return gs.getMessage("Insufficient privileges to perform this action");
}
},
_validateScript: function(glideRecord, fieldName) {
var evaluator = new GlideScopedEvaluator();
evaluator.putVariable('result', {});
evaluator.putVariable('asmtId', '');
evaluator.evaluateScript(glideRecord, fieldName, null);
var result = evaluator.getVariable('result');
if (result.error && result.error.message)
result.error = result.error.message;
return result;
},
_validateAssessmentType: function(ramReference, className) {
var asmtType = new GlideRecord('sn_risk_advanced_assessment_type');
asmtType.addQuery('risk_assessment_methodology', ramReference);
asmtType.addQuery('sys_class_name', className);
asmtType.query();
if (!asmtType.next()) {
return true;
} else {
if (asmtType.state == '2')
return true;
else
return false;
}
},
_checkIfAssessmentTypesarePresent: function(ramReference) {
var asmtType = new GlideRecord('sn_risk_advanced_assessment_type');
asmtType.addQuery('risk_assessment_methodology', ramReference);
asmtType.query();
return asmtType.hasNext();
},
_checkPublishedRAMWithSameTablePresent: function(ramReference) {
var ram = new GlideRecord('sn_risk_advanced_risk_assessment_methodology');
ram.addQuery('assessed_on', '1');
ram.addQuery('table_name', ramReference.getValue('table_name'));
ram.addQuery('state', '2');
ram.query();
return ram.hasNext();
},
_retireAsmtType: function(ramID) {
var asmtType = new GlideRecord('sn_risk_advanced_assessment_type');
asmtType.addQuery('risk_assessment_methodology', ramID);
asmtType.query();
asmtType.setValue('state', '3');
asmtType.updateMultiple();
},
_setAsmtScopeToInActive: function(ramID) {
var asmtScope = new GlideRecord('sn_risk_advanced_risk_assessment_scope');
asmtScope.addQuery('risk_assessment_methodology', ramID);
asmtScope.query();
asmtScope.setValue('active', false);
asmtScope.updateMultiple();
},
_getHighResidualRiskRating: function(ramId) {
var highRating = "";
var resiudalAssessment = new GlideRecord("sn_risk_advanced_residual_assessment");
resiudalAssessment.addQuery('risk_assessment_methodology', ramId);
resiudalAssessment.query();
if (resiudalAssessment.next()) {
var rating = new GlideRecord("sn_risk_advanced_rating_criteria");
rating.addQuery('assessment_type', resiudalAssessment.getUniqueValue());
rating.orderByDesc('lower_interval');
rating.setLimit(1);
rating.query();
highRating = rating.next() ? rating.getUniqueValue() : "";
}
return highRating;
},
_getEntityForRisk: function(risk) {
var riskRecord = new GlideRecord("sn_risk_risk");
riskRecord.get(risk);
return riskRecord.getValue('profile');
},
_getRAMChoicesForRisk: function(riskId, search) {
var result = {};
var itemParent = {};
var totalRams = 0;
var heading = "";
var ramChoices = [];
var rams = new GlideRecord("sn_risk_advanced_risk_assessment_methodology");
var entityId = this._getEntityForRisk(riskId);
if (entityId) {
var entityRecord = new GlideRecord("sn_grc_profile");
entityRecord.get(entityId);
if (entityRecord.getValue("active")) {
var entityClass = entityRecord.getValue("profile_class");
if (entityClass) {
//Get count of total no. of RAMs for risk
var countRams = new GlideAggregate('sn_risk_advanced_risk_assessment_methodology');
countRams.addQuery("assessed_on", "0");
countRams.addQuery("entity_classesLIKE" + entityClass);
countRams.addQuery("state", "2");
if (search) {
countRams.addEncodedQuery("nameSTARTSWITH" + search);
}
countRams.addAggregate('COUNT');
countRams.query();
if (countRams.next()) {
totalRams = countRams.getAggregate('COUNT');
}
rams.addQuery("assessed_on", "0");
rams.addQuery("entity_classesLIKE" + entityClass);
rams.addQuery("state", "2");
if (search) {
rams.addEncodedQuery("nameSTARTSWITH" + search);
}
rams.orderBy("name");
rams.setLimit(25);
rams.query();
if (totalRams > 25) {
heading = gs.getMessage("Showing 1-25 out of {0} risk assessment methodologies", [totalRams]);
} else {
if (totalRams == 0) {
heading = gs.getMessage("No risk assessment methodology found");
} else {
heading = gs.getMessage("Showing 1-{0} out of {0} risk assessment methodologies", [totalRams]);
}
}
itemParent.label = heading;
while (rams.next()) {
var item = {};
item.id = rams.getUniqueValue();
item.label = rams.getValue("name");
ramChoices.push(item);
}
itemParent.children = ramChoices;
result.ramChoices = [itemParent];
}
}
}
return result;
},
_getRAMChoices: function(search) {
var result = {};
var itemParent = {};
var totalRams = 0;
var heading = "";
var ramChoices = [];
var rams = new GlideRecord("sn_risk_advanced_risk_assessment_methodology");
if (search) {
rams.addEncodedQuery("assessed_on=0^state=2^nameSTARTSWITH" + search);
} else {
rams.addEncodedQuery("assessed_on=0^state=2");
}
rams.orderBy("name");
rams.setLimit(25);
rams.query();
totalRams = rams.getRowCount();
if (totalRams > 25) {
heading = gs.getMessage("Showing 1-25 out of {0} risk assessment methodologies", [totalRams]);
} else {
if (totalRams == 0) {
heading = gs.getMessage("No risk assessment methodology found");
} else {
heading = gs.getMessage("Showing 1-{0} out of {0} risk assessment methodologies", [totalRams]);
}
}
itemParent.label = heading;
while (rams.next()) {
var item = {};
item.id = rams.getUniqueValue();
item.label = rams.getValue("name");
ramChoices.push(item);
}
itemParent.children = ramChoices;
result.ramChoices = [itemParent];
return result;
},
_getRiskChoices: function(search) {
var result = {};
var itemParent = {};
//Get count of total no. of risks
var totalRisks = 0;
var riskCount = new GlideAggregate('sn_risk_risk');
if (search) {
riskCount.addEncodedQuery("state!=retired^nameSTARTSWITH" + search);
} else {
riskCount.addEncodedQuery("state!=retired");
}
riskCount.addAggregate('COUNT');
riskCount.query();
if (riskCount.next()) {
totalRisks = riskCount.getAggregate('COUNT');
}
var heading = "";
var riskChoices = [];
var risks = new GlideRecord("sn_risk_risk");
if (search) {
risks.addEncodedQuery("state!=retired^nameSTARTSWITH" + search);
} else {
risks.addEncodedQuery("state!=retired");
}
risks.orderBy("name");
risks.setLimit(25);
risks.query();
if (totalRisks > 25) {
heading = gs.getMessage("Showing 1-25 out of {0} risks", [totalRisks]);
} else {
if (totalRisks == 0) {
heading = gs.getMessage("No risk found");
} else {
heading = gs.getMessage("Showing 1-{0} out of {0} risks", [totalRisks]);
}
}
itemParent.label = heading;
while (risks.next()) {
var item = {};
var entity = new GlideRecord("sn_grc_profile");
item.id = risks.getUniqueValue();
item.label = risks.getValue("name");
entity.get(risks.getValue("profile"));
item.sublabel = entity.getValue("name");
riskChoices.push(item);
}
itemParent.children = riskChoices;
result.riskChoices = [itemParent];
return result;
},
_getAssigneeGroups: function(search, type, options) {
var result = {};
var resultFound = false;
//Condition to check for domain or RAMs which can access extension points
if (options.domain != 0 || gs.getProperty('sn_risk_advanced.rams_with_extension_points').includes(options.ramId)) {
var hooks = new GlideScriptedExtensionPoint().getExtensions('sn_risk_advanced.getAssigneeGroupsToReassign');
hooks.forEach(function(hook) {
if (hook.handles(options)) {
result = hook.getUserGroupsObject(search, type, options);
}
//If result object returned not empty
if (!(Object.keys(result).length === 0 && result.constructor === Object)) {
resultFound = true;
return;
}
});
}
if (resultFound) {
return result;
}
var itemParent = {};
//Get count of total no. of groups matching the filter
var totalGroups = 0;
var groupCount = new GlideAggregate('sys_user_group');
if (type == 'assessor') groupCount.addEncodedQuery("roles=sn_risk.reader^ORroles=sn_risk.manager^ORroles=sn_risk.admin^ORroles=sn_risk.user^ORroles=sn_risk_advanced.ara_assessor^ORroles=sn_grc.business_user_lite^active=true");
else groupCount.addEncodedQuery("roles=sn_risk.reader^ORroles=sn_risk.manager^ORroles=sn_risk.admin^ORroles=sn_risk.user^ORroles=sn_risk_advanced.ara_approver^active=true");
if (search)
groupCount.addEncodedQuery("^nameSTARTSWITH" + search);
groupCount.addAggregate('COUNT');
groupCount.query();
if (groupCount.next()) {
totalGroups = groupCount.getAggregate('COUNT');
}
var heading = "";
var groupChoices = [];
var groups = new GlideRecord("sys_user_group");
if (type == 'assessor') groups.addEncodedQuery("roles=sn_risk.reader^ORroles=sn_risk.manager^ORroles=sn_risk.admin^ORroles=sn_risk.user^ORroles=sn_risk_advanced.ara_assessor^ORroles=sn_grc.business_user_lite^active=true");
else groups.addEncodedQuery("roles=sn_risk.reader^ORroles=sn_risk.manager^ORroles=sn_risk.admin^ORroles=sn_risk.user^ORroles=sn_risk_advanced.ara_approver^active=true");
if (search)
groups.addEncodedQuery("^nameSTARTSWITH" + search);
groups.orderBy("name");
groups.setLimit(25);
groups.query();
if (totalGroups > 25) {
heading = gs.getMessage("Showing 1-25 out of {0} groups", [totalGroups]);
} else {
if (totalGroups == 0) {
heading = gs.getMessage("No groups found");
} else {
heading = gs.getMessage("Showing 1-{0} out of {0} groups", [totalGroups]);
}
}
itemParent.label = heading;
while (groups.next()) {
var item = {};
item.id = groups.getUniqueValue();
item.label = groups.getValue("name");
groupChoices.push(item);
}
itemParent.children = groupChoices;
result.groupChoices = [itemParent];
return result;
},
_validateLicense: function(ram) {
var result = {};
var license = ram.getValue("license");
//If its a domain RAM, check exisiting no. of active and published RAMs
if (license != 0) {
var ram_record = new GlideAggregate("sn_risk_advanced_risk_assessment_methodology");
ram_record.addQuery("license", license);
ram_record.addQuery("state", "2");
// Add Aggregate
ram_record.addAggregate('COUNT');
ram_record.query();
ram_record.next();
if (ram_record.getAggregate('COUNT') >= 2) {
result.isValid = false;
result.errorMsg = gs.getMessage("You cannot publish more than two risk assessment methodologies for a domain. Please contact your system administrator.");
} else {
result.isValid = true;
}
} else {
if (!this._canCreateNewRAM()) {
result.isValid = false;
result.errorMsg = gs.getMessage("You cannot publish more than two risk assessment methodologies for a domain. Please contact your system administrator.");
} else {
result.isValid = true;
}
}
return result;
},
_canCreateNewRAM: function() {
if (this._hasARALimitedLicense()) {
if (this._hasIRMEnterpriseLicense() || this._hasIRMProfessional()) {
return true;
}
return false;
}
return true;
},
_hasARALimitedLicense: function() {
var hasLicense = new sn_risk_advanced.LicensingUtils().hasEntitlement("ara_limited_access");
return hasLicense;
},
_hasIRMEnterpriseLicense: function() {
var hasLicense = new sn_risk_advanced.LicensingUtils().hasEntitlement("irm_enterprise_access");
return hasLicense;
},
_hasIRMProfessional: function() {
var hasLicense = new sn_risk_advanced.LicensingUtils().hasEntitlement("irm_professional_access");
return hasLicense;
},
_getDomainFromParams: function(options) {
//if RAM is present
if (options.ramId) {
var domain = this._getDomainFromRAM(options.ramId);
options.domain = domain ? domain : 0;
}
// if Risk assessment id is present
else if (options.assessmentId) {
var asmt = new GlideRecord("sn_risk_advanced_risk_assessment_instance");
asmt.get(options.assessmentId);
var ramId = asmt.getValue("risk_assessment_methodology");
domain = this._getDomainFromRAM(options.ramId);
options.domain = domain ? domain : 0;
options.ramId = ramId;
}
return options;
},
_getDomainFromRAM: function(ramId) {
var ram = new GlideRecord("sn_risk_advanced_risk_assessment_methodology");
ram.addQuery("sys_id", ramId);
ram.query();
if (ram.next()) {
return ram.getValue("license");
}
},
_checkIfAssessmentTypesPublished: function(ramReference) {
var inherent = this._validateAssessmentType(ramReference.getUniqueValue(), 'sn_risk_advanced_inherent_assessment');
var control = this._validateAssessmentType(ramReference.getUniqueValue(), 'sn_risk_advanced_control_assessment');
var residual = this._validateAssessmentType(ramReference.getUniqueValue(), 'sn_risk_advanced_residual_assessment');
var target = this._validateAssessmentType(ramReference.getUniqueValue(), 'sn_risk_advanced_target_assessment');
return inherent && control && residual && target;
},
_performEntitlementCheck: function(ramId) {
var msg;
//Check RAM id passed
if (ramId) {
var ram = new GlideRecord('sn_risk_advanced_risk_assessment_methodology');
ram.get(ramId);
//Check domain of RAM id is IRM, also the user has atleast ara limited license
if (ram.getValue('license') == 0 && this._hasARALimitedLicense()) {
//Check if neither IRM professional nor IRM enterprise entitlement present, throw message
if (!(this._hasIRMProfessional() || this._hasIRMEnterpriseLicense())) {
msg = gs.getMessage('Your current product license does not authorise you to use advanced risk assessments. Contact your system administrator for details.');
}
}
}
return msg;
},
type: 'RiskAssessmentMethodologyUtilsBase'
};
Sys ID
c42c8260b7910010bded618dce11a9ff