Name

sn_cd.cd_KnowledgeBase

Description

Knowledge base api

Script

var cd_KnowledgeBase = Class.create();
cd_KnowledgeBase.prototype = {	
  
  initialize: function () {		
  	// Object to be transported as result
  	this.KB_OBJ = {};
  	// Object to be used locally
  	this.KB_GR = {};
  },

  // KB Api
  KB_VM: new global.KBViewModel(),
  
  CONST: {
  	ERROR: {
  		NOT_FOUND: gs.getMessage('Knowledge Base Article not found, use the search to find a KB article'),
  		NOT_PUBLISHED: {				
  			draft: gs.getMessage("KB article is in draft. Publish or select a new article"),
  			review: gs.getMessage("KB article is in review. Publish or select a new article"),				
  			outdated: gs.getMessage("KB article is outdated. Select the most recent version"),
  			pending_retirement: gs.getMessage("KB Article is pending retirement. Select a new article"),
  			retired: gs.getMessage("KB article is retired. Select a new article")
  		}
  	}
  },

  /* transport url to be used by portal
   * called from cd_ContentDelivery
   * @return - string, either kb article or video/link url
   */
  getUrlAsset: function (url_asset) {
  	var url = '';
  	if (!url_asset)
  		return url;
  	
  	if (url_asset.kb_article) {
  		// check article worflow state. If not published return empty string
  		this._setKbGrObj({sys_id: url_asset.kb_article});

  		// check workflow for "outdated" since url will still work with new published version
  		if (this.KB_OBJ.error && !/outdated/i.test(this.KB_GR.workflow_state.toString())) {
  			// reset the error for next url_asset. If not, all subsequent valid KB link will not show in the portal
  			delete this.KB_OBJ.error;
  			return url;
  		}

  		url = this.KB_VM.getPermalink(this.KB_GR.number.toString());
  	} else
  		url = url_asset.url.toString();

  	return url;
  },

  /* retrieve and transport kb_knowledge glide record
   * @return - JSON String, Kb_knowledge detail;
   */
  kbArticle: function (q) {
  	// set this.KB_GR to a glide record
  	this._setKbGrObj(q);
  	
  	if (this.KB_GR && this.KB_GR.getUniqueValue() && this.KB_GR.isValid() && !this.KB_OBJ.error) {
  		this.KB_OBJ.article = this.KB_GR.getUniqueValue();
  		this.KB_OBJ.base = this.KB_GR.kb_knowledge_base.toString();
  		this.KB_OBJ.category = this.KB_GR.kb_category.toString();
  		this.KB_OBJ.title = this.KB_GR.short_description.toString();
  		this.KB_OBJ.workflow_state = this.KB_GR.workflow_state.toString();			
  		this.KB_OBJ.permalink = this.KB_VM.getPermalink(this.KB_GR.number.toString());
  	} else if (!this.KB_OBJ.error)
  		this.KB_OBJ.error = this.CONST.ERROR.NOT_FOUND;

  	return this.KB_OBJ;
  },
  
  
  /************** Helper menthods **************/
  
  /* Set object for transport and use locally
   * @param - String, expect: {sys_id: String} or {number: String}
   */
  _setKbGrObj: function (q) {
  	this._kbGlideRecord(q);
  	
  	if (this.KB_GR.workflow_state && !/published/i.test(this.KB_GR.workflow_state.toString()))
  		this.KB_OBJ.error = this.CONST.ERROR.NOT_PUBLISHED[this.KB_GR.workflow_state];
  },

  /* Helper to get GlideRecord
   * @param - obj, expect: {sys_id: String} or {number: String}
   * @return - GlideRecord (if no record found, then null)
   */
  _kbGlideRecord: function (q) {		
  	if (!q || (!q.sys_id && !q.number))
  		return;
  	
  	var grKbArticle = {};
  	if (q.sys_id)
  		grKbArticle = this.KB_VM.getKnowledgeRecord('sys_id', q.sys_id);
  	else if (q.number)
  		grKbArticle = this.KB_VM.getKnowledgeRecord('number', q.number);
  	
  	this.KB_GR = grKbArticle.record;
  },

  type: 'cd_KnowledgeBase'
};

Sys ID

4ce762a6b3531300f5302ddc16a8dc81

Offical Documentation

Official Docs: