Name

sn_devstudio.FileTypeExternalFieldHandler

Description

No description available

Script

var FileTypeExternalFieldHandler = (function(appId) {

  function loadFields() {
  	var gr = new GlideRecord('sys_dictionary');
  	gr.addQuery('sys_class_name', 'sys_dictionary');
  	gr.addQuery('sys_scope', appId);
  	gr.addQuery('internal_type','!=','collection');
  	//gr.addQuery('sys_class_name', 'NOT IN', getExcludedTables());
  	gr.addQuery('name','NOT IN', getScopedTables(appId));
  	gr.addNotNullQuery('column_label');
  	gr.orderBy('sys_name');
  	gr.query();
  	var tableLabelMap = buildTableLabelMap(gr);
  	gr.query(); // Reissue the query (we don't yet have scoped access to reset the cursor)
  	var fileRecords =  _gr(gr).map(function(row) {
  		return fileForRecord(row, tableLabelMap);
  	});
  	fileRecords = _.filter(fileRecords, function(file){ return file;});
  	return fileRecords;
  }

  function buildTableLabelMap(gr) {
  	var tableNames = _gr(gr).map(function(row) { return row.getValue('name')});
  	return TableLabelMap.labelsForTables(tableNames);
  }

  function fileForRecord(record, tableLabelMap) {
      if (!isEligibleToUnload(record))
  		return false;
  	var sysId = record.getUniqueValue();
  	var tableName = tableLabelMap[record.name] || record.name;
  	var name = ((record.sys_name + '').trim() || record.getValue('column_label').trim() || sysId) + " [" + tableName + "]";
  	return FileTypeFileBuilder.newFile()
  		.withId(sysId)
  		.withName(name)
  		.withSysId(sysId)
  		.withAlternateName(record.getValue('name') + '.' + record.getValue('column_label'))
  		.build();
  }

  function isEligibleToUnload(record) {
  	var targetTable = record.getValue("name");
  	var targetField = record.getValue("element");

  	var aTableRecord = new GlideRecord(targetTable);
  	if (!aTableRecord.isValid() || !aTableRecord.isValidField(targetField))
  		return false;

  	var ed = aTableRecord.getElement(targetField).getED();
  	if (typeof ed.getFirstTableName != 'undefined')
  		return ed.getFirstTableName() == targetTable;

  return true;
}

  function getExcludedTables() {
  	return [
  			'sys_hub_action_input',
  			'sys_hub_action_output',
  			'sys_hub_step_ext_input',
  			'sys_hub_step_ext_output',
  			'sys_hub_flow_input',
  			'sys_hub_flow_output',
  			'sys_hub_flow_logic_ext_input'
  	];
  }

  function getScopedTables(appId) {
  	var tables = [];
  	var gr = new GlideRecord('sys_dictionary');
  	gr.addQuery('sys_scope', appId);
  	gr.addQuery('internal_type','collection');
  	gr.query();

  	while(gr.next()) {
  		tables.push(gr.getValue('sys_name'));
  	}

  	return tables.join(',');
  }

  return {
  	filesForKey : loadFields
  }

});

Sys ID

cce15503d7100200b6bddb0c825203ce

Offical Documentation

Official Docs: