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

Offical Documentation

Official Docs: