Name

sn_grc.GRCAbstractGeneratorV2StrategyBase

Description

Shared item generator strategy utilities

Script

var GRCAbstractGeneratorV2StrategyBase = Class.create();
GRCAbstractGeneratorV2StrategyBase.prototype = {
  itemTable: null,

  initialize: function() {

  },

  generate: function() {},

  getItemToEntityTypeTable: function() {
      return "sn_grc_m2m_item_entity_type";
  },

  getItemToEntityTable: function() {
      /* This method should not return any table name. Risk should have an implementation for this method to return their risk specific table. Item to entity specific logic will not be triggered if this table is empty. This is done so that risk will not face any issues in different usecases where there is an association for entity to item.  */
      return;
  },

  canCreateItems: function(contentId) {
      return this._canCreateItems(contentId);
  },

  generateItem: function(entityId, contentId, source) {
      if (gs.nil(this.itemTable))
          return '';

      var itemId = '';
      var isItemActivated = false;
      var item = new GlideRecord(this.itemTable);
      item.addQuery('content', contentId);
      item.addQuery('profile', entityId);
      item.addQuery('instance', true);
      item.setLimit(1);
      item.query();

      if (item.next()) {
          if (!item.retired_manually) {
              item.active = true;
              item.skipInsertActionToQueue = true;
              isItemActivated = true;
          }
          this._updateSource(item, source);
          itemId = item.update();

      } else {
          item.initialize();
          item.profile = entityId;
          item.content = contentId;
          item.created_one_off = false;
          item.instance = true;
          item.skipInsertActionToQueue = true;
          this._updateSource(item, source);
          itemId = item.insert();
          isItemActivated = true;
      }


      if (isItemActivated && itemId) {
          var actionParms = {
              action: 'activate_item',
              source: itemId,
              table: item.getTableName(),
              item_id: itemId,
          };
          new sn_grc.IGItemActionHandler(actionParms, this).execute();
      }
      return itemId;
  },

  addEntityToItem: function(entityId, itemId, sourceField, source, skipInsertAction) {
      return new sn_grc.ItemInheritance().addEntityToItem(entityId, itemId, sourceField, source, skipInsertAction);
  },

  _updateSource: function(item, source) {
      if ((item.source + '').indexOf(source) == -1) {
          item.source += source + ',';
      }
  },

  _setGeneralContentFields: function(content, item) {},

  _setSpecificContentFields: function(content, item) {},

  _setGeneralDocumentFields: function(document, item) {
      item.state = document.state;
  },

  _setSpecificDocumentFields: function(document, item) {},

  _canCreateItems: function(contentId) {
      return true;
  },

  recordCanCreateItems: function(record) {
      return true;
  },

  type: 'GRCAbstractGeneratorV2StrategyBase'
};

Sys ID

0975f59907b22010bbc77f04a9d3000d

Offical Documentation

Official Docs: