Name

sn_rf.RFPillParserUtils

Description

No description available

Script

var RFPillParserUtils = Class.create();
RFPillParserUtils.prototype = {
  initialize: function() {
      this.EXPR_START = "{{";
      this.EXPR_END = "}}";
      this.CONTEXT_RECORD_EXPR_START = this.EXPR_START + RFConstants.pillPickerVars.CONTEXT_RECORD_KEY;
      this.CONTEXT_RECORD_EXPR = this.CONTEXT_RECORD_EXPR_START + this.EXPR_END;
      this.RULE_OUTPUT_EXPR_START = this.EXPR_START + RFConstants.pillPickerVars.RULE_OUTPUT_KEY;
      this.RULE_OUTPUT_EXPR = this.RULE_OUTPUT_EXPR_START + this.EXPR_END;
  },

  getParsedValue: function(parameterizedInputValue, contextGr, ruleOutputObject, getGlideRecord) {
      var parsedInputValue = parameterizedInputValue;
      var pattern = /(\{{[a-z0-9_.-?]*}})/gi;
      try {
          var pillExpressions = parameterizedInputValue ? parameterizedInputValue.match(pattern) : [];
          if (gs.nil(pillExpressions) || !contextGr || !ruleOutputObject) {
              return parsedInputValue;
          }
          for (var i = 0; i < pillExpressions.length; i++) {
              var pillExpr = pillExpressions[i];
              var pillExprParsedValue;
              if (pillExpr.indexOf(this.CONTEXT_RECORD_EXPR_START) != -1) {
                  pillExprParsedValue = this._getParsedInputFromContextRecord(pillExpr, contextGr);
              } else if (pillExpr.indexOf(this.RULE_OUTPUT_EXPR_START) != -1) {
                  pillExprParsedValue = this._getParsedInputFromRuleOutputs(pillExpr, ruleOutputObject);
              }
              parsedInputValue = this._getFinalParsedInputValue(pillExpr, pillExprParsedValue, parsedInputValue, parameterizedInputValue, getGlideRecord);
          }
      } catch (e) {
          var inputs = 'parameterizedInputValue: ' + parameterizedInputValue +
              ', contextGr: ' + contextGr.sys_id +
              ', ruleOutputObject: ' + JSON.stringify(ruleOutputObject) +
              ', getGlideRecord: ' + getGlideRecord;
          new RFLogger('RFPillParserUtils').logError('Error executing getParsedValue, Inputs - ' + inputs + ', Error: ' + e);
      }
      return parsedInputValue;
  },

  _getParsedInputFromContextRecord: function(pillExpr, contextGr) {
      if (pillExpr == this.CONTEXT_RECORD_EXPR) {
          return contextGr;
      }
      var pillVariableStr = pillExpr.substring(this.CONTEXT_RECORD_EXPR_START.length + 1, pillExpr.lastIndexOf(this.EXPR_END));
      var replaceValue = this._getReplaceValueFromGr(contextGr, pillVariableStr);
      var parsedInput = gs.nil(replaceValue) ? ' ' : replaceValue;
      return parsedInput;
  },

  _getParsedInputFromRuleOutputs: function(pillExpr, ruleOutputObject) {
      if (pillExpr == this.RULE_OUTPUT_EXPR) {
          return JSON.stringify(ruleOutputObject);
      }
      var pillVariableStr = pillExpr.substring(this.RULE_OUTPUT_EXPR_START.length + 1, pillExpr.lastIndexOf(this.EXPR_END));
      var pillVariables = pillVariableStr ? pillVariableStr.split(".") : [];
      var parsedInput = ' ';
      if (pillVariables.length == 1) {
          parsedInput = ruleOutputObject[pillVariableStr];
      } else if (pillVariables.length > 1 && this._isValidRecord(ruleOutputObject[pillVariables[0]])) {
          var lookupStr = pillVariableStr.substring(pillVariables[0].length + 1);
          var replaceValue = this._getReplaceValueFromGr(ruleOutputObject[pillVariables[0]], lookupStr);
          parsedInput = gs.nil(replaceValue) ? ' ' : replaceValue;
      }
      return parsedInput;
  },

  _getFinalParsedInputValue: function(pillExpr, pillExprParsedValue, parsedInputValue, parameterizedInputValue, getGlideRecord) {
      if (this._isValidRecord(pillExprParsedValue)) {
          pillExprParsedValue = getGlideRecord ? pillExprParsedValue : pillExprParsedValue.getDisplayValue();
      }
      if (pillExpr.length == parameterizedInputValue.length) {
          return pillExprParsedValue;
      }
      return parsedInputValue.replace(pillExpr, pillExprParsedValue);
  },

  _getReplaceValueFromGr: function(gr, lookupStr) {
      var replaceValue = gr.getElement(lookupStr).getRefRecord();
      if (!gs.nil(replaceValue)) {
          return replaceValue.isValidRecord() ? replaceValue : null;
      }
      return gr.getDisplayValue(lookupStr);
  },

  _isValidRecord: function(record) {
      return !gs.nil(record) && record.isValidRecord;
  },

  type: 'RFPillParserUtils'
};

Sys ID

c662e00e53233010e530ddeeff7b1282

Offical Documentation

Official Docs: