Background scrip to bulk update Knowledge base for articles

Mrman
Tera Guru

Hi All,

I have created below background script to update the knowledge base for all articles from a certain knowledge base to a new KB .

After running this script knowledge base is not getting updated . Please suggest if I am missing something.

var TARGET_KB_SYS_ID = '1e2530df1bf010109604a9b4bd4bcb54';

var KB_ARTICLES_TO_MOVE = [];

  
var grKBA = new GlideRecord('kb_knowledge');
grKBA.addEncodedQuery('kb_knowledge_base=bb0370019f22120047a2d126c42e7073^ORkb_knowledge_base=d2a0cb82db1304500d2e633fd396194b^workflow_stateINdraft,review,published,pending_retirement,retired');
grKBA.addQuery();

while(grKBA.next()){

KB_ARTICLES_TO_MOVE.push(grKBA.number);


}

for (var i = 0; i < KB_ARTICLES_TO_MOVE.length; i++) {

   moveKBArticle(KB_ARTICLES_TO_MOVE[i]);

}

function moveKBArticle(kbNumber) {

   var kb = new GlideRecord('kb_knowledge');

   kb.setWorkflow(false);

   kb.addQuery('number',kbNumber);

   kb.query();

   if (kb.next()) {

       kb.kb_knowledge_base = TARGET_KB_SYS_ID;

       kb.update();

       gs.print('Updated ' + kbNumber);

   } else {

       gs.print('Did not find ' + kbNumber);

   }

}
4 REPLIES 4

Jaspal Singh
Mega Patron
Mega Patron

Line

moveKBArticle(KB_ARTICLES_TO_MOVE[i]); 

would give you sys_ids.

Can you replace

kb.addQuery('number',kbNumber);

with

kb.addQuery('sys_id',kbNumber);

 

Hi @Jaspal Singh ,

I have replaced the line as you mentioned , still knowledge base is not changing .

Please suggest.

It returns numbers only & not sys_id. Can you use below with added logs.

var TARGET_KB_SYS_ID = '1e2530df1bf010109604a9b4bd4bcb54';
var KB_ARTICLES_TO_MOVE = [];  
var grKBA = new GlideRecord('kb_knowledge');
grKBA.addEncodedQuery('kb_knowledge_base=bb0370019f22120047a2d126c42e7073^ORkb_knowledge_base=d2a0cb82db1304500d2e633fd396194b^workflow_stateINdraft,review,published,pending_retirement,retired');
grKBA.query(); //changed here as had syntax issue
while(grKBA.next()){
KB_ARTICLES_TO_MOVE.push(grKBA.number);
}

for (var i = 0; i < KB_ARTICLES_TO_MOVE.length; i++) {

   moveKBArticle(KB_ARTICLES_TO_MOVE[i]);

}

function moveKBArticle(kbNumber) {

   var kb = new GlideRecord('kb_knowledge');
   kb.addQuery('number',kbNumber);
   kb.query();
   gs.print('Count is '+kb.getRowCount());
   if (kb.next()) {
       kb.kb_knowledge_base = TARGET_KB_SYS_ID;
       kb.setWorkflow(false);
       kb.update();
       gs.print('Updated ' + kbNumber);

   } else {

       gs.print('Did not find ' + kbNumber);

   }

}

Hi @Jaspal Singh ,

After running the script you provided below is the output I am seeing ,

Not sure why it only shows as 1 record , please suggest

find_real_file.png