We've updated the ServiceNow Community Code of Conduct, adding guidelines around AI usage, professionalism, and content violations. Read more

Want retire all articles with same number

Ash41
Kilo Sage

Hi Team 

 

Below is the code working fine for article that passed 5days on valid to, and retire articles. But I want to retire all the articles if any one of the article met the valid to date condition 5days. irrespective of state they are and version.

 

 

 

 

 

var x = new GlideDateTime(gs.now());
x.addDays(-5);
x = x.getDate();
 
var knowledge_article = new GlideRecord('kb_knowledge');
knowledge_article.addQuery('valid_to', '<=', x );
knowledge_article.addEncodedQuery('kb_knowledge_base=a7e8a78bff0221009b20ffffffffff17^workflow_state=published^ORworkflow_state=pending_retirement^ORworkflow_state=draft^ORworkflow_state=review^ORworkflow_state=extension_review^ORworkflow_state=scheduled_publish');
knowledge_article.addQuery('number', 'KB0015495');
knowledge_article.query();
while (knowledge_article.next()) {
    knowledge_article.workflow_state = 'retired';
    knowledge_article.u_auto_retire = 'true';
    knowledge_article.setWorkflow(false);
    knowledge_article.update();
}

 

 

 

 

 

1 ACCEPTED SOLUTION

Not applicable

@Ash41 

 

 

var kbNumber=[];
var x = new GlideDateTime(gs.now());
x.addDays(-5);
x = x.getDate();
 
var knowledge_article = new GlideRecord('kb_knowledge');
knowledge_article.addEncodedQuery('kb_knowledge_base=a7e8a78bff0221009b20ffffffffff17^ORkb_knowledge_base=42a1f18647dc9d50da21ebbd436d432e^ORkb_knowledge_base=003eef4cc35abd1080df7aef05013166^ORkb_knowledge_base=0d0ed6ff97b91d9c29faf1500153aff5^workflow_stateNOT INretired,outdated,rejected');
knowledge_article.addQuery('valid_to', '<=', x);
knowledge_article.query();
while (knowledge_article.next()) {
    kbNumber.push(knowledge_article.getValue('number'));
    //gs.print( "Number " + kbNumber + " State " + knowledge_article.workflow_state);
}
    var knowledge_article1 = new GlideRecord('kb_knowledge');
    knowledge_article1.addEncodedQuery('kb_knowledge_base=a7e8a78bff0221009b20ffffffffff17^ORkb_knowledge_base=42a1f18647dc9d50da21ebbd436d432e^ORkb_knowledge_base=003eef4cc35abd1080df7aef05013166^ORkb_knowledge_base=0d0ed6ff97b91d9c29faf1500153aff5^workflow_stateNOT INretired,outdated,rejected');
    knowledge_article1.addQuery('number','IN',kbNumber);
    knowledge_article1.query();
 while(knowledge_article1.next()){
  gs.print(" Query Number :"+knowledge_article1.number + "state: "+knowledge_article1.workflow_state );
 
 }
 

 

 

View solution in original post

4 REPLIES 4

Not applicable

@Ash41 Add a preliminary query to check if any articles meet the valid_to date condition. Only if such articles are found does it proceed to retire all relevant articles. try the below code. 

// Define the threshold date for retirement
var thresholdDate = new GlideDateTime(gs.now());
thresholdDate.addDays(-5);
thresholdDate = thresholdDate.getDate();

// Check if any articles meet the valid_to condition
var checkArticle = new GlideRecord('kb_knowledge');
checkArticle.addQuery('valid_to', '<=', thresholdDate);
checkArticle.addQuery('kb_knowledge_base', 'a7e8a78bff0221009b20ffffffffff17'); // Your Knowledge Base
checkArticle.query();

if (checkArticle.hasNext()) {
    // If any article meets the condition, retire all relevant articles
    var retireArticle = new GlideRecord('kb_knowledge');
    retireArticle.addQuery('kb_knowledge_base', 'a7e8a78bff0221009b20ffffffffff17'); // Your Knowledge Base
    retireArticle.addEncodedQuery('workflow_state=published^ORworkflow_state=pending_retirement^ORworkflow_state=draft^ORworkflow_state=review^ORworkflow_state=extension_review^ORworkflow_state=scheduled_publish');
    retireArticle.query();

    while (retireArticle.next()) {
        retireArticle.workflow_state = 'retired';
        retireArticle.u_auto_retire = 'true';
        retireArticle.setWorkflow(false);
        retireArticle.update();
    }
}

 


Mark it helpful 👍and Accept Solution !! If this helps you to understand.

…………………………………………........................................................................................

Hi Satish, 

 

I have tried with one record instead running for mutiple record at a time, still it retied other records as well.

// Define the threshold date for retirement
var thresholdDate = new GlideDateTime(gs.now());
thresholdDate.addDays(-5);
thresholdDate = thresholdDate.getDate();

// Check if any articles meet the valid_to condition
var checkArticle = new GlideRecord('kb_knowledge');
checkArticle.addQuery('valid_to', '<=', thresholdDate);
checkArticle.addQuery('kb_knowledge_base', 'a7e8a78bff0221009b20ffffffffff17'); // Your Knowledge Base
 checkArticle.addQuery('number', 'KB000xxx');
checkArticle.query();

if (checkArticle.hasNext()) {
    // If any article meets the condition, retire all relevant articles
    var retireArticle = new GlideRecord('kb_knowledge');
    retireArticle.addQuery('kb_knowledge_base', 'a7e8a78bff0221009b20ffffffffff17'); // Your Knowledge Base
    retireArticle.addEncodedQuery('workflow_state=published^ORworkflow_state=pending_retirement^ORworkflow_state=draft^ORworkflow_state=review^ORworkflow_state=extension_review^ORworkflow_state=scheduled_publish');
    retireArticle.addQuery('number', 'KB000xxx');
retireArticle.query();

    while (retireArticle.next()) {
        retireArticle.workflow_state = 'retired';
        retireArticle.u_auto_retire = 'true';
        retireArticle.setWorkflow(false);
        retireArticle.update();
    }
}

 

Not applicable

@Ash41 

 

 

var kbNumber=[];
var x = new GlideDateTime(gs.now());
x.addDays(-5);
x = x.getDate();
 
var knowledge_article = new GlideRecord('kb_knowledge');
knowledge_article.addEncodedQuery('kb_knowledge_base=a7e8a78bff0221009b20ffffffffff17^ORkb_knowledge_base=42a1f18647dc9d50da21ebbd436d432e^ORkb_knowledge_base=003eef4cc35abd1080df7aef05013166^ORkb_knowledge_base=0d0ed6ff97b91d9c29faf1500153aff5^workflow_stateNOT INretired,outdated,rejected');
knowledge_article.addQuery('valid_to', '<=', x);
knowledge_article.query();
while (knowledge_article.next()) {
    kbNumber.push(knowledge_article.getValue('number'));
    //gs.print( "Number " + kbNumber + " State " + knowledge_article.workflow_state);
}
    var knowledge_article1 = new GlideRecord('kb_knowledge');
    knowledge_article1.addEncodedQuery('kb_knowledge_base=a7e8a78bff0221009b20ffffffffff17^ORkb_knowledge_base=42a1f18647dc9d50da21ebbd436d432e^ORkb_knowledge_base=003eef4cc35abd1080df7aef05013166^ORkb_knowledge_base=0d0ed6ff97b91d9c29faf1500153aff5^workflow_stateNOT INretired,outdated,rejected');
    knowledge_article1.addQuery('number','IN',kbNumber);
    knowledge_article1.query();
 while(knowledge_article1.next()){
  gs.print(" Query Number :"+knowledge_article1.number + "state: "+knowledge_article1.workflow_state );
 
 }
 

 

 

Thanks for your help! 🙂