Name

sn_grc.IGEntityToEntityTypeActionHandler

Description

No description available

Script

var IGEntityToEntityTypeActionHandler = Class.create();
IGEntityToEntityTypeActionHandler.prototype = {
  initialize: function(action) {
      this.actionType = action.action;
      this.source = action.source;
      this.sourceTable = action.table;
      this.entityTypeId = action.entity_type_id+'';
      this.entityId = action.entity_id;
  },

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

      if (this.actionType == 'add_entity_to_entity_type') {
          this._addEntityToEntityType();
      } else if (this.actionType == 'remove_entity_from_entity_type') {
          this._removeEntityFromEntityType();
      }
  },

  _addEntityToEntityType: function() {
      var util = new ItemGenerationV2Utils();
      // Get all the contents attached to the profile type
      var contentToEntityTypeTables = new GlideTableHierarchy('sn_grc_m2m_content_profile_type').getTableExtensions();
      for (var i = 0; i < contentToEntityTypeTables.length; i++) {
          var contentToEntityTypeTable = contentToEntityTypeTables[i];
          this.strategy = util.getStrategy(contentToEntityTypeTable);

          if (gs.nil(this.strategy)) {
              continue;
          }

          // Associate as reliant entities to item based on associated entity types
          if (!gs.nil(this.strategy.getItemToEntityTable())) {

              var itemToEntityType = new GlideRecord(this.strategy.getItemToEntityTypeTable());
              itemToEntityType.addQuery('entity_type', this.entityTypeId);
              itemToEntityType.addQuery('item.active', 'true');
              itemToEntityType.query();

              while (itemToEntityType.next()) {
                  this.strategy.addEntityToItem(this.entityId, itemToEntityType.item + '', 'source_entity_types', this.entityTypeId, true);
              }
          }

          // Get contents
          var contentToProfileType = new GlideRecord(contentToEntityTypeTable);
          contentToProfileType.addQuery('sn_grc_profile_type', this.entityTypeId);
          contentToProfileType.addQuery('sn_grc_content.active', 'true');
          contentToProfileType.query();

          while (contentToProfileType.next()) {
              var contentGr = contentToProfileType.sn_grc_content.getRefRecord();
              if (contentGr.isValidRecord() && this.strategy.recordCanCreateItems(contentGr)) {
                  this.strategy.generateItem(this.entityId, contentGr.getUniqueValue(), this.entityTypeId);
              }
          }
      }
  },

  _removeEntityFromEntityType: function() {
      var util = new ItemGenerationV2Utils();
      var itemTables = new ItemInheritance().getChildrenOfItemTable();
      for (var i = 0; i < itemTables.length; i++) {
          var item = new GlideRecord(itemTables[i]);
          item.addQuery('instance', 'true');
          item.addQuery('profile', this.entityId);
          item.addQuery('source', 'CONTAINS', this.entityTypeId);
          item.query();

          while (item.next()) {
              util.deleteSourceInItem(item, this.entityTypeId);
          }
      }

      //Remove or update source from reliant entity to item associations based on associated entity types
      var itemToEntityTables = new ItemInheritance().getChildrenOfItemToEntityTable();
      for (var j = 0; j < itemToEntityTables.length; j++) {
          var m2mEntityItem = new GlideRecord(itemToEntityTables[j]);
          m2mEntityItem.addQuery('entity', this.entityId);
          m2mEntityItem.addQuery('source_entity_types', 'CONTAINS', this.entityTypeId);
          m2mEntityItem.query();

          while (m2mEntityItem.next()) {
              util.deleteOrUpdateSourceInItemEntityM2m(m2mEntityItem, 'source_entity_types', this.entityTypeId, true);
          }
      }
  },

  type: 'IGEntityToEntityTypeActionHandler'
};

Sys ID

5ea2a29b07e72010bbc77f04a9d30009

Offical Documentation

Official Docs: