きっかけ
例えば Knowledge の Administration のモジュールには何がある、といった調査を、Excel などでフィルタしながら調査できるようにしたい、と思ったのがきっかけです。ServiceNow の Navigation メニューを下にスクロールしながらメモするとかではなく。
前提
- Navigation メニューの表示に使用されている sys_app_module テーブルに Link Type = separator のレコードがあると、以降の Order 値のレコードがグルーピングされて表示されています。これをうまく活用したいです。
- ServiceNow の開発者でなくてもできるように、Script は使わず、エクスポート後にデータ加工する前提で方法を検討しました。自宅の私用の PC には Excel は入っていないので、Google Drive のスプレッドシートを使用しました。
- Link Type = separator のレコードの Display menu が空欄の場合は、レコードのグルーピングではなく、区切り線表示をしているようですが、その対応は割愛します。
ServiceNow からエクスポート
フィールドは、Application menu, order, Link type, Display menu の 4 個を選びます。Application menu が not empty のレコード および Active = true のレコードを選択します。
図のように Application menu および order をソートするかわりに、エクスポート後にソートしても良いです。
エクスポート後、Application menu が empty になっているレコードが見つかることがあります。sys_id に該当するアプリケーションが存在しないためです。それらのレコードも除去します。
仕様みたいなもの
- Application menu 単位で、separator が出現するまでの間のメニューは第 1 階層にする。
- separator が出現したら、separator の名前を第 1 階層とし、次の separator を見つけるまで同じ名前にする。以降のメニューは第 2 階層にする。
- 次の Application menu に進んだら、再びメニューを第 1 階層にする。以降その繰り返し。
スプレッドシートの設定
追加する列
エクスポートしたフィールドに加えて下記の 4 列を追加します。最終的に level1 および level2 が得たい結果です。
grouping, level1, level2
各列の式
grouping は下記のようにします。
- Link type = Separator なら Display menu の値をセット。
- Separator 以外の場合、上の行の値を継続。ただし Application menu が変わっている場合は空欄にします。
level1 は、grouping が空欄なら Display menu の値、grouping の値があるなら、その値にします。
level2 は、grouping が空欄なら、空欄。grouping の値がある場合、Separator ならハイフン記号にして、Separator ではない場合は Display menu の値にします。
整形
- 新しいシートを用意しておき、すべての列をコピーして、「特殊貼り付け」>「値のみを張り付け」を選んで新しいシートに張り付けします。 そのうち、Application menu, level1 および level2 の列だけを残します。
- level2 の値がハイフン記号だけの行を削除します。
結果
Application menu が Knowledge で、level1 が Administration のメニューには何があるか、スプレッドシートで調査できるようになりました。