Name

sn_risk_advanced.ScriptFactorUtilsBase

Description

No description available

Script

var ScriptFactorUtilsBase = Class.create();
ScriptFactorUtilsBase.prototype = Object.extendsObject(AutomatedFactorUtils, {
  initialize: function() {},

  executeAndGetFactorResponse: function(factorResponse) {
      return this._executeAndGetFactorResponse(factorResponse);
  },

  executeAndSetResponsesForFactor: function(factor) {
      this._executeAndSetResponsesForFactor(factor);
  },

  validateScript: function(factor) {
      return this._validateScript(factor);
  },

  //Executes given factor and updates its score for all applicable responses with given filters
  executeFactorFilterResponses: function(factor, entityID, riskID, controlID, objectID) {
      this._executeFactorFilterResponses(factor, entityID, riskID, controlID, objectID);
  },

  createSupportingData: function(responseId, csvData, fileName) {
      this._createSupportingData(responseId, csvData, fileName);
  },

  _executeFactorFilterResponses: function(factor, entityID, riskID, controlID, objectID) {
      this._executeAndSetResponsesForFactor(factor, entityID, riskID, controlID, objectID);
  },

  _executeAndSetResponsesForFactor: function(factor, entityID, riskID, controlID, objectID) {
      var factorResponse = this._getResponsesToBeAssessed(factor);
      if (new sn_risk_advanced.RiskUtilities().isComplianceInstalled() && controlID)
          factorResponse.addQuery('control', controlID);
      if (entityID)
          factorResponse.addQuery('assessment_instance_id.entity_1', entityID);
      if (riskID)
          factorResponse.addQuery('assessment_instance_id.risk', riskID);
      if (objectID)
          factorResponse.addQuery('assessment_instance_id.source_record', objectID);
      factorResponse.query();
      while (factorResponse.next()) {
          if (!this.isFactorOptedOut(factorResponse)) {
              this._deleteAttachments('sn_risk_advanced_risk_assessment_instance_response', [factorResponse.getUniqueValue()]);
              var result = {};
              try {
                  result = this._executeAndGetFactorResponse(factorResponse);
              } catch (ex) {
                  result.error = ex;
                  this._setError(result, factor);
              }
              result.sourceRecordId = factorResponse.getUniqueValue();
              result.table = 'sn_risk_advanced_risk_assessment_instance_response';
              if (result.error) {
                  this._createException(result);
                  continue;
              }
              this._markExistingExceptionAsResolved(result);
              factorResponse.setValue('factor_response', result.score);
              factorResponse.update();
          }

      }
  },

  _validateScript: function(factor) {
      var evaluator = new GlideScopedEvaluator();
      evaluator.putVariable('result', {});
      if (factor.factor_usage == '1') {
          evaluator.putVariable('entity', '');
          evaluator.putVariable('risk', '');
          if (new sn_risk_advanced.RiskUtilities().isComplianceInstalled())
              evaluator.putVariable('control', '');
      } else {
          evaluator.putVariable('object_id', '');
      }
      evaluator.putVariable('responseId', '');
      evaluator.evaluateScript(factor, 'script', null);
      var result = evaluator.getVariable('result');
      if (result.error && result.error.message)
          result.error = result.error.message;
      return result;
  },

  _executeAndGetFactorResponse: function(factorResponse) {
      var result = {};
      var evaluator = new GlideScopedEvaluator();
      var inputs = {};
      if (factorResponse.factor.factor_usage == '1') {
          inputs.entity = factorResponse.assessment_instance_id.entity_1 + '';
          inputs.risk = factorResponse.assessment_instance_id.risk + '';

          evaluator.putVariable('entity', inputs.entity);
          evaluator.putVariable('risk', inputs.risk);

          if (new sn_risk_advanced.RiskUtilities().isComplianceInstalled()) {
              inputs.control = factorResponse.getValue('control');
              evaluator.putVariable('control', inputs.control);
          }

      } else {
          inputs.object_id = factorResponse.assessment_instance_id.source_record + '';
          evaluator.putVariable('object_id', inputs.object_id);
      }
      evaluator.putVariable('responseId', factorResponse.getUniqueValue());
      evaluator.putVariable('result', {});
      var factor = factorResponse.getElement('factor').getRefRecord();

      evaluator.evaluateScript(factor, 'script', null);
      result = evaluator.getVariable('result');
      this._setError(result, factor, inputs);
      if (gs.nil(result.error) && factor.user_response == '4')
          result.score = this._getReferenceCurrencyCode() + ";" + result.score;
      return result;
  },


  _createSupportingData: function(responseId, csvData, fileName) {
      var response = new GlideRecord('sn_risk_advanced_risk_assessment_instance_response');
      if (gs.nil(fileName))
          fileName = "SupportingData";
      fileName += ".csv";
      if (response.get(responseId) && !gs.nil(csvData)) {
          this._createCSVAttachment(response, csvData, fileName);
      }
  },

  type: 'ScriptFactorUtilsBase'
});

Sys ID

4a92fbb2775300102a272f589a1061f8

Offical Documentation

Official Docs: