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.

addInfoMessage on Knowledge Article View

MounikaS
Tera Contributor

Hello,

Does any one help me on adding info message to the articles in the kB view.

 

1 ACCEPTED SOLUTION

Sorry for delayed response but got busy with something else.

1> Change application to Knowledge Management - Service Portal

2 > Open portal page called kb_article_view

3> Clone widget Called "Knowledge Article Content"

4> add below code to cloned widget

if(knowledgeRecord.workflow_state == 'retired'){
		gs.addInfoMessage('Article has been retired');
	}

5> change widget on page from Knowledge Article Content to new cloned widget.

Screenshot that will help;

Result:

View solution in original post

23 REPLIES 23

You will have to use jelly to query record and show error message based on result

EX:

<g:evaluate var="jvar_gr" object="true">
   var gr = new GlideRecord("your_table");
   gr.addQuery("active", true);
   gr.query();
   gr;
</g:evaluate>

<j:if test="${jvar_gr.hasNext()}">
   The Error message you want to display.
</j:if>

If you want to show message on retired article only than use something like

<g:evaluate var="jvar_gr" object="true">
	var gr = new GlideRecord("kb_knowledge");
	gr.addQuery("number", '$[sys_kb_id]');
	gr.addQuery("workflow_state", 'retired');
	gr.query();
	gr;
</g:evaluate>

<j:if test="${jvar_gr.hasNext()}">
	The Error message you want to display.
</j:if>

Hi 

Thanks for your response!

I didn't see any message on the article. please let me know if i need to change anything in the code.

find_real_file.png

<g:evaluate var="jvar_gr" object="true">
var gr = new GlideRecord("kb_knowledge");
gr.addQuery("number", '$[sys_kb_id]');
gr.addQuery("workflow_state", 'retired');
gr.query();
gr;
</g:evaluate>

<j:if test="${jvar_gr.hasNext()}">
gs.getMessage("Article has been retired");
</j:if>

Can you share whole script?

Hi Mike,

 

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<j2:set var="jvar_hide_response_time" value="true" />
<g:inline template="ie_checker.xml" />
<g:requires name="scripts/lib/jquery_includes.js"/>
<j:set var="jvar_theme" value="$[gs.getPreference(new GlideThemeUtil().getThemeVersion())]"/>
<g:requires name="styles/knowledge.ng/css_includes_knowledge.css" includes="true" params="c=$[gs.getProperty('css.version')]_$[GlideCacheManager.getFlushStamp('csscsscsscache')]&amp;theme=${jvar_theme}"/>

<j2:if test="$[!jvar_isMSIE7]">
<j2:if test="$[!jvar_isMSIE8]">
<g:requires name="scripts/classes/timeAgo.js"/>
</j2:if>
</j2:if>

<!-- Common styles are loaded in the "Knowledge Common Styles" stylesheet -->
<link href="b3ba3821d73221004792a1737e610382.cssdbx?v=${gs.getProperty('glide.builddate')}" type="text/css" rel="stylesheet"/>

<g:evaluate jelly="true" copyToRhino="true">
var uiMacro = "kb_view_legacy";
var kbViewModel = new KBViewModel();
var kbViewInfo = kbViewModel;
kbViewModel.getInfo();
var canContributeHelper = new SNC.KnowledgeHelper();
var knowledgeHelp = new KnowledgeHelp();
var historyRowCount = 0;
var isValidRecord = kbViewModel.isValid;
var knowledgeExists = kbViewModel.knowledgeExists;
var NOT_RETIRED = gs.getMessage("Article not retired");
var NOT_PUBLISHED = gs.getMessage("Article not published");
var NOT_SAVED = gs.getMessage("Article not saved");
var SAVED = gs.getMessage("Article saved");
var DISCARDED = gs.getMessage("Article changes discarded");
var SUBMITTED = gs.getMessage("Your article has been submitted");
var PREVIEW = gs.getMessage(" Preview ");
var PREVIEW_HINT = gs.getMessage("Preview changes");
var DELETE = gs.getMessage("Delete");
var CONFIRM_DELETE = gs.getMessage("Confirm deletion of this article?");
var TITLE_CANCEL = gs.getMessage("Cancel changes");
var MESSAGE_CANCEL = gs.getMessage("Discard all changes?");
var TITLE_RETIRE = gs.getMessage("Retire");
var MESSAGE_RETIRE = gs.getMessage("Retire this article?");
// Status messages for the message bar.
var DRAFT_MSG = gs.getMessage("This knowledge item has been created");
var REVIEW_MSG = gs.getMessage("This knowledge item has been published");
var PUBLISHED_MSG = gs.getMessage("This knowledge item has been published");
var PEND_RETIRE_MSG = gs.getMessage("This knowledge item has been retired");
var RETIRED_MSG = gs.getMessage("This knowledge item has been retired");
var DELETE_FAIL_MSG = gs.getMessage("This article could not be deleted");
var TXT_PLACEHOLDER = gs.getMessage("Add content");
var tsQueryId = RP.getParameterValue("sysparm_tsqueryId");
var rank = RP.getParameterValue("sysparm_rank");
var readOnlyPage = false;


if (isValidRecord) {
var knowledgeRecord = kbViewModel.knowledgeRecord;
var canContributeToKnowledge = canContributeHelper.canContribute(kbViewModel.knowledgeRecord);
var versioningInfo = kbViewModel.versioningInfo;
var revisionString = kbViewModel.revisionString;
var isEditable = kbViewModel.isEditable;
var publishedRecord = kbViewModel.publishedRecord;
var feedbackRecords = kbViewModel.feedbackRecord;
var bannerImage = kbViewModel.bannerImage;
var authorImage = kbViewModel.authorImage;
var authorName = kbViewModel.authorName;
var authorCompany = kbViewModel.authorCompany || kbViewModel.getAuthorInfo("author.company.name");
var authorDepartment = kbViewModel.authorDepartment || kbViewModel.getAuthorInfo("author.department.name");
var authorTitle = kbViewModel.authorTitle || kbViewModel.getAuthorInfo("author.title");
var i18n = function(message, array) {
message = message || "";
var padded = " " + message + " ";
var translated = gs.getMessage(padded, array);
var trimmed = translated.trim();
return trimmed;
};

var canCreateNew = kbViewModel.canCreateNew;
var isNewRecord = kbViewModel.isNewRecord;
var published = "";
var sys_updated_on = "";
if (kbViewModel.publishedRecord) {
published = kbViewModel.publishedRecord.published;
sys_updated_on = kbViewModel.publishedRecord.sys_updated_on;
}
var number = knowledgeRecord.number;
var permalink = kbViewModel.permalink;
var category = knowledgeRecord.category;
var attachments = kbViewModel.attachments;
var disableSuggesting = knowledgeRecord.disable_suggesting;
var glideWikiModel = new GlideWikiModel();
glideWikiModel.setLinkBaseURL(glideWikiModel.getLinkBaseURL() + "${AMP}sysparm_field=kb_knowledge.wiki" + "${AMP}sysparm_kbtable=" + kbViewInfo.tableName);
}

var isVersion2 = new KBCommon().isKBVersion2(knowledgeRecord.kb_knowledge_base);
if (isVersion2) {
if (jelly.sysparm_context == 'popup')
uiMacro = "kb_view_legacy_popup";
else
uiMacro = "kb_view_legacy";
}
if(tsQueryId ${AMP}${AMP} rank){
var inc = new GlideRecord('ts_query_kb');
inc.get(tsQueryId);
var prevRank = inc.top_click_rank;
if(prevRank ${AMP}${AMP} prevRank !=""){
if(parseInt(prevRank) > parseInt(rank)){
inc.top_click_rank = rank;
inc.updateWithReferences();
}
}else{
inc.top_click_rank = rank;
inc.update();
}
}
var escapeTextProperty = gs.getProperty('glide.ui.escape_text','false');
var kb_name = knowledgeRecord.kb_knowledge_base.getDisplayValue();
var kb_desc = knowledgeRecord.short_description;
var encodedKb_desc = encodeURIComponent(kb_desc);

if(gs.getProperty("glide.knowman.contextual_search.show_read_only_article","false") == "true" &amp;&amp; RP.getParameterValue("sysparm_popup") == "true"){
readOnlyPage = true;
kbViewInfo.showKBFeedback = false;
kbViewInfo.hideFeedbackOptions = true;
versioningInfo.showHistory = false;
}

</g:evaluate>
<g:evaluate var="jvar_gr" object="true">
var gr = new GlideRecord("kb_knowledge");
gr.addQuery("number", '$[sys_kb_id]');
gr.addQuery("workflow_state", 'retired');
gr.query();
gr;
</g:evaluate>

<j:if test="${jvar_gr.hasNext()}">
gs.getMessage("Article has been retired");
</j:if>
<script>
if('${JS:kb_desc}' != ''){
$j("title").html('${JS:kb_name}'+ " - " + '${JS:kb_desc}');
}
var kbConfig = {
canContribute: '${canContributeToKnowledge}',
historyRowCount: ${historyRowCount},
i18n: {
STATUS_MSG: {
draft: '${JS:DRAFT_MSG}',
review: '${JS:REVIEW_MSG}',
published: '${JS:PUBLISHED_MSG}',
pending_retirement: '${JS:PEND_RETIRE_MSG}',
retired: '${JS:RETIRED_MSG}',
delete_failed: '${JS:DELETE_FAIL_MSG}'
},
TXT_PLACEHOLDER: '${JS:TXT_PLACEHOLDER}',
NOT_RETIRED: '${JS:NOT_RETIRED}',
NOT_PUBLISHED: '${JS:NOT_PUBLISHED}',
NOT_SAVED: '${JS:NOT_SAVED}',
SAVED: '${JS:SAVED}',
DISCARDED: '${JS:DISCARDED}',
SUBMITTED: '${JS:SUBMITTED}',
PREVIEW: '${JS:PREVIEW}',
PREVIEW_HINT: '${JS:PREVIEW_HINT}',
CONFIRM_DELETE: '${JS:CONFIRM_DELETE}',
DELETE: '${JS:DELETE}',
TITLE_RETIRE: '${JS:TITLE_RETIRE}',
MESSAGE_RETIRE: '${JS:MESSAGE_RETIRE}',
TITLE_CANCEL: '${JS:TITLE_CANCEL}',
MESSAGE_CANCEL: '${JS:MESSAGE_CANCEL}'
}
};

$j(function() {
if (parent.document) {
// fix iframe resize issue for CMS service portal
parent.CustomEvent.fire('content_frame.resized', window.name, parent.document.body.scrollHeight);
}
});
</script>

<j:choose>
<j:when test="${isVersion2}">
<g:inline template="${uiMacro}"/>
</j:when>
<j:when test="${isValidRecord &amp;&amp; knowledgeHelp.hasRights(knowledgeRecord)}">
<g:inline template="kb_view_common" />
</j:when>
<j:when test="${knowledgeExists}">
<g:inline template="kb_view_cannot_read"/>
</j:when>
<j:otherwise>
<g:inline template="kb_view_not_valid_record"/>
</j:otherwise>
</j:choose>
<!--Knowledge in IFrame fix-->
<script></script>
</j:jelly>