Name

sn_grc.IGEntityActionHandler

Description

No description available

Script

var IGEntityActionHandler = Class.create();
IGEntityActionHandler.prototype = {
  initialize: function(action) {
      this.actionType = String(action.action);
      this.source = String(action.source);
      this.sourceTable = String(action.table);
      if (action.entity_id) {
          this.entityId = String(action.entity_id);
      }
      if (action.entity_ids) {
          this.entityIds = String(action.entity_ids);
      }
  },

  execute: function() {
      if (gs.nil(this.actionType) || (gs.nil(this.entityId) && gs.nil(this.entityIds))) {
          return;
      }

      switch (this.actionType) {
          case 'deactivate_entity':
              return this._deactivateEntity(this.entityId);
          case 'deactivate_bulk_entities':
              return this._deactivateEntity(this.entityIds);
          case 'activate_entity':
              return this._activateEntity(this.entityId);
          case 'activate_bulk_entities':
              return this._activateEntity(this.entityIds);
      }
  },

  _deactivateEntity: function(entityIds) {
      var utils = new ItemGenerationV2Utils();
      var itemInheritance = new sn_grc.ItemInheritance();

      var itemEntityM2mExtendedTables = itemInheritance.getChildrenOfItemToEntityTable();
      for (var i in itemEntityM2mExtendedTables) {
          var strategy = utils.getStrategy(itemEntityM2mExtendedTables[i]);
          var itemToEntityGr = new GlideRecord(itemEntityM2mExtendedTables[i]);
          itemToEntityGr.addQuery('entity', 'IN', entityIds);
          itemToEntityGr.addQuery('active', true);
          itemToEntityGr.addQuery('item.active', true);
          itemToEntityGr.query();
          while (itemToEntityGr.next()) {
              itemToEntityGr.setValue('active', false);
              itemToEntityGr.skipInsertActionToQueue = true;
              itemToEntityGr.update();

              var actionParams = {
                  'action': 'deactivate_entity_to_item',
                  'source': itemToEntityGr.getUniqueValue(),
                  'table': itemToEntityGr.getTableName(),
                  'entity_id': itemToEntityGr.entity + '',
                  'item_id': itemToEntityGr.item + ''
              };
              new sn_grc.IGItemToEntityActionHandler(actionParams, strategy).execute();
          }
      }

      var itemExtendedTables = itemInheritance.getChildrenOfItemTable();
      for (var i in itemExtendedTables) {
          var itemStrategy = utils.getStrategy(itemExtendedTables[i]);

          var item = new GlideRecord(itemExtendedTables[i]);
          item.addQuery('profile', 'IN', entityIds);
          item.addActiveQuery();
          item.query();

          while (item.next()) {
              item.setValue('active', false);
              item.skipInsertActionToQueue = true;
              item.update();
              if (item.update()) {
                  var actionParms = {
                      action: 'deactivate_item',
                      source: item.getUniqueValue(),
                      table: item.getTableName(),
                      item_id: item.getUniqueValue()
                  };
                  new IGItemActionHandler(actionParms, itemStrategy).execute();
              }
          }
      }

      if ((GlidePluginManager.isActive('sn_privacy') || GlidePluginManager.isActive('com.sn_privacy'))) {
          var grProfile = new GlideRecord("sn_grc_profile");
          grProfile.addQuery('sys_id', 'IN', entityIds);
          grProfile.query();
          while (grProfile.next()) {
              var workNotes = gs.getMessage('This processing activity is deactivated because the related entity is deactivated and the processing activity is not considered for privacy reports.');
              new sn_privacy.PrivacyUtils().processProcessingActivityOnEntityChange(grProfile, workNotes);
          }
      }
  },

  _activateEntity: function(entityIds) {
      var utils = new ItemGenerationV2Utils();
      var itemInheritance = new sn_grc.ItemInheritance();

      var itemEntityM2mExtendedTables = itemInheritance.getChildrenOfItemToEntityTable();
      for (var i in itemEntityM2mExtendedTables) {
          var strategy = utils.getStrategy(itemEntityM2mExtendedTables[i]);

          var itemToEntityGr = new GlideRecord(itemEntityM2mExtendedTables[i]);
          itemToEntityGr.addQuery('entity', 'IN', entityIds);
          itemToEntityGr.addQuery('active', false);
          itemToEntityGr.addQuery('item.active', true);
          itemToEntityGr.query();
          while (itemToEntityGr.next())
              strategy.addEntityToItem(itemToEntityGr.getValue('entity'), itemToEntityGr.getValue('item'), '', '', true);
      }

      var content = [];
      var itemExtendedTables = itemInheritance.getChildrenOfItemTable();
      for (var i in itemExtendedTables) {
          var itemStrategy = utils.getStrategy(itemExtendedTables[i]);

          var item = new GlideRecord(itemExtendedTables[i]);
          item.addQuery('profile', 'IN', entityIds);
          item.addQuery('content.active', 'true').addOrCondition('content', '=', '');
          item.addQuery('active', 'false');
          item.addQuery('source', '!=', '');
          item.addQuery('retired_manually', 'false');
          item.query();
          while (item.next()) {
              item.setValue('active', true);
              if (!gs.nil(item.content))
                  content.push(item.getValue('content'));
              item.skipInsertActionToQueue = true;

              if (item.update()) {
                  var actionParms = {
                      action: 'activate_item',
                      source: item.getUniqueValue(),
                      table: item.getTableName(),
                      item_id: item.getUniqueValue(),
                  };
                  new IGItemActionHandler(actionParms, itemStrategy).execute();
              }
          }
      }

      if ((GlidePluginManager.isActive('sn_risk') || GlidePluginManager.isActive('com.sn_risk'))) {
          this._checkContentToContent(content);
      }
  },

  _checkContentToContent: function(content) {
      var strategy = new ItemGenerationV2Utils().getStrategy('sn_risk');
      var RStoCO = new GlideRecord('sn_risk_m2m_risk_definition_policy_statement');
      RStoCO.addQuery('sn_compliance_policy_statement', 'IN', content).addOrCondition('sn_risk_definition', 'IN', content);
      RStoCO.query();
      while (RStoCO.next()) {
          var actionParams = {
              'action': 'add_content_to_content',
              'source': RStoCO.getUniqueValue(),
              'table': RStoCO.getTableName(),
              'content_id': RStoCO.getValue('sn_risk_definition')
          };

          new IGContentActionHandler(actionParams, strategy).execute();
      }
  },

  type: 'IGEntityActionHandler'
};

Sys ID

ff6b697707403010bbc77f04a9d300ab

Offical Documentation

Official Docs: