Name

global.RecordToHTML

Description

Utility class to turn a record in a table into HTML.

Script

gs.include("PrototypeServer");

/**
* Utility class to turn a record in a table into HTML.
* 
* Tom Dilatush tom.dilatush@service-now.com
*/
var RecordToHTML = Class.create();

RecordToHTML.prototype = {
  
  /*
   * Initializes a new instance of this class.
   * 
   * table: the name of the table from which this record comes
   * sys_id: the sys_id of the record
   * pattern: the pattern of the string we want to generate.  The pattern may include ${} escapes for fields whose values should
   *          be included.  For instance, the pattern "sys_id: ${sys_id}" would substitute the actual sys_id's value for the escape.
   * link: a boolean, true if the pattern is to be surrounded by an "a" tag to link to the object in question.
   */
  initialize: function(table, sys_id, pattern, link) {
      this.table = table;
      this.sys_id = sys_id;
      this.pattern = pattern;
      this.values = {};
      this.link = link;
      this.values['sys_id'] = sys_id;
  },
  
  /*
   * Set a field value.  This is useful if the calling code has already read the underlying GlideRecord, and wants to avoid
   * the overhead of another database read.
   */
  setValue: function(name, value) {
      this.values[name] = value;
  },
  
  /*
   * Converts this instance to a string.
   */
  toString: function() {
      // some setup...
      var gr = new GlideRecord(this.table);
      var gr_read = false;
      var regex = /^(.*?)\$\{([^\}]+?)\}(.*)$/;
      
      // make all our escape substitutions...
      var rr = regex.exec(this.pattern);
  	var arrayUtil = new ArrayUtil();
  	var arr = [];
      while (rr) {
          var fn = rr[2];
  		if (arrayUtil.contains(arr, fn)) {
  			gs.error("Closed chain detected for field "+fn+" in table "+this.table+". RecordToHTML script execution terminated!");
  			break;
  		}
          var fv = this.values[fn];
          if (!fv) {
              if (!gr_read) {
                  gr.get(this.sys_id);
                  gr_read = true;
              }
              fv = gr.getValue(fn);
              this.values[fn] = fv;
          }
          this.pattern = rr[1] + fv + rr[3];
  		arr.push(fn);
  		if (!regex.exec(fv))
  			arr = [];
          rr = regex.exec(this.pattern);
      }
      
      // surround with an "a" tag, if this is to be a link...
      if (this.link)
          this.pattern = '<a href="' + this.table + '.do?sys_id=' + this.sys_id + '"><u>' + this.pattern + '</u></a>';
      
      return this.pattern;
  },
  
  type: 'RecordToHTML'
}

Sys ID

d408790d0a0a0b020064fd47ecf276c4

Offical Documentation

Official Docs: