Name
sn_ex_sp.KBContentTranslationUtilSNC
Description
No description available
Script
var KBContentTranslationUtilSNC = Class.create();
KBContentTranslationUtilSNC.prototype = {
initialize: function () {
this.KB_TABLE = 'kb_knowledge';
this.CONTENT_TABLE = 'm2m_connected_content';
this.SCRIPT_INCLUDE_TABLE = 'sys_script_include';
},
/*
* Returns translated versions of a Knowledge connected content
*/
getTranslatedVersionsFromSysId: function (kbSysId) {
var kbGr = this.getKbGr(kbSysId);
if (!kbGr) {
return null;
}
return this.getTranslatedVersionsFromGr(kbGr, null);
},
getTranslatedVersionsFromGr: function (kbGr, language) {
var scriptIncludeGr = new GlideRecord(this.SCRIPT_INCLUDE_TABLE);
scriptIncludeGr.get('a9e307e653ae3010b6eaddeeff7b122f');
var translatedVersionsEncodedQuery = scriptIncludeGr.hasNext() ? new global.KBTranslation().getTranslatedVersionEncodedQuery(kbGr) :
this.getTranslatedVersionEncodedQuery(kbGr);
var translatedVersionsGr = new GlideRecord(this.KB_TABLE);
translatedVersionsGr.addEncodedQuery(translatedVersionsEncodedQuery);
if (!gs.nil(language)) {
translatedVersionsGr.addQuery('language', language);
}
translatedVersionsGr.query();
return translatedVersionsGr;
},
getKbGr: function (kbSysId) {
var kbGr = new GlideRecord(this.KB_TABLE);
kbGr.get(kbSysId);
return kbGr;
},
addTranslatedVersionsToTopic: function (contentGr) {
var translatedVersionsGr = this.getTranslatedVersionsFromSysId(contentGr.getValue('knowledge'));
while (translatedVersionsGr.next()) {
var newContentGr = new GlideRecord(this.CONTENT_TABLE);
newContentGr.addQuery('knowledge', translatedVersionsGr.getUniqueValue());
newContentGr.addQuery('topic', contentGr.getValue('topic'));
newContentGr.query();
if (!newContentGr.next()) {
newContentGr.initialize();
newContentGr.setValue('topic', contentGr.getValue('topic'));
newContentGr.setValue('knowledge', translatedVersionsGr.getUniqueValue());
newContentGr.setValue('order', contentGr.getValue('order'));
newContentGr.setValue('content_type', contentGr.getValue('content_type'));
newContentGr.setValue('content_table', contentGr.getValue('content_table'));
newContentGr.insert();
gs.info(translatedVersionsGr.getDisplayValue() + ' was added to '+ (contentGr.getElement('topic')).name+'('+contentGr.getValue('topic')+')');
}
}
},
removeTranslatedVersionsFromTopic: function (contentGr) {
var translatedVersionsGr = this.getTranslatedVersionsFromSysId(contentGr.getValue('knowledge'));
while (translatedVersionsGr.next()) {
var delContentGr = new GlideRecord(this.CONTENT_TABLE);
delContentGr.addQuery('knowledge', translatedVersionsGr.getUniqueValue());
delContentGr.addQuery('topic', contentGr.getValue('topic'));
delContentGr.query()
while (delContentGr.next()) {
delContentGr.deleteRecord();
gs.addInfoMessage(gs.getMessage("A translated version of the deleted Knowledge article was automatically removed"));
}
}
},
addNewKBToTopic: function (kbGr) {
var translatedVersionsGr = this.getTranslatedVersionsFromGr(kbGr, null);
var translatedVersionsArr = [];
if (kbGr.operation() == 'insert') {
while (translatedVersionsGr.next()) {
translatedVersionsArr.push(translatedVersionsGr.getUniqueValue());
}
var contentGr = new GlideAggregate(this.CONTENT_TABLE);
contentGr.addQuery('knowledge', 'IN', translatedVersionsArr);
contentGr.groupBy('topic');
contentGr.groupBy('content_type');
contentGr.query();
while (contentGr.next()) {
var newContentGr = new GlideRecord(this.CONTENT_TABLE);
newContentGr.addQuery('knowledge', kbGr.getUniqueValue());
newContentGr.addQuery('topic', contentGr.getValue('topic'));
newContentGr.query();
if (!newContentGr.next()) {
newContentGr.initialize();
newContentGr.setValue('topic', contentGr.getValue('topic'));
newContentGr.setValue('knowledge', kbGr.getUniqueValue());
newContentGr.setValue('order', contentGr.getValue('order'));
newContentGr.setValue('content_type', contentGr.getValue('content_type'));
newContentGr.insert();
}
}
}
else{
translatedVersionsArr.push(kbGr.getUniqueValue());
while(translatedVersionsGr.next()){
translatedVersionsArr.push(translatedVersionsGr.getUniqueValue());
}
var contentGr = new GlideAggregate(this.CONTENT_TABLE);
contentGr.addQuery('knowledge', 'IN', translatedVersionsArr);
contentGr.groupBy('topic');
contentGr.groupBy('content_type');
contentGr.query();
while (contentGr.next()) {
translatedVersionsArr.forEach(function(kbSysId){
var newContentGr = new GlideRecord(this.CONTENT_TABLE);
newContentGr.addQuery('knowledge', kbSysId);
newContentGr.addQuery('topic', contentGr.getValue('topic'));
newContentGr.query();
if (!newContentGr.next()) {
newContentGr.initialize();
newContentGr.setValue('topic', contentGr.getValue('topic'));
newContentGr.setValue('knowledge', kbSysId);
newContentGr.setValue('order', contentGr.getValue('order'));
newContentGr.setValue('content_type', contentGr.getValue('content_type'));
newContentGr.insert();
}
},this)
}
}
},
/**
* returns encoded query for getting translated version of given article .
*
* @param GlideRecord: kb_knowledge record.
*
* Replica of new global.KBTranslation().getTranslatedVersionEncodedQuery(kbGr) to support Rome
*/
getTranslatedVersionEncodedQuery: function(articleGr){
var kbArticleGr = new GlideRecord('kb_knowledge');
if (GlidePluginManager.isActive('com.snc.knowledge_advanced') && !articleGr.summary.nil()) {
//Versioning is installed and this article is versioned.
if (gs.nil(articleGr.parent)) {
kbArticleGr.addQuery('parent',articleGr.sys_id)
.addOrCondition('parent.summary', articleGr.summary);
} else {
kbArticleGr.addQuery('summary', '!=', articleGr.summary);
//Bypass Before query BRs for dotwalking.
var temp = new GlideRecord('kb_knowledge');
//temp.setWorkflow(false);
temp.get(articleGr.parent);
kbArticleGr.addQuery('parent',articleGr.parent).addOrCondition('parent.summary',articleGr.summary).addOrCondition('summary', temp.summary);
}
} else {
if (gs.nil(articleGr.parent))
kbArticleGr.addQuery('parent', articleGr.sys_id);
else {
kbArticleGr.addQuery('sys_id', '!=', articleGr.sys_id);
kbArticleGr.addQuery('parent', articleGr.parent).addOrCondition('sys_id', articleGr.parent);
}
}
return kbArticleGr.getEncodedQuery()+'';
},
translatedVersionDoesntExist: function(contentGr) {
var translatedVersionsGr = this.getTranslatedVersionsFromSysId(contentGr.getValue('knowledge'));
while (translatedVersionsGr.next()){
var newContentGr = new GlideRecord(this.CONTENT_TABLE);
newContentGr.addQuery('knowledge', translatedVersionsGr.getUniqueValue());
newContentGr.addQuery('topic', contentGr.getValue('topic'));
newContentGr.query();
if(newContentGr.next()){
return false;
}
}
return true;
},
type: 'KBContentTranslationUtilSNC'
};
Sys ID
97bf46b06b1101100a06c141ee44af84