Name

sn_mab_api.ConfigKeyFactory

Description

No description available

Script

var ConfigKeyFactory = Class.create();

ConfigKeyFactory.prototype = {
  initialize: function() {
  },

  /**
   *
   * @param tableName {String}
   * @return {ConfigKeyGenerator}
   */
  getGenerator: function(tableName) {
      if (tableName === 'sys_sg_button') {
          return new ConfigKeyButtonGenerator();
      } else if (tableName === 'sys_sg_native_client') {
          return new ConfigKeyNativeClientGenerator();
      } else {
          return new ConfigKeyGenerator(tableName);
      }
  },

  type: 'ConfigKeyFactory'
};

function ConfigKeyGenerator(tableName) {
  this.tableName = tableName;
  this.typeMap = {
      // screens
      sys_sg_applet_launcher: 'Launcher screen',
      sys_sg_list_screen: 'List screen',
      sys_sg_form_screen: 'Record screen',
      sys_sg_browser_screen: 'Mobile web screen',
      sys_sg_parameter_screen: 'Input form screen',
      sys_sg_map_screen: 'Map screen',
      sys_sg_calendar_screen: 'Calendar screen',
      sys_sg_chart_screen: 'Chart screen',
      // Icons and Cards
      sys_sg_view_config: 'Card',
      sys_sg_view_template: 'Card template',
      sys_sg_item_view: 'Legacy card',
      sys_sg_icon: 'Icon',
      // Data Items and Relationship Data Items
      sys_sg_data_item: 'Data item',
      sys_sg_relationship_data_item: 'Relationship data item'
  };

  this.configKeyCache = new sn_mab_api.ConfigKeyCache();
}

/**
*
* @param gr {GlideRecord}
* @param node {{}}
* @return {TreeConfigurationNode}
*/
ConfigKeyGenerator.prototype.getTreeConfiguration = function(gr, node) {
  var classNameOverride = this.getOverrideField(node,'sys_class_name');
  var configKey = classNameOverride ? classNameOverride : gr.getValue('sys_class_name');
  return this.configKeyCache.getTreeConfigByConfigKeys([configKey]);
};

/**
*
* @param sysId {String}
* @return {TreeConfigurationNode}
*/
ConfigKeyGenerator.prototype.getTreeConfigurationViaSysId = function(sysId) {
  var gr = new GlideRecord(this.tableName);
  if (!gr.get(sysId))
      return undefined;

  var configKey = gr.getValue('sys_class_name') || this.tableName;
  return this.configKeyCache.getTreeConfigByConfigKeys([configKey]);
};

/**
*
* @param gr {GlideRecord}
* @return {String}
*/
ConfigKeyGenerator.prototype.getType = function(gr) {
  var className = gr.getValue('sys_class_name');

  return this.typeMap[className] ? this.typeMap[className] : gr.getClassDisplayValue();
};

ConfigKeyGenerator.prototype.getTypeForRecord = function(record, table) {
  var className = record.sys_class_name ? record.sys_class_name.value : table;

  if (this.typeMap[className])
      return this.typeMap[className];

  return ClassLabelGetterFactory.getInstance().getLabel(record, table);
}

ConfigKeyGenerator.prototype.getOverrideField = function(node, field) {
  if (node && node[field])
      return node[field];

  return undefined;
}

function ConfigKeyButtonGenerator() {
  this.tableName = 'sys_sg_button';
}

// extend ConfigKeyGenerator
ConfigKeyButtonGenerator.prototype = new ConfigKeyGenerator();

/**
*
* @param sysId {String}
* @return {TreeConfigurationNode}
*/
ConfigKeyButtonGenerator.prototype.getTreeConfigurationViaSysId = function(sysId) {
  var gr = new GlideRecord(this.tableName);
  if (!gr.get(sysId))
      return;

  return this.getTreeConfiguration(gr, {});
};

/**
*
* @param gr {GlideRecord}
* @param node {{}}
* @return {TreeConfigurationNode}
*/
ConfigKeyButtonGenerator.prototype.getTreeConfiguration = function(gr, node) {
  var typeOverride = this.getOverrideField(node,'type');
  var contextOverride = this.getOverrideField(node,'context');
  var type = typeOverride ? typeOverride : gr.getValue('type');
  var context = contextOverride ? contextOverride : gr.getValue('context');

  var possibleConfigKeys = [
      this.tableName + '_' + type + '_' + context,
      this.tableName + '_' + type,
      this.tableName
  ];

  return this.configKeyCache.getTreeConfigByConfigKeys(possibleConfigKeys);
};

/**
*
* @param gr {GlideRecord}
* @return {String}
*/
ConfigKeyButtonGenerator.prototype.getType = function(gr) {
  var type = gr.getValue('type');

  if (type === 'write_back') {
      return 'Action';
  } else if (type === 'redirection') {
      return 'Navigation';
  } else {
      return 'Smart button';
  }
};

ConfigKeyButtonGenerator.prototype.getTypeForRecord = function(record) {
  return record.type.displayValue;
}

function ConfigKeyNativeClientGenerator() {
  this.tableName = 'sys_sg_native_client';
}
// extend ConfigKeyGenerator
ConfigKeyNativeClientGenerator.prototype = new ConfigKeyGenerator();

/**
*
* @param gr {GlideRecord}
* @return {String}
*/
ConfigKeyNativeClientGenerator.prototype.getType = function(gr) {
  var type =  gr.getValue('type');

  // Capitalize First Letter
  if (type) {
      return type.charAt(0).toUpperCase() + type.slice(1);
  }

  return 'Unknown Native Client';
}

ConfigKeyNativeClientGenerator.prototype.getTypeForRecord = function(record) {
  var type =  record.type.value;

  // Capitalize First Letter
  if (type) {
      return type.charAt(0).toUpperCase() + type.slice(1);
  }

  return 'Unknown Native Client';
}

var ClassLabelGetterFactory = (function(){
  function ClassLabelGetter() {}

  var displayValueCache = {};
  var instance;

  function getLabel(record, table) {
      var sysId = record.sys_id.value;
      var className = record.sys_class_name ? record.sys_class_name.value : table;
      
      if (displayValueCache[className])
          return displayValueCache[className];

      var gr = new GlideRecord(table);
      if (!gr.isValid())
          throw new ErrorHandler().getNotFoundError('Does not exist for table: ' + table);

      gr.addQuery('sys_id', sysId);
      gr.query();
      displayValueCache[className] = gr.getClassDisplayValue();
      return displayValueCache[className];
  }

  return {
      getInstance: function() {
          if (!instance) {
              instance = new ClassLabelGetter();
              instance.getLabel = this.getLabel;
              delete instance.constructor;	
          }
          return instance;
      },
      getLabel: getLabel
  };
})();

Sys ID

48f53a89b75620108223e126de11a99c

Offical Documentation

Official Docs: