- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
Hey Guys, i have been doing a good amount of work on migrating knowledgebase from V2 to V3 and have captured steps on how to do that.
Steps:
Take a backup of all article from kb_knowledge table in xml format from the source instance
Take a backup of kb_category table from the source instance.
Import kb_knowldge_base.xml to kb_knowledge_base table using import xml option to target instance.
Import kb_category.xml to kb_category table using import xml option to target instance.
background script : setZzFullCategory(); // Optional depending on the knowledge bases in question , use it if you have more than one v3 knowledgebase.
background script : moveArticles('<sourcekb_sys_id>','<targetkb_sys_id>',false); - Get count of articles that will be moved.
background script : moveArticles('<sourcekb_sys_id>','<targetkb_sys_id>',true); - Move articles to Knowldge base v3
background script : updateV3Category('kb_sys_id',false); - Get count of articles that will be moved. (repeat this for all v3 knowledgebases)
background script : updateV3Category('kb_sys_id',true); - Update category for the articles. (repeat this for all v3 knowledgebases)
background script : publishArticles('kb_sys_id',false); -- Get count of articles that will be updated. // Optional step (repeat this for all v3 knowledgebases)
background script : publishArticles('kb_sys_id',true); - attach workflow for the articles. (This may take around 3 to 4 mins to complete); // Optional step (repeat this for all v3 knowledgebases)
Verify if the knowledgebase modules on left nav point to $knowledge.do else point them to $knowledge.do
script includes mentioned above
Name: setZzFullCategory
script:
function setZzFullCategory() {
var gr = new GlideRecord('kb_category');
gr.orderBy('sys_id');
gr.query();
while(gr.next()) {
if(gr.parent_table =='kb_knowledge_base') {
gr.u_zz_full_category = gr.parent_id.title + " / " + gr.full_category;
gr.setWorkflow(false);
gr.autoSysFields(false);
gr.update();
}
else {
if(gr.parent_id.parent_id.parent_id != undefined) {
gr.u_zz_full_category = gr.parent_id.parent_id.parent_id.title + " / " + gr.full_category;
gr.setWorkflow(false);
gr.autoSysFields(false);
gr.update();
}
else {
if(gr.parent_id.parent_id !=undefined) {
gr.u_zz_full_category = gr.parent_id.parent_id.title + " / " + gr.full_category;
gr.setWorkflow(false);
gr.autoSysFields(false);
gr.update();
}
else {
if(gr.parent_id !=undefined) {
gr.u_zz_full_category = gr.parent_id.title + " / " + gr.full_category;
gr.setWorkflow(false);
gr.autoSysFields(false);
gr.update();
}
}
}
}
}
}
Name: moveArticles
Usage:
moveArticles(<souceKbSysID>,<destinationKbSysID>,false); This line would check how many records would be migrated from source to destination KB
moveArticles(<souceKbSysID>,<destinationKbSysID>,true); This le will do the actual migration of KB articles.
script:
function moveArticles(source,destination,doIt) {
if(doIt == undefined) {
doIt = false;
}
var i = 0;
var query = 'kb_knowledge_base='+ source;
var grKb = new GlideRecord('kb_knowledge');
grKb.addEncodedQuery(query);
grKb.query();
while(grKb.next()) {
if(doIt) {
grKb.kb_knowledge_base = destination;
grKb.update();
}
i++;
}
if(doIt) {
sDebug = 'Number of KB articles that got migrated: ' + i;
}
else {
sDebug = 'Number of KB articles that would be migrated: ' + i;
}
gs.log(sDebug,'fpadmin');
}
Name: updateV3Category
Usage: updateV3Category(<kbsysid>,true);
Script:
function updateV3Category(source, doIt) {
if(doIt == undefined) {
doIt = false;
}
var i = 0;
var sDebug = '';
var kcquery = '';
var category = '';
var query = 'kb_knowledge_base='+ source;
var grKb = new GlideRecord('kb_knowledge');
grKb.addEncodedQuery(query);
grKb.query();
while(grKb.next()) {
category = '';
kcquery = 'parent_id=' + source + '^label=' + grKb.topic ;
if(doIt) {
var grKc = new GlideRecord('kb_category');
grKc.addEncodedQuery(kcquery);
grKc.query();
if(grKc.next()) {
category = grKc.sys_id;
}
grKb.kb_category = category;
grKb.update();
}
i++;
sDebug += " " + kcquery;
}
if(doIt) {
sDebug += 'Number of KB articles that got updated with new category: ' + i;
}
else {
sDebug += 'Number of KB articles that would be updated with new category: ' + i;
}
gs.log(sDebug,'fpadmin');
}
Name: publishArticles
Usage:
publishArticles(<kbSysID>,false); This gets the number of articles that will be published.
publishArticles(<kbSysID>,true); This publishes the articles.
script:
function publishArticles(source,doIt) {
if(doIt == undefined) {
doIt = false;
}
var i = 0;
var query = 'kb_knowledge_base='+ source;
var grKb = new GlideRecord('kb_knowledge');
grKb.addEncodedQuery(query);
grKb.query();
while(grKb.next()) {
if(doIt) {
grKb.workflow_state = 'draft';
grKb.update();
new KBWorkflow().startWorkflow(grKb, "workflow");
}
i++;
}
if(doIt) {
sDebug = 'Number of KB articles that got published: ' + i;
}
else {
sDebug = 'Number of KB articles that would be published: ' + i;
}
gs.log(sDebug,'fpadmin');
}
Thanks
Anil
- 1,816 Views
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.