Name

sn_grc.GRCFunctionalDomainUserActionUtilBase

Description

No description available

Script

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

  insertOrUpdateFunctionalDomainUserAction: function(table, record, prevFunctionalDomain) {
      var arrUtil = new global.ArrayUtil();
      var userModifiedFunctionalDomains = this._getUserModifiedFunctionalDomainsForRecord(record, prevFunctionalDomain, arrUtil);
      var existingFunctionalDomains = new GlideRecord('sn_grc_functional_domain_user_action');
      existingFunctionalDomains.addQuery('table_name', table);
      existingFunctionalDomains.addQuery('record_id', record.getUniqueValue());
      existingFunctionalDomains.query();
      if (existingFunctionalDomains.hasNext()) {
          this._deleteOrInsertFunctionalDomains(table, record.getUniqueValue(), existingFunctionalDomains, userModifiedFunctionalDomains, arrUtil);
      } else {
          this._insertManualFunctionalDomains(table, record.getUniqueValue(), userModifiedFunctionalDomains.removed, 'remove');
          this._insertManualFunctionalDomains(table, record.getUniqueValue(), userModifiedFunctionalDomains.added, 'add');

      }
  },

  getUserModifiedFunctionalDomainRecords: function(table, functionalDomain, actionType) {
      var manualAssociatedFunctionalDomains = new GlideRecord('sn_grc_functional_domain_user_action');
      manualAssociatedFunctionalDomains.addQuery('table_name', 'IN', table);
      manualAssociatedFunctionalDomains.addQuery('functional_domain', functionalDomain);
      manualAssociatedFunctionalDomains.addQuery('action_type', actionType);
      manualAssociatedFunctionalDomains.query();
      var recIds = [];
      while (manualAssociatedFunctionalDomains.next()) {
          recIds.push(manualAssociatedFunctionalDomains.getValue('record_id'));
      }
      return recIds;
  },

  _insertManualFunctionalDomains: function(table, recordId, functionalDomains, actionType) {
      var manualFunctionalDomains = new GlideRecord('sn_grc_functional_domain_user_action');
      for (var i = 0; i < functionalDomains.length; i++) {
          manualFunctionalDomains.initialize();
          manualFunctionalDomains.setValue('table_name', table);
          manualFunctionalDomains.setValue('record_id', recordId);
          manualFunctionalDomains.setValue('functional_domain', functionalDomains[i]);
          manualFunctionalDomains.setValue('action_type', actionType);
          manualFunctionalDomains.insert();
      }
  },

  _getUserModifiedFunctionalDomainsForRecord: function(record, prevFunctionalDomains, arrUtil) {
      var currentTags = [];
      if (record.functional_domain)
          currentTags = record.functional_domain.split(',');
      if (prevFunctionalDomains)
          prevFunctionalDomains = prevFunctionalDomains.split(',');
      else
          prevFunctionalDomains = [];
      var removedFunctionalDomains = arrUtil.diff(prevFunctionalDomains, currentTags);
      var addedFunctionalDomains = arrUtil.diff(currentTags, prevFunctionalDomains);
      var userAssociatedFunctionalDomains = {
          "removed": removedFunctionalDomains,
          "added": addedFunctionalDomains
      };
      return userAssociatedFunctionalDomains;

  },

  _deleteOrInsertFunctionalDomains: function(table, record, existingFunctionalDomains, userModifiedFunctionalDomains, arrUtil) {
      var deleteExistingEntries = [];
      var removedFunctionalDomains = [];
      var addedFunctionalDomains = [];
      while (existingFunctionalDomains.next()) {
          if (arrUtil.contains(userModifiedFunctionalDomains.removed, existingFunctionalDomains.getValue("functional_domain"))) {
              removedFunctionalDomains.push(existingFunctionalDomains.functional_domain + '');
              deleteExistingEntries.push(existingFunctionalDomains.getUniqueValue());
          }
          if (arrUtil.contains(userModifiedFunctionalDomains.added, existingFunctionalDomains.getValue("functional_domain"))) {
              addedFunctionalDomains.push(existingFunctionalDomains.functional_domain + '');
              deleteExistingEntries.push(existingFunctionalDomains.getUniqueValue());
          }
      }
      if (deleteExistingEntries.length > 0)
          this._deleteExistingUserAction(table, deleteExistingEntries);
      removedFunctionalDomains = arrUtil.diff(userModifiedFunctionalDomains.removed, removedFunctionalDomains);
      addedFunctionalDomains = arrUtil.diff(userModifiedFunctionalDomains.added, addedFunctionalDomains);
      this._insertManualFunctionalDomains(table, record, addedFunctionalDomains, 'add');
      this._insertManualFunctionalDomains(table, record, removedFunctionalDomains, 'remove');
  },

  _deleteExistingUserAction: function(table, deleteExistingEntries) {
      var existingUserActions = new GlideRecord('sn_grc_functional_domain_user_action');
      existingUserActions.addQuery("sys_id", "IN", deleteExistingEntries);
      existingUserActions.query();
      if (existingUserActions.hasNext())
          existingUserActions.deleteMultiple();
  },

  type: 'GRCFunctionalDomainUserActionUtilBase'
};

Sys ID

2c546bada397011004685a3716fcda71

Offical Documentation

Official Docs: