Name

sn_rf.RFEvaluationTypeService

Description

Class for sn_rf_evaluation_type table utility functions.

Script

var RFEvaluationTypeService = Class.create();
RFEvaluationTypeService.prototype = {
  tableName: RFConstants.tables.SN_RF_EVALUATION_TYPE,

  initialize: function(grOrSysId) {
      this.rfLogger = new RFLogger('RFEvaluationTypeService');
      if (grOrSysId && grOrSysId.sys_class_name == this.tableName) {
          this.currentRecord = grOrSysId;
      } else if (grOrSysId) {
          var gr = new GlideRecord(this.tableName);
          if (gr.get(grOrSysId)) {
              this.currentRecord = gr;
          }
      }
  },

  hasValidRecord: function() {
      return this.currentRecord && this.currentRecord.sys_class_name == this.tableName;
  },

  getEvaluationTypeName: function() {
      return this.currentRecord.getValue(RFConstants.fields.SN_RF_EVALUATION_TYPE_NAME);
  },

  getEvaluationScript: function() {
      return this.currentRecord.getValue(RFConstants.fields.SN_RF_EVALUATION_TYPE_EVALUATION_SCRIPT);
  },

  getEvaluationScriptAPIName: function() {
      return this.currentRecord[RFConstants.fields.SN_RF_EVALUATION_TYPE_EVALUATION_SCRIPT][RFConstants.fields.SYS_SCRIPT_INCLUDE_API_NAME];
  },

  getEvaluationTypeOutputSchema: function(rule, inputs) {
      var apiName = this.getEvaluationScriptAPIName();
      var funcName = RFConstants.evaluatorFunction.GET_EVALUATION_OUTPUT_SCHEMA;
      var script = RFConstants.evaluatorVariable.RESULT + ' = new ' + apiName + '().' + funcName + '(param);';
      var param = {};
      var scriptInputs = {};
      param[RFConstants.evaluatorVariable.INPUTS] = inputs || rule.getEvaluationTypeInputs();
      scriptInputs[RFConstants.evaluatorVariable.PARAM] = param;
      var res = RFUtils.evaluateScript(script, scriptInputs, RFConstants.evaluatorVariable.RESULT);
      if (res.status == RFConstants.EXCEPTION) {
          this.rfLogger.logError('Error executing script ' + script + '. Error: ' + res.error.message, 'RFEvaluationTypeService - getEvaluationTypeOutputSchema');
          return {
              'status': RFConstants.ERROR,
              'errorCode': 40001,
              'errorMessage': res.error.message
          };
      }
      return res;
  },

  getEvaluationTypeOutput: function(rule, contextRecord) {
      var inputs = rule.getEvaluationTypeInputs();
      var outputSchema = this.getEvaluationTypeOutputSchema(rule, inputs);
      if (outputSchema && outputSchema.status == RFConstants.SUCCESS) {
          var metaData = outputSchema.metaData;
          var confidenceFieldName = metaData && metaData[RFConstants.evaluatorVariable.CONFIDENCE];
          var uniqueKeys = metaData && metaData[RFConstants.evaluatorVariable.UNIQUE_KEY];
          var hidden = (metaData && metaData[RFConstants.evaluatorVariable.HIDDEN]) || [];
          var apiName = this.getEvaluationScriptAPIName();
          var funcName = RFConstants.evaluatorFunction.GET_EVALUATION_OUTPUTS;
          var script = RFConstants.evaluatorVariable.RESULT + ' = new ' + apiName + '().' + funcName + '(param);';
          var param = {};
          var scriptInputs = {};
          param[RFConstants.evaluatorVariable.INPUTS] = inputs;
          param[RFConstants.evaluatorVariable.CONTEXT_RECORD] = contextRecord;
          scriptInputs[RFConstants.evaluatorVariable.PARAM] = param;
          var output = RFUtils.evaluateScript(script, scriptInputs, RFConstants.evaluatorVariable.RESULT);

          if (output && output.status == RFConstants.SUCCESS && output.evaluationOutputs) {
              var evaluationOutputs = output.evaluationOutputs;
              var validEvaluationOutputs = [];
              var schema = outputSchema.schema || [];
              for (var idx1 = 0; idx1 < evaluationOutputs.length; idx1++) {
                  var evaluationOutput = evaluationOutputs[idx1];
                  var confidenceScore = evaluationOutput[confidenceFieldName] || 100;
                  evaluationOutput[RFConstants.evaluatorVariable.CONFIDENCE_INTERNAL] = confidenceScore;
                  evaluationOutput[RFConstants.evaluatorVariable.UNIQUE_KEYS_INTERNAL] = uniqueKeys;
                  evaluationOutput[RFConstants.evaluatorVariable.HIDDEN_INTERNAL] = hidden;

                  var isEvaluationOutputValid = true;
                  for (var idx2 = 0; idx2 < schema.length; idx2++) {
                      var schemaElement = schema[idx2];
                      if (schemaElement.type == RFConstants.evaluationOutputTypes.REFERENCE) {
                          var table = schemaElement.referenceTable;
                          if (table) {
                              var schemaElementName = schemaElement.name;
                              //Check if the record is accessible to logged-in user. Skip ACLs check if the schema element is hidden.
                              if (hidden.indexOf(schemaElementName) != -1) {
                                  var gr = new GlideRecord(table);
                              } else {
                                  gr = new GlideRecordSecure(table);
                              }
                              if (gr.get(evaluationOutput[schemaElementName])) {
                                  evaluationOutput[schemaElementName] = gr;
                              } else {
                                  isEvaluationOutputValid = false;
                                  break;
                              }
                          }
                      }
                  }
                  if (isEvaluationOutputValid) {
                      validEvaluationOutputs.push(evaluationOutput);
                  }
              }
              output.evaluationOutputs = validEvaluationOutputs;
          }

          if (output.status == RFConstants.EXCEPTION) {
              this.rfLogger.logError('Error executing script ' + script + '. Error: ' + output.error.message, 'RFEvaluationTypeService - getEvaluationTypeOutput');
              return {
                  'status': RFConstants.ERROR,
                  'errorCode': 40001,
                  'errorMessage': output.error.message
              };
          }
          return output;
      }
  },

  type: 'RFEvaluationTypeService'
};

Sys ID

c3f1e56b53c33010e530ddeeff7b1218

Offical Documentation

Official Docs: