Name

global.ImportTranslatedKnowledgeArticlesSNC

Description

Customers should not change this class directly This class is never called directly.

Script

var ImportTranslatedKnowledgeArticlesSNC = Class.create();
ImportTranslatedKnowledgeArticlesSNC.prototype = {
  initialize: function() {
  },
  
  copyAttachment: function(oldKbId, newKbId) {
  	var gsa = new GlideSysAttachment();
  	gsa.copy('kb_knowledge', oldKbId, 'kb_knowledge', newKbId);
  },

  assignField: function(newGr, newField, oldGr,field) {
  	if (!newGr.isValidField(newField) || !oldGr.isValidField(field))
  		return ;
  	newGr[newField] = oldGr[field];
  },

  importTranslated: function(kbGr, titleGr, textGr) {
  	if (!textGr)
  		return null;
  	var newKbGr = new GlideRecord('kb_knowledge');
  	newKbGr.initialize();
  	if (titleGr)
  		this.assignField(newKbGr, 'language', titleGr, 'language');
  	else 
  		this.assignField(newKbGr, 'language', textGr, 'language');
  	this.assignField(newKbGr, 'parent', kbGr, 'sys_id');
  	this.assignField(newKbGr, 'topic', kbGr, 'topic');
  	this.assignField(newKbGr, 'category', kbGr, 'category');
  	newKbGr.workflow_state = 'draft';
  	this.assignField(newKbGr, 'article_type', kbGr, 'article_type');
  	this.assignField(newKbGr, 'roles', kbGr, 'roles');
  	if (titleGr)
  		this.assignField(newKbGr, 'short_description', titleGr, 'label');
  	else
  		this.assignField(newKbGr, 'short_description', kbGr, 'short_description');
  	this.assignField(newKbGr, 'text', textGr, 'value');
  	this.assignField(newKbGr, 'meta', kbGr, 'meta');
  	this.assignField(newKbGr, 'source', kbGr, 'source');
  	this.assignField(newKbGr, 'flagged', kbGr, 'flagged');
  	this.assignField(newKbGr, 'author', kbGr, 'author');
  	this.assignField(newKbGr, 'use_count', kbGr, 'use_count');
  	this.assignField(newKbGr, 'rating', kbGr, 'rating');
  	this.assignField(newKbGr, 'description', kbGr, 'description');
  	this.assignField(newKbGr, 'kb_knowledge_base', kbGr, 'kb_knowledge_base');
  	this.assignField(newKbGr, 'kb_category', kbGr, 'kb_category');
  	this.assignField(newKbGr, 'retired', kbGr, 'retired');
  	this.assignField(newKbGr, 'disable_commenting', kbGr, 'disable_commenting');
  	this.assignField(newKbGr, 'disable_suggesting', kbGr, 'disable_suggesting');
  	return newKbGr.insert();
  },

  searchTranslated: function(kbGr) {
  	var titleGr = new GlideRecord('sys_translated');
  	var textGr = new GlideRecord('sys_translated_text');
  	var languages = {};
  	titleGr.addQuery('name', 'kb_knowledge');
  	titleGr.addQuery('element', 'short_description');
  	titleGr.addQuery('value', kbGr.short_description);
  	titleGr.query();
  	textGr.addQuery('tablename', 'kb_knowledge');
  	textGr.addQuery('documentkey', kbGr.sys_id);
  	textGr.addQuery('fieldname', 'text');
  	textGr.query();
  	while (titleGr.next()) {
  		var lang = titleGr.language;
  		if (!languages[lang]) 
  			languages[lang] = {title: null, text: null};
  		languages[lang].title = titleGr.sys_id;
  	}
  	while (textGr.next()) {
  		var lang = textGr.language;
  		if (!languages[lang])
  			languages[lang] = {title: null, text: null};
  		languages[lang].text = textGr.sys_id;
  	}
  	for (var lang in languages) {
  		if (languages.hasOwnProperty(lang)) {
  			var titleGr2 = null;
  			var textGr2 = null;
  			if (languages[lang].title) {
  				if (titleGr.get(languages[lang].title))
  					titleGr2 = titleGr;
  			}
  			if (languages[lang].text) {
  				if (textGr.get(languages[lang].text)) 
  					textGr2 = textGr;
  			}
  			if(!this.checkLocalizedArticleExists(lang, kbGr)) {
  				var newKbId = this.importTranslated(kbGr, titleGr2, textGr2);
  				if(newKbId) {
  					new GlideTSUtil().indexDocument('kb_knowledge', newKbId + "")
  					this.copyAttachment(kbGr.sys_id, newKbId);
  					gs.log("Imported article: '" + kbGr.short_description + "' for language: '" + lang + "' in Draft State.");
  				}
  				

  			} else {
  				gs.log("Skipped Import for article: '" + kbGr.short_description + "' in language: '" + lang + "'");
  			}
  		}
  	}
  },
  
  checkLocalizedArticleExists: function(language, articleRecord) {
  	var articleAgg = new GlideAggregate('kb_knowledge');
  	articleAgg.addQuery("language", language);
  	articleAgg.addQuery("parent", articleRecord.getUniqueValue());
  	articleAgg.addAggregate("COUNT");
  	articleAgg.query();		
  	var count = 0;
  	if (articleAgg.next()) {
  		count = articleAgg.getAggregate('COUNT');
  	}
  	return (count > 0) ? true : false;
  },
  
  importArticles: function() {
  		var gr = new GlideRecord('kb_knowledge');
  		gr.addActiveQuery();
  		gr.query();
  		while (gr.next()) 
  			this.searchTranslated(gr);
  },

  type: 'ImportTranslatedKnowledgeArticlesSNC'
};

Sys ID

f7f2647bb712230026778d78ee11a92e

Offical Documentation

Official Docs: