Name
sn_grc.IGItemActionHandler
Description
No description available
Script
var IGItemActionHandler = Class.create();
IGItemActionHandler.prototype = {
initialize: function(action, strategy) {
this.actionType = String(action.action);
this.source = action.source;
this.sourceTable = action.table;
this.itemId = action.item_id + '';
this.batchIds = action.batch_processing_ids + '';
this.strategy = strategy;
},
execute: function() {
if (gs.nil(this.itemId)) return;
if (this.actionType == 'delete_item') {
this._deleteReliantAssociationsForItem();
return;
}
var itemGr = new GlideRecord(this.strategy.itemTable);
if (!itemGr.get(this.itemId)) return;
var isCommonItem = itemGr.getValue('item_function') == '1';
var isRiskComplianceInstalled = new sn_grc.ItemGenerationV2Conditions().checkIfRiskComplianceInstalled();
if (this.actionType == 'activate_item') {
if (isCommonItem) {
this._refreshEntityAssociationsForEntityType();
this._activateEntityAssociations();
}
if (itemGr.instance && isRiskComplianceInstalled) {
this.entityId = itemGr.profile + '';
this.contentId = itemGr.content + '';
if (this.strategy.itemTable == 'sn_risk_risk')
this._associateRisksToControls(true);
else
this._associateRisksToControls(false);
}
} else if (this.actionType == 'deactivate_item') {
if (isCommonItem)
this._deactivateEntityAssociationsUnderItem();
if (isRiskComplianceInstalled) {
this._deleteRiskControlRelations();
}
}
},
_activateEntityAssociations: function() {
var itemEntityGr = new GlideRecord(this.strategy.getItemToEntityTable());
itemEntityGr.addQuery('item', this.itemId);
itemEntityGr.addQuery('active', false);
itemEntityGr.addQuery('entity.active', true);
itemEntityGr.query();
while (itemEntityGr.next()) {
this.strategy.addEntityToItem(itemEntityGr.getValue('entity'), itemEntityGr.getValue('item'), '', '', true);
}
},
_refreshEntityAssociationsForEntityType: function() {
var itemEntityTypeGr = new GlideRecord('sn_grc_m2m_item_entity_type');
itemEntityTypeGr.addQuery('item', this.itemId);
itemEntityTypeGr.addQuery('entity_type.active', true);
itemEntityTypeGr.query();
while (itemEntityTypeGr.next()) {
var actionParms = {
action: 'add_entity_type_to_item',
source: itemEntityTypeGr.getUniqueValue(),
table: itemEntityTypeGr.getTableName(),
item_id: itemEntityTypeGr.getValue('item'),
entity_type_id: itemEntityTypeGr.getValue('entity_type')
};
new IGItemToEntityTypeActionHandler(actionParms).execute();
}
},
_deactivateEntityAssociationsUnderItem: function() {
var itemEntityM2mExtendedTables = new sn_grc.ItemInheritance().getChildrenOfItemToEntityTable();
for (var i in itemEntityM2mExtendedTables) {
var itemEntityGr = new GlideRecord(itemEntityM2mExtendedTables[i]);
itemEntityGr.addQuery('item', this.itemId);
itemEntityGr.addQuery('active', true);
itemEntityGr.query();
while (itemEntityGr.next()) {
itemEntityGr.setValue('active', false);
itemEntityGr.skipInsertActionToQueue = true;
itemEntityGr.update();
var actionParams = {
'action': 'deactivate_entity_to_item',
'source': itemEntityGr.getUniqueValue(),
'table': itemEntityGr.getTableName(),
'entity_id': itemEntityGr.entity + '',
'item_id': itemEntityGr.item + ''
};
new sn_grc.IGItemToEntityActionHandler(actionParams, this.strategy).execute();
}
}
},
_associateRisksToControls: function(allEntities) {
var riskStrategy = new sn_grc.ItemGenerationV2Utils().getStrategy("sn_risk");
var RStoCO = new GlideRecord('sn_risk_m2m_risk_definition_policy_statement');
RStoCO.addQuery('sn_compliance_policy_statement', this.contentId).addOrCondition('sn_risk_definition', this.contentId);
RStoCO.addQuery('sn_compliance_policy_statement.active', true);
RStoCO.addQuery('sn_risk_definition.active', true);
RStoCO.query();
while (RStoCO.next()) {
var riskStatementId = RStoCO.getValue('sn_risk_definition');
var controlObjectiveId = RStoCO.getValue('sn_compliance_policy_statement');
riskStrategy.associateRisksToControlsForEntity(this.entityId, riskStatementId, controlObjectiveId, allEntities);
}
},
_deleteRiskControlRelations: function() {
var table = this.strategy.itemTable;
var riskStrategy = new sn_grc.ItemGenerationV2Utils().getStrategy("sn_risk");
riskStrategy.deleteRiskControlRelationForItems(table, this.itemId);
},
_deleteReliantAssociationsForItem: function() {
var entityIds = this.batchIds.split(',');
for (i = 0; i < entityIds.length; i++) {
var actionParams = {
'action': 'remove_entity_from_item',
'source': this.source,
'table': this.sourceTable,
'entity_id': entityIds[i],
'item_id': this.itemId
};
new sn_grc.IGItemToEntityActionHandler(actionParams, this.strategy).execute();
}
},
type: 'IGItemActionHandler'
};
Sys ID
8533c2f577921110878c49647a5a99ef