Name

sn_rf.RFPillPickerUtils

Description

No description available

Script

var RFPillPickerUtils = Class.create();
RFPillPickerUtils.prototype = {
  initialize: function(table, sysId, ruleOutputIdentifierTable) {
      this.rfLogger = new RFLogger("RFPillPickerUtils");
      if (!table || !sysId || table != RFConstants.tables.SN_RF_RECOMMENDATION_EXPERIENCE) {
          return;
      }
      if (ruleOutputIdentifierTable && ruleOutputIdentifierTable != RFConstants.pillPickerVars.RULE_OUTPUT_IDENTIFIER_TABLE) {
          return;
      }
      var experienceService = new RFExperienceService(sysId);
      if (!experienceService.hasValidRecord()) {
          return;
      }
      var ruleService = experienceService.getRule();
      if (!ruleService) {
          return;
      }
      var evaluationTypeService = ruleService.getEvaluationType();
      if (!evaluationTypeService) {
          return;
      }

      this.experienceService = experienceService;
      this.ruleService = ruleService;
      this.evaluationTypeService = evaluationTypeService;
      this.table = table;
      this.sysId = sysId;
  },

  isValidRequest: function() {
      return this.experienceService && this.ruleService && this.evaluationTypeService;
  },

  getElements: function(elementLevel) {
      var response = {};
      if (!this.isValidRequest()) {
          this.rfLogger.logError("Invalid pill picker request");
          return response;
      }
      var elements;
      switch (elementLevel) {
          case RFConstants.pillPickerVars.BASE_ELEMENTS:
              elements = this._getBaseElementsMetaData();
              break;
          case RFConstants.pillPickerVars.RULE_OUTPUT_ELEMENTS:
              elements = this._getRuleOutputElementsMetaData();
              break;
          default:
              elements = {};
      }
      this._setColumnContext(response);
      this._setColumns(response, elements);
      return response;
  },

  _getBaseElementsMetaData: function() {
      var results = {};
      results[RFConstants.pillPickerVars.CONTEXT_RECORD_KEY] = this._getContextRecordMetaData();
      results[RFConstants.pillPickerVars.RULE_OUTPUT_KEY] = this._getRuleOutputMetaData();
      return results;
  },

  _getContextRecordMetaData: function() {
      var results = {};
      var tableName = this.ruleService.getTable();
      if (!tableName) {
          return results;
      }
      this._setName(results, RFConstants.pillPickerVars.CONTEXT_RECORD_KEY);
      this._setLabel(results, RFConstants.pillPickerVars.CONTEXT_RECORD_LABEL + ': ' + this._getTableDisplayValue(tableName));
      this._setType(results, RFConstants.pillPickerVars.TABLE);
      this._setFilterable(results, true);
      this._setReference(results, tableName);
      this._setReferenceTableLink(results, tableName);
      return results;
  },

  _getRuleOutputMetaData: function() {
      var results = {};
      this._setName(results, RFConstants.pillPickerVars.RULE_OUTPUT_KEY);
      this._setLabel(results, RFConstants.pillPickerVars.RULE_OUTPUT_LABEL);
      this._setFilterable(results, true);
      this._setReference(results, RFConstants.pillPickerVars.RULE_OUTPUT_IDENTIFIER_TABLE);
      return results;
  },

  _getRuleOutputElementsMetaData: function() {
      var response = {};
      var evaluationOutputSchemaResult = this.evaluationTypeService.getEvaluationTypeOutputSchema(this.ruleService);
      if (evaluationOutputSchemaResult && evaluationOutputSchemaResult[RFConstants.STATUS] == RFConstants.SUCCESS) {
          var schema = evaluationOutputSchemaResult[RFConstants.evaluatorVariable.SCHEMA] || [];
          var hiddenElements = evaluationOutputSchemaResult[RFConstants.evaluatorVariable.METADATA][RFConstants.evaluatorVariable.HIDDEN] || [];
          for (var schemaIdx = 0; schemaIdx < schema.length; schemaIdx++) {
              var elementDetail = schema[schemaIdx];
              if (hiddenElements.indexOf(elementDetail[RFConstants.pillPickerVars.NAME]) == -1) {
                  var element = {};
                  this._setName(element, elementDetail[RFConstants.pillPickerVars.NAME]);
                  this._setType(element, elementDetail[RFConstants.pillPickerVars.TYPE]);
                  this._setFilterable(element, true);
                  var label = elementDetail[RFConstants.pillPickerVars.LABEL];
                  if (elementDetail[RFConstants.pillPickerVars.TYPE] == RFConstants.pillPickerVars.REFERENCE) {
                      var referenceTable = elementDetail[RFConstants.pillPickerVars.REFERENCE_TABLE];
                      label = label + ': ' + this._getTableDisplayValue(referenceTable);
                      this._setReferenceTableLink(element, referenceTable);
                  }
                  this._setLabel(element, label);
                  response[elementDetail[RFConstants.pillPickerVars.NAME]] = element;
              }
          }
      } else {
          var errorMessage = gs.getMessage('Error occured while fetching output schema for {0} evaluation type. Error Details: {1}',
              [this.evaluationTypeService.getEvaluationTypeName(), evaluationOutputSchemaResult[RFConstants.ERROR_MESSAGE]]);
          this.rfLogger.logError(errorMessage);
          gs.addErrorMessage(errorMessage);
      }
      return response;
  },

  _setName: function(result, name) {
      result[RFConstants.pillPickerVars.NAME] = name;
  },

  _setLabel: function(result, label) {
      result[RFConstants.pillPickerVars.LABEL] = label;
  },

  _setType: function(result, type) {
      result[RFConstants.pillPickerVars.TYPE] = type;
  },

  _setFilterable: function(result, filterable) {
      result[RFConstants.pillPickerVars.FILTERABLE] = filterable;
  },

  _setDisabled: function(result, disabled) {
      result[RFConstants.pillPickerVars.DISABLED] = disabled;
  },

  _setReference: function(result, referenceTable) {
      result[RFConstants.pillPickerVars.REFERENCE] = referenceTable;
  },

  _setColumns: function(result, columns) {
      result[RFConstants.pillPickerVars.COLUMNS] = columns;
  },

  _setColumnContext: function(result) {
      result[RFConstants.pillPickerVars.TABLE] = this.table;
      result[RFConstants.pillPickerVars.TABLE_LABEL] = this.table;
      result[RFConstants.pillPickerVars.SYS_ID] = this.sysId;
  },

  _setReferenceTableLink: function(result, referenceTable) {
      var referenceTableLink = {};
      referenceTableLink[RFConstants.pillPickerVars.REFERENCE] = referenceTable;
      referenceTableLink[RFConstants.pillPickerVars.LINK] = RFConstants.pillPickerVars.BASE_REFERENCE_LINK + referenceTable;
      referenceTableLink[RFConstants.pillPickerVars.REFERENCE_DISPLAY_FIELD] = referenceTable;
      result[RFConstants.pillPickerVars.DOT] = referenceTableLink;
  },

  _getTableDisplayValue: function(tableName) {
      return new GlideRecord(tableName).getClassDisplayValue();
  },

  type: 'RFPillPickerUtils'
};

Sys ID

bbb9695b53033010e530ddeeff7b1205

Offical Documentation

Official Docs: