Name

global.IndicatorTags

Description

Supports tagging of indicators in Performance Analytics.

Script

var IndicatorTags = Class.create();
IndicatorTags.prototype = {
  initialize: function() {
  	this._log = (new GSLog(IndicatorTags.LOG_LEVEL_PROPERTY, this.type)).setLog4J();
  },

  /**
   * getTag(label): Returns a GlideRecord representation of the appropriate Indicator Group.
   *
   * Searches for and creates if required.
   */
  getTag: function(label) {
      // Should this also update the usage counts?
      var tag = new GlideRecord("pa_tags");
      tag.addQuery("label", label);
      tag.query();

      if (!tag.next()) {
          if (this._log.atLevel(GSLog.DEBUG))
              this._log.debug("[getTag] Creating new Indicator Group: " + label);

          tag.initialize();
          tag.label = label;
  		if (!tag.canCreate()) {
  			if (this._log.atLevel(GSLog.DEBUG))
              this._log.debug("[getTag] Insufficient access to read Indicator Group: " + label);
  			return null;
  		}
          tag.insert();
      } else if (!tag.canRead()) {
  		if (this._log.atLevel(GSLog.DEBUG))
              this._log.debug("[getTag] Insufficient access to read Indicator Group: " + label);
  		return null;
  	}

      return tag;
  },

  /**
   * getIndicatorTags(indicatorId): Returns a GlideRecord containing all of the indicator Indicator Group
   *                          references for the given indicator.
   */
  getIndicatorTags: function(indicatorId) {

      var tags = new GlideRecord("pa_m2m_indicator_tags");
      tags.addQuery("indicator", indicatorId);
      tags.orderBy("sys_created_on");
      tags.query();

      if (this._log.atLevel(GSLog.DEBUG))
          this._log.debug("[getIndicatorTags] Found: " + tags.getRowCount() + " tags");

      return tags;
  },

  /**
   * addIndicatorTag(label,indicatorId): Adds a Indicator Group to a indicator and returns a GlideRecord containing,
   *                              and set to, the indicator Indicator Group added.
   */
  addIndicatorTag: function(label, indicatorId) {
      label = label + "";
      if (label.length < 2)
          return null;

      var tag = this.getTag(label);
  	
  	if (JSUtil.nil(tag))
  		return null;

      var indicatorTag = new GlideRecord("pa_m2m_indicator_tags");
      indicatorTag.addQuery("indicator", indicatorId);
      indicatorTag.addQuery("tag", tag.sys_id);
      indicatorTag.query();

      if (!indicatorTag.next()) {
          if (this._log.atLevel(GSLog.DEBUG))
              this._log.debug("[addIndicatorTag] Adding Indicator Group " + label + " to " + indicatorId);

          indicatorTag.newRecord();
          indicatorTag.indicator = indicatorId;
          indicatorTag.tag = tag.sys_id;
  		
  		if (!indicatorTag.canCreate()) {
  			if (this._log.atLevel(GSLog.DEBUG))
              	this._log.debug("[addIndicatorTag] Insufficient access to Add Indicator Groups " + label + " to " + indicatorId);
  			return null;
  		}
  		
          indicatorTag.insert();
          return indicatorTag;
      }

      if (this._log.atLevel(GSLog.DEBUG))
          this._log.debug("[addIndicatorTag] Duplicate Indicator Group "+ label +" found for indicator " + indicatorId + " Ignoring.");
      return null;
  },


  /**
   * removeIndicatorTag(sysId): Removed the indicator Indicator Group association represented by sysId
   */
  removeIndicatorTag:function(sysId) {
      if (JSUtil.nil(sysId)) {
          this._log.debug("[removeIndicatorTag] No sysid provided");
          return false;
      }

      var tags = new GlideRecord("pa_m2m_indicator_tags");
      if (!tags.get(sysId)) {
          if (this._log.atLevel(GSLog.DEBUG))
              this._log.debug("[removeIndicatorTag] Indicator Group relationship [" + sysId + "] not found");
          
      } else if (!tags.canDelete()) {
  		if (this._log.atLevel(GSLog.DEBUG))
              this._log.debug("[removeIndicatorTag] insufficient access to delete Indicator Group relationship [" + sysId + "]");
  		return false;
  	}

      tags.deleteRecord();
      return true;
  },

  
  type: 'IndicatorTags'
};
  
IndicatorTags.LOG_LEVEL_PROPERTY = "com.snc.pa.indicator_tags.log";

Sys ID

55a7483cbf00110032a0854b3f0739f3

Offical Documentation

Official Docs: