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