2020年10月17日土曜日

Servicenowのポータルでのナレッジ記事の表示順をタイトル順にするためのカスタマイズ

さてServicenowのポータルでのナレッジ記事の表示順がデフォルトでどのような状態かについては前回の記事を参照いただくとして今回はタイトル順に表示できる様カスタマイズを実施してみたい。

https://community.servicenow.com/community?id=community_question&sys_id=2438061ddba91b047b337a9e0f961928

↑のコミュニティの記事を参考に進めてみたい。

まずカスタマイズが必要なウィジェットを特定する。

フィルタナビゲータから Service Portal -> Service Portal Configuration を表示し、下の画面のPage Editor をクリック。



今回修正するページは「kb_category」なので Select Page... のところへ「kb_category」としクリック。

↓の画面で「Edit Knowledge Base (kb_category) page in Designer ➚」のリンクをクリック。すると次の画面が出て、問題のウィジェットが「KB Category Page」という名前である事がわかる。


ここまでわかったらいったんこの画面は閉じるまたは置いておく。

次に「KB Category Page」の編集に入る。フィルタナビゲータから Service Portal -> Widgets を表示。


Name を KB Category Page で検索名前をクリックして記事を開く。

このままだとデフォルトのウィジェットは編集できないようになっているので、画面右上の Clone Widget をクリック。


すると、次のように編集可能なコピーされたウィジェットが作成される。


Client controller のスクリプトを、次のように変更する。

【デフォルト】

function ($scope, $rootScope, $timeout, spKBCategoryService) {
	var accessWordCountMax = 15;
	var c = this;
	init();
	
	c.getShortenText = function getShortenText(text) {
		var wordsArray = text.split(" ");
		if (wordsArray.length > accessWordCountMax)
			wordsArray = wordsArray.slice(0, accessWordCountMax);
		return wordsArray.join(" ");
	}
	
	var removeListener = spKBCategoryService.addListener(function(catId) {
		c.data.category = catId;
		c.data.items = null;
		c.server.update().then(function(){
			init();
		});
	});
	
	function init() {
		$timeout(function() {
			$rootScope.$broadcast('sp.update.breadcrumbs', c.data.breadcrumbs);
		});
	}
	$scope.hideItemWidget = !$scope.data.category;
	$scope.showCategories =  function() {
		$scope.hideItemWidget = true;
		$rootScope.$broadcast("$sp.kb.show.categories_widget");
	}
	$scope.$on('$destroy', function(){
		removeListener();
	});
	
	$scope.loadMore = function () {
		c.data.new_limit = c.data.limit + (parseInt(c.options.limit_article) || 10);
		c.server.update();
	}
}

【変更後】

function ($scope, $rootScope, $timeout, spKBCategoryService) {
	var accessWordCountMax = 15;
	var c = this;
	init();
	// opus change - sort documents by title name
	c.data.items.sort(function (a, b) {
		return a.title.localeCompare(b.title);
	});
c.getShortenText = function getShortenText(text) {
		var wordsArray = text.split(" ");
		if (wordsArray.length > accessWordCountMax)
			wordsArray = wordsArray.slice(0, accessWordCountMax);
		return wordsArray.join(" ");
	}
	
	var removeListener = spKBCategoryService.addListener(function(catId) {
		c.data.category = catId;
		c.data.items = null;
		c.server.update().then(function(){
			init();
		});
	});
	
	function init() {
		$timeout(function() {
			$rootScope.$broadcast('sp.update.breadcrumbs', c.data.breadcrumbs);
		});
	}
	$scope.hideItemWidget = !$scope.data.category;
	$scope.showCategories =  function() {
		$scope.hideItemWidget = true;
		$rootScope.$broadcast("$sp.kb.show.categories_widget");
	}
	$scope.$on('$destroy', function(){
		removeListener();
	});
	
	$scope.loadMore = function () {
		c.data.new_limit = c.data.limit + (parseInt(c.options.limit_article) || 10);
		c.server.update();
	}
}

変更したら、Update。


さて次は、この編集済みウィジェットを、kb_category ページに適用していく。

冒頭に戻ってService Portal -> Service Portal Configuration → Page Editor → Select Page... → kb_category → Edit Knowledge Base (kb_category) page in Designer ➚ と進み、↓の画面を再度表示させる。


左上のFilter Widget で KB Category Page を検索し、先ほど作成した「Copy of KB Category Page」の方を右側の領域へドラッグ&ドロップし、もともとの「KB Category Page」はゴミ箱へ。


さて、この状態でポータルに戻ってKnowledgeの表示順を見てみよう。
無事に次のようにABC=文字列順で並んでいることが確認できた。
Can I upgrade my operating system? What are the system requirements?
How can I find the MAC address of my Ethernet or wireless interface?
How do I create and delete users?
Where can I obtain updates and new releases?

さらに、子カテゴリ内に記事のある親カテゴリを表示させた場合も次のように全体で文字列順ソートされていることが確認できた。

まぁ日本語環境の場合は漢字を含む記事タイトル等も考えられ、そもそも文字列順のソートというのはあまり馴染まない気もするため、記事タイトルに数字の章番号を打つなどしないと満足いく表示は実現できないかもしれないが、最低限乱数表示という秩序のない状態はこのカスタマイズでも脱却できるということが分かった。

またそのうちカテゴリ内の表示順を任意に指定するカスタマイズにもチャレンジしてみたい。今回はここまで。

執筆予定→完了:
Servicenowのポータルでのナレッジ記事の表示順を任意に指定できる様にするためのカスタマイズ(今のところ出来ませんでした)
Servicenowのポータルでのナレッジ記事の表示順を任意に指定できる様にするためのカスタマイズ(完成版)



0 件のコメント:

ウェブサイトのURLにおけるトレイリングスラッシュの解釈と有無による動作の違い

インターネットが現代社会におけるコミュニケーションの基盤となっている今日、ウェブサイトのURLはビジネスや個人ブランディングにとって重要な役割を果たしています。URLは単にウェブページへの経路を示すだけでなく、SEO(検索エンジン最適化)においても重要な要素です。この記事では、U...