Name

sn_grc.ItemInheritanceBase

Description

No description available

Script

var ItemInheritanceBase = Class.create();
ItemInheritanceBase.prototype = {
  initialize: function() {},

  isImplementedAsItem: function(entityId, itemId) {
      return this._isImplementedAsItem(entityId, itemId);
  },

  isAddedUnderDifferentItem: function(entityId, itemId) {
      return this._isAddedUnderDifferentItem(entityId, itemId);
  },

  isAddedUnderAnyItem: function(entityId, itemId) {
      return this._isAddedUnderAnyItem(entityId, itemId);
  },

  isImplementedUnderItem: function(entityId, contentId) {
      return this._isImplementedUnderItem(entityId, contentId);
  },

  updateSourceInItemEntityM2m: function(m2mGr, sourceField, source) {
      this._updateSourceInItemEntityM2m(m2mGr, sourceField, source);
  },
  
  getReliantEntites: function(itemId){
  	return this._getReliantEntites(itemId);
  },
  getImplementedItem: function(entityId, itemId, selectedItem) {
      return this._getImplementedItem(entityId, itemId);
  },
  
  getSkippedGenericItems: function(table, item, selectedItems) {
      return this._getSkippedGenericItems(table, item, selectedItems);
  },

  getChildrenOfItemTable: function() {
      return this._getChildrenOfItemTable();
  },

  getChildrenOfItemToEntityTable: function() {
      return this._getChildrenOfItemToEntityTable();
  },

  getItemForReliantEntity: function(entityId, contentId) {
      var m2mGr = new GlideRecord('sn_grc_m2m_item_entity');
      m2mGr.addQuery('active', true);
      m2mGr.addQuery('entity', entityId);
      m2mGr.addQuery('item.active', true);
      m2mGr.addQuery('item.content', contentId);
      m2mGr.addQuery('item.instance', true);
      m2mGr.setLimit(1);
      m2mGr.query();

      var itemId = '';
      if (m2mGr.next()) {
          itemId = m2mGr.item + '';
      }
      return itemId;
  },

  getItemsForReliantEntity: function(entityId, itemType) {
      var className = '';
      if (itemType === 'Control') {
          className = 'sn_compliance_control';
      } else if (itemType === 'Risk') {
          className = 'sn_risk_risk';
      }
      var m2mGr = new GlideRecord('sn_grc_m2m_item_entity');
      if (!gs.nil(className))
          m2mGr.addQuery('item.sys_class_name', className);
      m2mGr.addQuery('active', true);
      m2mGr.addQuery('entity', entityId);
      m2mGr.query();

      var itemIds = [];
      while (m2mGr.next()) {
          itemIds.push(m2mGr.item + '');
      }
      return itemIds;
  },

  addEntityToItem: function(entityId, itemId, sourceField, source, skipInsertAction) {
      var m2mSysId = '';
      var isActivated = false;

      if (this._isImplementedAsItem(entityId, itemId)) return;
      if (this._isAddedUnderDifferentItem(entityId, itemId)) return;

      var m2mRec = new GlideRecord('sn_grc_m2m_item_entity');
      m2mRec.addQuery('item', itemId);
      m2mRec.addQuery('entity', entityId);
      m2mRec.setLimit(1);
      m2mRec.query();

      if (m2mRec.next()) {
          this._updateSourceInItemEntityM2m(m2mRec, sourceField, source);
          if (!m2mRec.active) {
              m2mRec.setValue('active', true);
              isActivated = true;
          }
          m2mRec.skipInsertActionToQueue = skipInsertAction;
          m2mSysId = m2mRec.update();

          if (skipInsertAction && m2mSysId && isActivated) {
              this._executeEntityToItemAction('activate_entity_to_item', m2mRec);
          }
      } else {
          m2mRec.initialize();
          m2mRec.setValue('item', itemId);
          m2mRec.setValue('entity', entityId);
          m2mRec.setValue('active', true);
          m2mRec.skipInsertActionToQueue = skipInsertAction;
          m2mRec.setValue(sourceField, source + '');
          m2mSysId = m2mRec.insert();

          if (skipInsertAction && m2mSysId) {
              this._executeEntityToItemAction('add_entity_to_item', m2mRec);
          }
      }

      return m2mSysId;
  },

  deleteOrUpdateSourceInItemEntityM2m: function(m2mGr, sourceField, source, skipInsertAction) {
  	source = source +'';
      if (!gs.nil(m2mGr[sourceField])) {
          var sourceIds = this._removeSourceFromField(m2mGr.getValue(sourceField), sourceField, source);
          m2mGr.setValue(sourceField, sourceIds);
      }

      if (gs.nil(m2mGr.getValue('source_entity_types')) && m2mGr.getValue('individually_added') == false) {
          m2mGr.skipInsertActionToQueue = skipInsertAction;
          var isDeleted = m2mGr.deleteRecord();
          if (skipInsertAction && isDeleted) {
              this._executeEntityToItemAction('remove_entity_from_item', m2mGr);
          }
          return;
      }
      m2mGr.update();
  },
  
  deleteReliantEntityTypeAssociations: function(itemId){
  	var m2m = new GlideRecord('sn_grc_m2m_item_entity_type');
      m2m.addQuery('item', itemId);
      m2m.query();
  	while(m2m.next()){
  		m2m.setWorkflow(false);
  		m2m.deleteRecord();
  	}
  },
  
  deleteRelaintEntityAssociations: function(itemId) {
      var m2m = new GlideRecord('sn_grc_m2m_item_entity');
      m2m.addQuery('item', itemId);
      m2m.query();
      while (m2m.next()) {
          m2m.skipInsertActionToQueue = true;
          m2m.deleteRecord();
          this._executeEntityToItemAction('remove_entity_from_item', m2m);
      }
  },
  
  isContentToEntitym2mExits: function(entity,content) {
      var m2m = new GlideRecord('sn_grc_m2m_content_profile');
      m2m.addQuery('sn_grc_profile', entity);
      m2m.addQuery('sn_grc_content', content);
      m2m.query();
      return m2m.hasNext();
  },
  
  hasReliantAssociation: function(itemRec) {
      return this._hasReliantAssociation(itemRec, itemRec.profile + '', false);
  },
  
  getAuthorisationBoundaryEntity: function(entityId) {
      return this._getAuthorisationBoundaryEntity(entityId);
  },
  
  hasSameReliantEntity: function(itemRec) {
      var currItemReliantEntites = this._getReliantEntites(itemRec.getUniqueValue());
      if (currItemReliantEntites.length > 0) {
          var gr = new GlideRecord('sn_grc_m2m_item_entity');
          gr.addActiveQuery();
          gr.addQuery('item.content', itemRec.getValue('content'));
          gr.addQuery('entity', 'IN', currItemReliantEntites);
          gr.addQuery('item', '!=', itemRec.getUniqueValue());
          gr.addQuery('item.name', itemRec.getValue('name'));
          gr.query();
          return gr.hasNext();
      }
  },

  isEntitySameAsReliantEntityForItem: function(itemRec) {
      var gr = new GlideRecord('sn_grc_m2m_item_entity');
      gr.addActiveQuery();
      gr.addQuery('item', itemRec.getUniqueValue());
      gr.addQuery('entity', itemRec.getValue('profile'));
      gr.query();
      return gr.hasNext();
  },

  _removeSourceFromField: function(sourceIds, sourceField, newSource) {
      sourceIds = sourceIds.split(',');
      sourceIds.splice(sourceIds.indexOf(newSource), 1);
      return sourceIds.join(',');
  },

  _updateSourceInItemEntityM2m: function(m2mGr, sourceField, source) {
      if (gs.nil(sourceField) || gs.nil(source)) return;
      var oldSourceIds = m2mGr[sourceField] + '';
      if (oldSourceIds.contains(source)) return;
      var newSourceIds = gs.nil(oldSourceIds) ? source : oldSourceIds + ',' + source;
      m2mGr[sourceField]= newSourceIds;
  },


  _isImplementedAsItem: function(entityId, itemId) {
      var itemGr = new GlideRecord('sn_grc_item');
      if (!itemGr.get(itemId)) return false;

      var items = new GlideAggregate('sn_grc_item');
      items.addQuery('active', true);
      items.addQuery('profile', entityId);
      items.addQuery('content', itemGr.getValue('content'));
      items.addQuery('name', itemGr.getValue('name'));
      items.addAggregate('COUNT');
      items.query();
      items.next();
      return items.getAggregate('COUNT') > 0;
  },

  _isAddedUnderDifferentItem: function(entityId, itemId) {
      var itemGr = new GlideRecord('sn_grc_item');
      if (!itemGr.get(itemId)) return false;
      return this._hasReliantAssociation(itemGr, entityId, true);
  },

  _isAddedUnderAnyItem: function(entityId, itemId) {
      var itemGr = new GlideRecord('sn_grc_item');
      if (!itemGr.get(itemId)) return false;
      return this._hasReliantAssociation(itemGr, entityId, false);
  },

  _isImplementedUnderItem: function(entityId, contentId) {
      var m2mGr = new GlideAggregate('sn_grc_m2m_item_entity');
      m2mGr.addQuery('active', true);
      m2mGr.addQuery('entity', entityId);
      m2mGr.addQuery('item.active', true);
      m2mGr.addQuery('item.content', contentId);
      m2mGr.addQuery('item.instance', true);
      m2mGr.addAggregate('COUNT');
      m2mGr.query();
      m2mGr.next();

      return m2mGr.getAggregate('COUNT') > 0;
  },

  _executeEntityToItemAction: function(action, m2mRec) {
      var strategy = new ItemGenerationV2Utils().getStrategy(m2mRec.item.sys_class_name + '');
      var actionParams = {
          'action': action,
          'source': m2mRec.getUniqueValue(),
          'table': m2mRec.getTableName(),
          'entity_id': m2mRec.getValue('entity'),
          'item_id': m2mRec.getValue('item')
      };

      new sn_grc.IGItemToEntityActionHandler(actionParams, strategy).execute();
  },
  
  _getReliantEntites: function(itemId){
  	var entities = [];
  	var reliantEntities = new GlideRecord('sn_grc_m2m_item_entity');
  	reliantEntities.addActiveQuery();
  	reliantEntities.addQuery('item',itemId);
  	reliantEntities.query();
  	while(reliantEntities.next()){
  		entities.push(reliantEntities.getValue('entity'));
  	}
  	return entities;
  },
  
  _getImplementedItem: function(entityId, itemId, selectedItem) {
      var itemSysId = '';
      var commonItem = new GlideRecord('sn_grc_item');
      if (commonItem.get(itemId)) {
          var itemGr = new GlideRecord('sn_grc_item');
          itemGr.addQuery('active', true);
          itemGr.addQuery('profile', entityId);
          itemGr.addQuery('content', commonItem.getValue('content'));
          itemGr.addQuery('name', commonItem.getValue('name'));
          itemGr.addQuery('sys_id', '!=', selectedItem + '');
          itemGr.query();
          if (itemGr.next()) {
              itemSysId = itemGr.getUniqueValue();
          }

      }

      return itemSysId;
  },
  
  _getSkippedGenericItems: function(table, item, selectedItems) {
  	item = item +'';
  	selectedItems = selectedItems +'';
      var skippedItems = [];
      var selectedItemsGR = new GlideRecord(table);
      selectedItemsGR.addQuery('sys_id', 'IN', selectedItems);
      selectedItemsGR.query();
      while (selectedItemsGR.next()) {
          var existingItem = this._getImplementedItem(selectedItemsGR.getValue('profile'), item, selectedItemsGR.getUniqueValue()) + '';
          var isPresentAsRelaint = this._isAddedUnderAnyItem(selectedItemsGR.getValue('profile'), item + '');
          if ((existingItem && selectedItems.indexOf(existingItem + '') == -1) || isPresentAsRelaint) {
              skippedItems.push(selectedItemsGR.getUniqueValue());
          }
      }
      return skippedItems;
  },
  
  _hasReliantAssociation: function(itemRec, entityId, isAddedUnderDifferentItem) {
      var m2m = new GlideRecord('sn_grc_m2m_item_entity');
      m2m.addQuery('entity', entityId);
      m2m.addQuery('active', true);
      if (isAddedUnderDifferentItem)
          m2m.addQuery('item', '!=', itemRec.getUniqueValue());
      m2m.addQuery('item.content', itemRec.content + '');
      m2m.addQuery('item.active', true);
      if (itemRec.instance)
          m2m.addQuery('item.name', itemRec.content.name + '');
      else
          m2m.addQuery('item.name', itemRec.name + '');
      m2m.query();
      return m2m.hasNext();
  },
  
  _getAuthorisationBoundaryEntity: function(entityId) {
      var authBoundary = new GlideRecord('sn_irm_cont_auth_authorization_boundary');
      authBoundary.addQuery('entity', entityId);
      authBoundary.setLimit(1);
      authBoundary.query();
      if (authBoundary.next()) {
          return entityId;
      }
  	return '';
  },

  _getChildrenOfItemTable: function() {
      var itemTables = [];
      if (GlidePluginManager.isActive('sn_compliance') || GlidePluginManager.isActive('com.sn_compliance'))
          itemTables.push('sn_compliance_control');
      if (GlidePluginManager.isActive('sn_risk') || GlidePluginManager.isActive('com.sn_risk'))
          itemTables.push('sn_risk_risk');
      return itemTables;
  },

  _getChildrenOfItemToEntityTable: function() {
      var itemToEntityTables = [];
      if (GlidePluginManager.isActive('sn_compliance') || GlidePluginManager.isActive('com.sn_compliance'))
          itemToEntityTables.push('sn_compliance_m2m_control_entity');
      return itemToEntityTables;

  },

  type: 'ItemInheritanceBase'
};

Sys ID

54a665a0879219109e390d87cebb3593

Offical Documentation

Official Docs: