Name

global.ATFRelatedListUtil

Description

No description available

Script

var ATFRelatedListUtil = Class.create();
ATFRelatedListUtil.prototype = Object.extendsObject(AbstractAjaxProcessor,{

  process: function() {
  	var name = this.getParameter('sysparm_name');
  	if (name == 'getRelationshipTableName')
  		return this.getRelationshipTableName(this.getParameter('sysparm_relationship_id'));
  	else if (name == 'getRelatedLists')
  		return JSON.stringify(this.getRelatedLists(this.getParameter('sysparm_table')));
  	else if (name == 'getRelatedListLabels')
  		return this.getRelatedListLabels(this.getParameter('sysparm_table'), this.getParameter('sysparm_related_list_names'));
  },

  /**
   * Returns the table name of the given relationship
   */
  getRelationshipTableName: function(relationshipSysId) {
  	gs.log("ATFRelatedListUtil.getRelationshipTableName called with relationship sys_id: " + relationshipSysId);
  	var gr = new GlideRecord("sys_relationship");
  	if (!gr.get(relationshipSysId)) {
  		gs.log("Unable to find a relationship with sys_id: " + relationshipSysId);
  		return null;
  	}

  	if (!gs.nil(gr.basic_query_from))
  		return gr.basic_query_from;

  	// not all relationships use basic_query_from
  	return GlideRhinoHelper.evaluateAsString(gr.query_from);
  },

  /**
   * Returns the reference qualifier for related list 'list action' UI actions
   */
  getListActionRefQual: function(tableName) {
  	if (gs.nil(tableName))
  		return "table=global^list_action=true^active=true";

  	var tableHierarchy = GlideDBObjectManager.get().getTables(tableName).toString();
  	tableHierarchy = tableHierarchy.substring(1, tableHierarchy.length() - 1);
  	tableHierarchy += ", global";
  	return "tableIN" + tableHierarchy + "^list_action=true^active=true";
  },

  /**
   * Given a table and a comma-separated string of related list names,
   * returns a comma-separated string of the related list labels
   */
  getRelatedListLabels: function(tableName, relatedListNames) {
  	if (gs.nil(tableName) || gs.nil(relatedListNames))
  		return relatedListNames;

  	var allRelatedLists = this.getRelatedLists(tableName);
  	var labels = [];
  	var relatedLists = relatedListNames.split(',');
  	for (var i = 0; i < relatedLists.length; i += 1)
  		labels.push(this.getRelatedListLabel(relatedLists[i], allRelatedLists));

  	return labels.join(', ');
  },

  /**
   * Returns the label of a given related list
   */
  getRelatedListLabel: function(relatedListName, allRelatedLists) {
  	for (var l in allRelatedLists) {
  		if (allRelatedLists[l].value == relatedListName)
  			return allRelatedLists[l].label;
  	}

  	gs.log("Unable to find related list label for related list: " + relatedListName);
  	return relatedListName;
  },

  /**
   * Populates answer object in the context with an ordered list of related lists available on the given table.
   * Used to populate
   */
  getRelatedListsForSlushbucket: function(tableName) {
  	if (!tableName)
  		return;

  	var cl = this.getRelatedListChoices(tableName);
  	for (var i = 0; i < cl.size(); i += 1) {
  		var c = cl.getChoice(i);
  		answer.add(c.getValue(), c.getLabel());
  	}
  },

  /**
   * Returns an object which is an ordered list of related lists available on the given table.
   */
  getRelatedLists: function(tableName) {
  	var answer = {};
  	if (!tableName)
  		return answer;

  	var cl = this.getRelatedListChoices(tableName);
  	for (var i = 0; i < cl.size(); i += 1) {
  		var c = cl.getChoice(i);
  		answer[i] = { 'value': c.getValue(), 'label': c.getLabel() };
  	}

  	return answer;
  },

  /**
   * Returns a ChoiceList containing the available related lists on the given table.
   */
  getRelatedListChoices: function(tableName) {
  	var cachedRelatedListChoices = GlideController.getGlobal("atf_cached_related_list_choices");
  	if (cachedRelatedListChoices && cachedRelatedListChoices.tableName == tableName)
  		return cachedRelatedListChoices.choices;

  	var cls = new GlideChoiceListSet();
  	if (!tableName)
  		return cls.getColumns();

  	cls.setColumns(GlideSysForm.getRelatedTables(tableName));
  	var gru = new GlideRelationshipUtil();
  	gru.addChoices(tableName, cls);
  	cls.sortColumns();
  	var result = cls.getColumns();

  	GlideController.putGlobal("atf_cached_related_list_choices", {tableName: tableName, choices: result});
  	return result;
  },

  type: 'ATFRelatedListUtil'
});

Sys ID

10bbfbcf531332007e7829cac2dc34e7

Offical Documentation

Official Docs: