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.

Service Catalogのトップ画面をユーザーごとの最近使用したアイテムに変更したい

KazumaO
Tera Contributor

〇概要 

サービスポータルのService Catalogのトップ画面にOOTBでは「人気のあるアイテム(SC Category Page)」が表示されるが、これを表示ユーザーが最近使用したカタログアイテムの履歴が表示されるようにしたく、その方法を教えていただきたいです。 

 

〇要望

Service Catalogのトップ画面(sc_category)に各ユーザーが最近使用したカタログアイテムの履歴が表示されるようにする。 

カテゴリを選択時に紐づくカタログアイテムを表示する

 

〇確認したこと 

InstanceのWidgetを「人気のある最近のアイテムウィジェット(Recent & Popular Items widget)」に変更した。 

トップ画面は要求を満たしたが、カテゴリメニュー(SC Categories)でカテゴリを選択してもカタログアイテムの表示が切り替わらなくなってしまった。 

 

〇知りたいこと 

下記のいずれか

・Widgetを「人気のあるアイテム(SC Category Page)」にしたまま、オプション等で要望を満たす方法 

・Widgetを「人気のある最近のアイテムウィジェット(Recent & Popular Items widget)」に変更し、かつカテゴリを選択時に紐づくカタログアイテムを表示する方法 

・要望を満たせるその他のWidget

1 件の受理された解決策

iwai
Giga Sage

なるべく小さい影響で実現したいので、(大きな改造は技術力と開発や維持メンテナンスのコストが必要)

一番小さい影響は、ページレイアウトとして SC Category Page Widget の上にRecent & Popular Items Widgetを配置してしまう。カテゴリーを選択しても常に上に表示されてしまうのが少々煩わしいです。

 

常に表示されるのが煩わしいなら、それを解消するための改造する方法として、

Recent & Popular Items widgetに少々の改造(クローンして改造)をして、カテゴリーを選択されたら、非表示にする改造をする。

Widgetでは、URLを見てカテゴリーを選択しているかどうかを判定しています。

SC Category Page WidgetのServer Scriptの最初には以下のように書かれています。これはURLにsys_idが設定されていればそれをCategoryIDとして使用しています。 

Server Script

 

data.category_id = $sp.getParameter("sys_id");

 

HTMLでは、以下のように記述して、category_id 変数が設定されていなければ囲まれた部分を消します。

HTML

 

<div ng-if="!data.category_id">
 <!-- 表示処理 -->
</div>

 

 このくらいなら、小さい改造で済むと思います。


ほかに、Widgetの中にWidgetを埋め込む形で実現すると、OOTBのWidgetをクローンしないで、Upgradeの影響を回避する方法などにするとより良いとは思いますが、ここで説明するには長くなってしまいます。

元の投稿で解決策を見る

1件の返信1

iwai
Giga Sage

なるべく小さい影響で実現したいので、(大きな改造は技術力と開発や維持メンテナンスのコストが必要)

一番小さい影響は、ページレイアウトとして SC Category Page Widget の上にRecent & Popular Items Widgetを配置してしまう。カテゴリーを選択しても常に上に表示されてしまうのが少々煩わしいです。

 

常に表示されるのが煩わしいなら、それを解消するための改造する方法として、

Recent & Popular Items widgetに少々の改造(クローンして改造)をして、カテゴリーを選択されたら、非表示にする改造をする。

Widgetでは、URLを見てカテゴリーを選択しているかどうかを判定しています。

SC Category Page WidgetのServer Scriptの最初には以下のように書かれています。これはURLにsys_idが設定されていればそれをCategoryIDとして使用しています。 

Server Script

 

data.category_id = $sp.getParameter("sys_id");

 

HTMLでは、以下のように記述して、category_id 変数が設定されていなければ囲まれた部分を消します。

HTML

 

<div ng-if="!data.category_id">
 <!-- 表示処理 -->
</div>

 

 このくらいなら、小さい改造で済むと思います。


ほかに、Widgetの中にWidgetを埋め込む形で実現すると、OOTBのWidgetをクローンしないで、Upgradeの影響を回避する方法などにするとより良いとは思いますが、ここで説明するには長くなってしまいます。