本記事では、
①Servicenowのポータルでのナレッジ記事の表示順の謎
↑の内容を理解している事と、
②Servicenowのポータルでのナレッジ記事の表示順をタイトル順にするためのカスタマイズ③Servicenowの既存のテーブルにカラムを追加する
↑の設定を実行済みの環境を前提に、Servicenowのポータルでのナレッジ記事の表示順を任意に指定できる様にするためのカスタマイズを行いたい。
※本記事の検討内容では成功しませんでした。成功パターンは↓の追記をご覧ください。本記事自体は理解の一助となるかもしれないので一応残しておきます。
2020/10/20追記:Servicenowのポータルでのナレッジ記事の表示順を任意に指定できる様にするためのカスタマイズ(完成版)
次にそれぞれの記事にカスタマイズが成功したときに表示順の変化を観察できる様、次の通りにOrder of sort の値を入れておく。
KB0000012=100, KB0000031=200, KB0000015=300, KB0000014=400
さてここまで下準備ができたらいよいよウィジェットのスクリプトを変更していく。
フィルタナビゲータから Service Portal -> Widgetsを表示。②で作成した「Copy of KB Category Page」を探す。
設定フォームを開き、Client controller の②で修正した部分のスクリプトをコメントアウトする。
※Client controllerで「u_order_of_sort」の値を使う方法が不明だったため、筆者はこの方法を取ろうと考えた。
【修正前】
// opus change - sort documents by title name
c.data.items.sort(function (a, b) {
return a.title.localeCompare(b.title);
});
【修正後】
// // opus change - sort documents by title name
// c.data.items.sort(function (a, b) {
// return a.title.localeCompare(b.title);
// });
【追加行】
data.orderBy = options.u_order_of_sort;
期待通り、と思ったがなんと!もともとの仕様通りsys_id順になっているだけだった。
なんてこった。またいろいろ検索してみるとなんと、同じことをやってる人が挫折しているのを発見。。。
https://community.servicenow.com/community?id=community_question&sys_id=4f8a6e0ddb2f97c067a72926ca96196c
こりゃまいった。
詳しい事は分からないがどうやら「Server script」でいくら頑張っても表示側に渡される前の段階でsys_id順の並びになる様な仕組みになっている模様。
改めてスクリプトをよく眺めてみると、dataにクライアント側に送る中身を作っているというよりはsqlのリクエストの前提条件を定義しているに過ぎないように見えてきた。sqlを投げるところのロジックがわかれば、この路線での進め様もあるが、現状不明。
したがって並び順の指定は「Client controller」のスクリプトか「Body HTML template」のdhtmlで何とかするしかないということだろうか。まいったねこりゃ。加えて「Client controller」側で u_order_of_sort を指定しようにもそもそもクライアント側に値が渡されているのか?渡されているとして名前は?等はブラックボックスでよくわからない。。。
2020/10/20追記ここから:
どうやら↑の理解にはいろいろと誤解があった事が判明。
-正しかった事-
・Server script内部でkb_knowledgeからのデータ取得のロジックが直接は組まれていない。
-間違っていた事-
・dataにはしっかりとクライアント側に送る中身が格納されている。
-わかった事-
・データはKB Category PageウィジェットのServer scriptで下記の処理でなんとkb_knowledgeテーブルからではなく「getKBCategoryArticleSummaries」により、kb_categoryテーブルから収集している。
var kb_cat = new GlideRecord("kb_category");
data.categoryDisplay = gs.getMessage("Select a category");
data.items = [];
data.categoryExists = false;
if (kb_cat.get(data.category)) {
data.categoryExists = true;
data.categoryDisplay = kb_cat.getDisplayValue();
data.items = $sp.getKBCategoryArticleSummaries(data.category, data.limit + 1 , 250);
}
・なお、 getKBCategoryArticleSummaries の内部処理は不明。
2020/10/20追記ここまで:
不便なつくりにしてくれたもんだ。
ということは残る手段としては、タイトルでのソート(②の)カスタマイズを生かし、デフォルトの short_description=タイトルに運用ルールとして桁数を決めたprefixをつけて記事を作成しておき、クライアント側で決めた桁数のprefixを削除して表示させる、みたいな運用とセットの施策しかないのかもしれない。
ちょっと今日のところはここでリタイア。
もし任意の順番での並び順指定が出来た方がもしいらっしゃいましたら、是非コメントお願いします。
<後日出来たので追記:Servicenowのポータルでのナレッジ記事の表示順を任意に指定できる様にするためのカスタマイズ(完成版)>
0 件のコメント:
コメントを投稿