knowledge articles should send OOTB expiry notification for 30 and 60 days servicenow
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
13 hours ago
OOTB notification works for 30 days. We tried to create a new email script to show content for articles eaxpiring in next 60 days. However the OOTB script include that triggers event considers authers/kb owners/kb manager etc, of articles expiring in 30 days. How to resolve this issue. All the authers/kb owners/kb managers should get the notification. We cannot update the script include as its read-only.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12 hours ago
Hi @p_n ,
-
Clone the OOTB Script Include:
- Create a new Script Include (e.g.,
CustomKBExpiryNotification). - Copy the logic from the OOTB Script Include.
- Modify the condition to check for 60 days instead of 30.
- Create a new Script Include (e.g.,
-
Create a New Scheduled Job or Business Rule:
- Trigger your custom Script Include for articles expiring in 60 days.
- Ensure it fires the same event or a new custom event (e.g.,
kb.expiry.60days).
-
Create a New Notification:
- Link it to your custom event.
- Add recipients: authors, KB owners, KB managers.
If my response helped, please hit the 👍Thumb Icon and accept the solution so that it benefits future readers.
Regards,
Pratik
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12 hours ago
Hi @p_n ,
you can update the OOB scheduled job (Notification for Article Expiry Warning)
update as highlighted
changes changed it to run daily and commented few lines in the condition
now go to the script include (KBKnowledge) this is for customers to override the OOB functionality of script include (KBKnowledgeSNC) which is readonly
and update it as this
if you already have update the script include just append or update the method (notifyForExpiringArticles)
as below
var KBKnowledge = Class.create();
KBKnowledge.prototype = Object.extendsObject(KBKnowledgeSNC, {
notifyForExpiringArticles: function() {
if (gs.getProperty("glide.knowman.enable_article_expiry_notification", "false") === "true") {
var userArticleMap = new function() {
this._map = {};
this.put = function(key, val) {
if (!this.containsKey(key)) {
this._map[key] = [];
this._map[key].push(val);
} else if (this._map[key].indexOf(val) == -1) {
this._map[key].push(val);
}
};
this.containsKey = function(key) {
return this._map.hasOwnProperty(key);
};
this.get = function(key) {
return this.containsKey(key) ? this._map[key] : null;
};
this.keys = function() {
var keys = [];
for (var key in this._map) {
if (this._map.hasOwnProperty(key)) {
keys.push(key);
}
}
return keys;
};
};
var isVersioningEnabled = pm.isActive('com.snc.knowledge_advanced') && gs.getProperty("glide.knowman.versioning.enabled", "true") === "true";
var gr = new GlideRecord('kb_knowledge');
gr.addEncodedQuery("workflow_stateINpublished^kb_knowledge_base.active=true^valid_toRELATIVEGT@dayofweek@ahead@59^valid_toRELATIVELT@dayofweek@ahead@61");
gr.orderBy('valid_to');
gr.setCategory('homepage');
gr.query();
var isAOGEnabled = pm.isActive('com.snc.knowledge_advanced') && gr.isValidField("ownership_group") && gs.getProperty("glide.knowman.ownership_group.enabled", "true") === "true";
while (gr.next()) {
userArticleMap.put(gr.author + '', gr.getUniqueValue());
if (isVersioningEnabled && gr.revised_by)
userArticleMap.put(gr.revised_by + '', gr.getUniqueValue());
if (gr.kb_knowledge_base) {
userArticleMap.put(gr.kb_knowledge_base.owner, gr.getUniqueValue());
var kbManagers = gr.kb_knowledge_base.kb_managers;
if (kbManagers) {
var kbManagersList = kbManagers.split(',');
kbManagersList.map(function(kbmanager) {
userArticleMap.put(kbmanager + '', gr.getUniqueValue());
});
}
}
if (isAOGEnabled && gr.ownership_group) {
var aogMembers = new KBOwnershipGroup().getOwnershipGroupMembers(gr);
aogMembers.map(function(user) {
userArticleMap.put(user + '', gr.getUniqueValue());
});
}
}
var maxArticleCount = 11;
var users = userArticleMap.keys();
var articleCount = 0;
users.map(function(user) {
var articleList = userArticleMap.get(user);
articleCount = articleList.length;
articleList = articleList.slice(0, maxArticleCount);
var inputParam = {
articleList: articleList,
articleCount: articleCount,
isVersioningEnabled: isVersioningEnabled,
isAOGEnabled: isAOGEnabled
};
gs.eventQueue("kb.article.expiry.warning", null, user, JSON.stringify(inputParam)); //sending 11 articles displaying only 10 articles in email
});
}
},
type: "KBKnowledge"
});
Please mark my answer as helpful/correct if it resolves your query.
Regards,
Chaitanya
