Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

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