Name

global.linkGenerator

Description

No description available

Script

var linkGenerator = Class.create();
linkGenerator.prototype = {
  initialize: function() {},
  
  /**
  * Get generated links for a record
  * @param links array List of link_generator_mapping sys_id's to get generated links for
  * @param recordTable String table name of the record to generate links for
  * @param recordSysId String sys_id of the record to generate links for
  * @return Array List of generated links for a record
  */
  getLinks: function(links, recordTable, recordSysId) {
  	var grToEvaluate = this._getCurrentRecord(recordTable, recordSysId);
  	var linksArray = [];
  	
  	if (!links || !links.length)
  		return linksArray;
  	
  	var linkMappingGr = new GlideRecord("link_generator_mapping");
  	linkMappingGr.addActiveQuery();
  	linkMappingGr.addQuery("sys_id", "IN", links.join(","));
  	linkMappingGr.query();
  	
  	while (linkMappingGr.next()) {
  		var link = this._createJSONRecord(linkMappingGr, grToEvaluate);
  		if (link)
  			linksArray.push(link);
  	}
  	
  	return linksArray;
  },
  
  getGeneratedURL:function(name){
  	var linkGeneratorService = new GlideRecord('link_generator_service');
  	
  	if (linkGeneratorService.get('value', name)) {
  		var grToEvaluate = this._getCurrentRecord('sys_user', gs.getUserID());
  		var params = this._getScriptValue(linkGeneratorService.sys_id.toString(), grToEvaluate);
  		
  		return this._getBaseURL(this._getSourceId(linkGeneratorService.sys_id)) + params;
  	}
  	
  	return "";
  },
  
  getGeneratedFormURL:function(tableName, recordId, fieldName, fieldValue, name){
  	var grToEvaluate = this._getCurrentRecord(tableName, recordId, fieldName, fieldValue);
  	
  	if (!grToEvaluate.canRead() || !grToEvaluate.getElement(fieldName).canRead())
  		return null;
  	
      var linkMapping = new GlideRecord('link_generator_mapping');
  	linkMapping.addActiveQuery();
      linkMapping.addQuery('map_table', tableName);
      linkMapping.addQuery('map_field_name', fieldName);
  	linkMapping.addQuery('link_generator.value', name);
      linkMapping.query();
  	
  	if (linkMapping.next())
  		return this._createJSONRecord(linkMapping, grToEvaluate).url;
  	
  	return "";
  },
  
  getActiveFormLinks: function(mappedfield, tableRecordSysId, value) {
      var tableName = mappedfield.substr(0, mappedfield.indexOf('.'));
      var field = mappedfield.substr(mappedfield.indexOf('.') + 1);
  	var grToEvaluate = this._getCurrentRecord(tableName, tableRecordSysId, field, value);
  	
  	if (!grToEvaluate.canRead() || !grToEvaluate.getElement(field).canRead())
  		return null;
  	
      var linkMapping = new GlideRecord('link_generator_mapping');
  	linkMapping.addActiveQuery();
      linkMapping.addQuery('map_table', tableName);
      linkMapping.addQuery('map_field_name', field);
  	linkMapping.addQuery('type', 'native_form');
      linkMapping.query();
  	
  	var listOfActivelinks = [];
      while (linkMapping.next())
          listOfActivelinks.push(this._createJSONRecord(linkMapping, grToEvaluate));
      
  	return listOfActivelinks;
  },
  
  addAttributesTofield: function(col, table) {
      var tableHierarchy = SNC.TableEditor.getTableAncestors(table);
      var tables = String(tableHierarchy);
      tables = tables.replace(/[\[\]']+/g, '');
      var parentTables = tables.split(',');
      var baseTable = parentTables[parentTables.length - 1];
      new global.updateAttributesLinkGenerator().addAttributesTofield(col, table, parentTables, baseTable);
  },
  
  addAttributes: function(col, table) {
      new global.updateAttributesLinkGenerator().addAttributesinSysDictionary(col, table);
  },
  
  _createJSONRecord: function(linkMapping, grToEvaluate) {
      var linkGenerator_sys_id = linkMapping.link_generator.toString();
      var parameters = this._getScriptValue(linkGenerator_sys_id, grToEvaluate);
      var baseUrl = this._getBaseURL(this._getSourceId(linkGenerator_sys_id));
      
      return {url: baseUrl + parameters, btnName: linkMapping.btn_name.toString()};
  },
  
  _getScriptValue: function(linkGenerator_sys_id, grToEvaluate) {
      var linkService = new GlideRecord('link_generator_service');
  	if (linkService.get(linkGenerator_sys_id)) {
          var scriptInputs = { current: grToEvaluate};
          
  		try {
              return String(new GlideScopedEvaluator().evaluateScript(linkService, 'script', scriptInputs));
          } catch (err) {
              gs.error("Error while evaluating the script " + err);
          }
      }
  	return "";
  },
  
  _getCurrentRecord: function(tableName, recordId, field, value) {
      if (tableName) {
  		var currentRecord = new GlideRecord(tableName);
  		
  		if (recordId != -1)
  			currentRecord.get(recordId);
  		else
  			currentRecord.initialize();
  		
  		if (field && value)
  			currentRecord.setValue(field, value);
  		
  		return currentRecord;
  	}
  	return "";
  },
  
  _getSourceId: function(linkGenerator_sys_id) {
      var linkService = new GlideRecord('link_generator_service');
      if (linkService.get(linkGenerator_sys_id))
          return linkService.system_name.toString();
  		
      return "";
  },
  
  _getBaseURL: function(sourceId) {
      var linkSource = new GlideRecord('link_generator_source');
      if (linkSource.get(sourceId))
          return linkSource.base_url.toString();
  	
      return "";
  },
  
  type: 'linkGenerator'
};

Sys ID

b220d4665b2003004bbf8379c0f91aa7

Offical Documentation

Official Docs: