2020年10月18日日曜日

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

本記事では、
Servicenowのポータルでのナレッジ記事の表示順の謎
↑の内容を理解している事と、
Servicenowのポータルでのナレッジ記事の表示順をタイトル順にするためのカスタマイズServicenowの既存のテーブルにカラムを追加する
↑の設定を実行済みの環境を前提に、Servicenowのポータルでのナレッジ記事の表示順を任意に指定できる様にするためのカスタマイズを行いたい。

※本記事の検討内容では成功しませんでした。成功パターンは↓の追記をご覧ください。本記事自体は理解の一助となるかもしれないので一応残しておきます。

2020/10/20追記:Servicenowのポータルでのナレッジ記事の表示順を任意に指定できる様にするためのカスタマイズ(完成版)

まずサービスポータルの↓の画面に表示されている記事にそれぞれの情報を確認しておく。
それぞれの記事タイトルとKB番号、sys_idを控えておくと次のようになっている。
→②のカスタマイズの結果、デフォルトの並びであるsys_idの昇順ではなく、記事タイトルのアルファベット順(昇順)になっている事がわかる。

1.Can I upgrade my operating system? What are the system requirements?
 KB0000014, sys_id:8b031135474321009db4b5b08b9a7152
2.How can I find the MAC address of my Ethernet or wireless interface?
 KB0000031, sys_id:409de43187032100deddb882a2e3ecd9
3.How do I create and delete users?
 KB0000015, sys_id:93910db1474321009db4b5b08b9a7199
4.Where can I obtain updates and new releases?
 KB0000012, sys_id:0dd6457187032100deddb882a2e3ecb3

次にそれぞれの記事にカスタマイズが成功したときに表示順の変化を観察できる様、次の通りに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);
    // });


次に Server script の欄で function 定義が始まる直前に次の行を追加する。

【追加行】
    data.orderBy = options.u_order_of_sort;


この状態でupdateし、ポータルを見に行ってみる。

期待通り、と思ったがなんと!もともとの仕様通り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 件のコメント:

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

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