Name

sn_oe_sfs.CIPropsUtil

Description

No description available

Script

var CIPropsUtil = Class.create();
CIPropsUtil.prototype = {
  initialize: function() {
      this.ciPagePropsMetadata = new sn_oe_sfs.CIListRecordPropsMetadata();
      this.acePagePropsUtil = new sn_oe_sfs.CIListAndRecordPagePropsUtil();
  },

  _getProps: function(table) {
      var response = {
          'entry': '',
          'supported': false,
          'heading': '',
          'title': '',
          'subheading': '',
          'filter': '',
          'view': ''
      };
      var _self = this;
      //check whether the table is mapped
      if (this.ciPagePropsMetadata.TABLE_METADATA[table]) {
          var _tableMetaData = _self.ciPagePropsMetadata.TABLE_METADATA[table];
          response.supported = true;
          response.entry = _self._getEntryPage(_tableMetaData.entry);
          response.heading = _tableMetaData.heading;
          response.title = _tableMetaData.title;
          response.subheading = _tableMetaData.subHeading;
          response.list_filter = _tableMetaData.list_filter;
          response.list_view = _tableMetaData.list_view;
          response.form_filter = _tableMetaData.form_filter;
          response.from_view = _tableMetaData.from_view;
          response.related_list_table = _tableMetaData.related_list_table;
          response.custom_form = _tableMetaData.custom_form;
          response.custom_list = _tableMetaData.custom_list;
      } else {
          response.supported = false;
          response.entry = _self._getEntryPage();
          response.heading = _self.acePagePropsUtil._getTableName(table);
          response.title = response.heading;
          response.subheading = '';
          response.list_filter = '';
          response.list_view = '';
          response.form_filter = '';
          response.from_view = '';
          response.related_list_table = '';
          response.custom_form = '';
          response.custom_list = '';
      }
      return response;
  },

  _getEntryPage: function(route) {
      var entries = this.ciPagePropsMetadata.CRUMBS;
      var defaultLandingRoute = this.ciPagePropsMetadata.DEFAULT_LANDING_ROUTE;
      if (route && entries[route]) return entries[route];
      return entries[defaultLandingRoute];
  },

  _getRelatedListBreadcrumbPath: function(type, table, sysId) {
      var _self = this;
      switch (type) {
          case 'list':
              return _self.ciPagePropsMetadata.CUSTOM_TAG + '#' + _self.ciPagePropsMetadata.DEFAULT_LIST + '#' + table;
          case 'form':
              var _formRoute = _self.ciPagePropsMetadata.TABLE_METADATA[table] && _self.ciPagePropsMetadata.TABLE_METADATA[table].custom_form;
              return _self.ciPagePropsMetadata.CUSTOM_TAG + '#' + (_formRoute || _self.ciPagePropsMetadata.DEFAULT_FORM) + '#' + (_formRoute ? '' : table) + '#' + sysId;
          default:
              return '';
      }
  },
  _generateBreadcrumbs: function(props, table, sysId, query, rlt) {
      var breadcrumbs = [],
          _self = this;
      var title = props.title;
      if (props.related_list_table) {
          var splittedRlt = props.related_list_table.split('.');
          var rltField = splittedRlt[0];
          var rltTable = splittedRlt[1];
          var rltRecord = _self.acePagePropsUtil._getRelatedListParentTableRecordSysId(table, sysId, query, rltField);
          breadcrumbs = _self._generateBreadcrumbs(_self._getProps(rltTable), rltTable, rltRecord, null, true).breadcrumbs;
      } else {
          breadcrumbs.push(props.entry);
          // Set the list view page of the table only for supported fields
          if (props.supported) {
              breadcrumbs.push({
                  page: rlt ? _self._getRelatedListBreadcrumbPath('list', table, sysId) : (props.custom_list || _self.ciPagePropsMetadata.DEFAULT_LIST),
                  label: title,
                  filter: props.list_filter,
                  view: props.list_view
              });
          }
      }

      // Set the table's record form page (iff sysId exists)
      if (sysId) {
          title = (_self.acePagePropsUtil._isNewRecord(sysId)) ? _self.ciPagePropsMetadata.DEFAULT_NEW_RECORD_LABEL : (_self.acePagePropsUtil._getRecordDisplayValue(table, sysId) || _self.ciPagePropsMetadata.DEFAULT_EMPTY_RECORD_LABEL);
          breadcrumbs.push({
              page: rlt ? _self._getRelatedListBreadcrumbPath('form', table, sysId) : _self.ciPagePropsMetadata.DEFAULT_FORM,
              label: title,
              filter: props.form_filter,
              view: props.form_view
          });
      }
      return {
          'breadcrumbs': breadcrumbs,
          'title': title
      };
  },

  getBreadcrumbs: function(table, sysId, query, view) {
      var _props = this._getProps(table);
      return this._generateBreadcrumbs(_props, table, sysId, query, false).breadcrumbs;
  },
  
  _fetchDefaultValueForScript: function(table, field) {
      var dictionaryGr = new GlideRecord('sys_dictionary');
      dictionaryGr.addQuery('name', table.toString());
      dictionaryGr.addQuery('element', field);
      dictionaryGr.query();
      if (dictionaryGr.next()) return dictionaryGr.getValue('default_value');
      return '';
  },

  _fetchValuesForField: function(gr, fieldMetaData, fieldType, isNewRecord) {
      var field = fieldMetaData.field_name,
          _self = this;
      switch (fieldType) {
          case 'script':
              return isNewRecord ? _self._fetchDefaultValueForScript(gr.getTableName(), fieldMetaData.field_name) : gr.getValue(field);
          case 'slushbucket':
              //Input: Comma separated <sys_id>,
              //Output: [{id: <sys_id>, label: <display_value>}, ...]
              if (isNewRecord) return [];
              var userData = gr.getValue(field),
                  userDataFormatted = [];
              if (!userData) return null;
              userData = userData.split(',');
              fieldMetaData.field_data_source.forEach(function(group) {
                  if (userData.indexOf(group.id) != -1) userDataFormatted.push(group);
              });
              return userDataFormatted;
      }
      return null;
  },
  /*
   * Get all configured fields which are not supported by UIB Record Page Tabs/Form component
   * params:
   * table {string}: Name of the table
   * recordSysId {string} SysId of the record
   * preFetchUserData {boolean} If true, the field is pre-populated with the field data. The data is available under 'field_data' key
   */
  getFields: function(table, recordSysId, preFetchUserData) {
      try {
          if (!table || !recordSysId) return null;
          var allFields = this.ciPagePropsMetadata.SUPPORTED_CUSTOM_FIELDS[table];
          if (!preFetchUserData || !allFields) return allFields;
          var tableGr = new GlideRecord(table);
          if (!this.acePagePropsUtil._isNewRecord(recordSysId) && (!tableGr.get(recordSysId) || !tableGr.canRead())) return allFields;
          for (var fieldType in allFields) {
              allFields[fieldType].field_data = this._fetchValuesForField(tableGr, allFields[fieldType], fieldType, this.acePagePropsUtil._isNewRecord(recordSysId));
          }
          return allFields;
      } catch (e) {
          return {};
      }
  },

  type: 'CIPropsUtil'
};

Sys ID

6bf8c900eb124110da1861c59c52283c

Offical Documentation

Official Docs: