Service PortalのCommunityにあるWidgetについて。Community - Create Eventの中にあるForumの選択肢を変更したい。

Kiichi Sato
Tera Contributor

Widgetの中の項目の、選択肢を変更する方法について質問させてください。

Servicenow歴3か月の初心者なのでお手柔らかにお願いします。

 

現在、Communityをプラグインして得られるCommunity - Create EventというWidgetのカスタムを行っています。

その中のForumという項目の選択肢を変えようとWidgetのClient controllerという項目を見ているのですが絞り込みに関するスクリプトを見つけられていません。

選択肢はCommunity > Administration > Forumsで見ることのできるテーブルのレコードで、初期の段階だとデモデータになっています。

このテーブルに自分の入れたいレコードを入れ、それだけを絞り込みたいです。

 

この事について参考になる情報、または他にいい方法があれば教えていただけると幸いです。

ご回答よろしくお願い致します。

find_real_file.png

1 件の受理された解決策

iwai
Giga Sage

"Create Event" Page 内にある Forums 項目の選択肢制御について調べてみました。

Widget "Community - Create Event" の Server script

	if(data.mode != 'edit')
		data.writableForumsForEvent = new CommunityForum().getHierarchialForumsWithContentAccess(CommunityConstants.EVENT_CONTENT_TYPE_ID,'content_write').data;

data.writableForumsForEvent に Forums 項目の選択肢 が格納されます。
抽出条件はForum[sn_communities_forum] の Content type に EVENT が含まれ、content_write の条件に一致するForum です。ここを変更することで 抽出を制御できます。
(CommunityForum().getHierarchialForumsWithContentAccess() この処理は Script include に定義されています。この処理自体を変更するのは極力やめておいた方が良いです。)

Server script の後、Widget "Community - Create Event" の Client Script (Client controller)

// 省略
			c.forums = c.data.writableForumsForEvent;
			c.flatForumList = c.forums;
// 省略
		c.filteredForums = c.flatForumList;
// 省略
			$('.cm-widget-post .cm-select2-forum div.cm-select2').select2('destroy');
			var template = '<option value=""></option>'+
					'<option data-ng-value="forum.sys_id" ng-disabled="forum.disabled"' +
					'data-ng-repeat="forum in c.filteredForums">{{forum.name}}</option>';

			$('.cm-widget-post .cm-select2-forum select.cm-select2')
				.html($compile(template)($scope)).select2({
				minimumResultsForSearch: 10,
				formatResult: formatForum
			});		

data-ng-repeat によって filteredForums 変数が Forum 項目の Select optionとなります。

調査方法は、個人インスタンスにPlugin"Communities"をインストールして、該当のWidgetを見つけ、動作確認して、ブラウザのDeveloper tool で HTML構造と Script解析し、 ServiceNow側の Page editor で Scriptを解析し、 Script debugger で Scriptの詳細動作を確認しました。

CommunityForum().getHierarchialForumsWithContentAccess() 関連の情報は、Google検索でも見つかりませんでした。非公開情報のようです。そういうものは詳細動作もカスタマイズも非公開にしたい物なので 深堀しない方が良いです。

元の投稿で解決策を見る

1件の返信1

iwai
Giga Sage

"Create Event" Page 内にある Forums 項目の選択肢制御について調べてみました。

Widget "Community - Create Event" の Server script

	if(data.mode != 'edit')
		data.writableForumsForEvent = new CommunityForum().getHierarchialForumsWithContentAccess(CommunityConstants.EVENT_CONTENT_TYPE_ID,'content_write').data;

data.writableForumsForEvent に Forums 項目の選択肢 が格納されます。
抽出条件はForum[sn_communities_forum] の Content type に EVENT が含まれ、content_write の条件に一致するForum です。ここを変更することで 抽出を制御できます。
(CommunityForum().getHierarchialForumsWithContentAccess() この処理は Script include に定義されています。この処理自体を変更するのは極力やめておいた方が良いです。)

Server script の後、Widget "Community - Create Event" の Client Script (Client controller)

// 省略
			c.forums = c.data.writableForumsForEvent;
			c.flatForumList = c.forums;
// 省略
		c.filteredForums = c.flatForumList;
// 省略
			$('.cm-widget-post .cm-select2-forum div.cm-select2').select2('destroy');
			var template = '<option value=""></option>'+
					'<option data-ng-value="forum.sys_id" ng-disabled="forum.disabled"' +
					'data-ng-repeat="forum in c.filteredForums">{{forum.name}}</option>';

			$('.cm-widget-post .cm-select2-forum select.cm-select2')
				.html($compile(template)($scope)).select2({
				minimumResultsForSearch: 10,
				formatResult: formatForum
			});		

data-ng-repeat によって filteredForums 変数が Forum 項目の Select optionとなります。

調査方法は、個人インスタンスにPlugin"Communities"をインストールして、該当のWidgetを見つけ、動作確認して、ブラウザのDeveloper tool で HTML構造と Script解析し、 ServiceNow側の Page editor で Scriptを解析し、 Script debugger で Scriptの詳細動作を確認しました。

CommunityForum().getHierarchialForumsWithContentAccess() 関連の情報は、Google検索でも見つかりませんでした。非公開情報のようです。そういうものは詳細動作もカスタマイズも非公開にしたい物なので 深堀しない方が良いです。