Interested in a ServiceNow event built for developers? Registration for now[dev]26 is officially open!

How can I configure multiple ORDERBY fields as the default sort when opening a list from a Module?

m-kishida
Tera Contributor

ServiceNowモジュールからリストを開く際に、デフォルトで複数列のソートを設定したいと考えています。
対象となるのはカスタムテーブルです。リストは、以下のソート順で開くようにしたいです。

1. aaaa DESC
 2. bbbb ASC
 3. cccc ASC
 4. dddd ASC

 

フィルタビルダーでは、以下のエンコードされたクエリは期待どおりに動作します。

ORDERBYDESCaaaa ^ ORDERBYbbbb ^ ORDERBYcccc ^ ORDERBYdddd

 

 

「並べ替えの追加」を使用して手動で並べ替えを設定し「実行」をクリックすると、生成されたリスト URL には、たとえば次のすべての ORDERBY 句も含まれます。

< custom_table > _list . do ? sysparm_query = ORDERBYDESCaaaa ^ ORDERBYbbbb ^ ORDERBYcccc ^ ORDERBYdddd

 

エンコードされたクエリ自体は有効だと考えています。
しかし、モジュールからリストを開いた場合、同じ複数列ソートが機能しません。
以下の方法を試しました。

  1. モジュール引数で sysparm_query を使用する
sysparm_query = ORDERBYDESCaaaa ^ ORDERBYbbbb ^ ORDERBYcccc ^ ORDERBYdddd

モジュールを開いた後、最初の ORDERBY のみが適用されているようです。
結果として得られる URL は次のようになります。

sysparm_fixed_query = ORDERBYDESCaaaa

残りのORDERBY句はもはや存在しません。

  •  sysparm_fixed_query を使用する
sysparm_fixed_query = ORDERBYDESCaaaa ^ ORDERBYbbbb ^ ORDERBYcccc ^ ORDERBYdddd

結果は同じで、最初のソート条件だけが残るようだ。

  • URL (引数から) を使用して
    、以下の方法も試しました:
< custom_table > _list . do ? sysparm_query = ORDERBYDESCaaaa ^ ORDERBYbbbb ^ ORDERBYcccc ^ ORDERBYdddd

そしてURLエンコード版:

< custom_table > _list . do ? sysparm_query = ORDERBYDESCaaaa % 5EORDERBYbbbb % 5EORDERBYcccc % 5EORDERBYdddd

しかし、モジュールを起動した後、URLは依然として以下のようなものに変換されます。

sysparm_fixed_query = ORDERBYDESCaaaa

そして、追加のORDERBY句は失われます。

sys_user_preferenceも確認しました。

リストに複数のソートフィールドを設定した後でも、設定にはプライマリソートフィールドのみが保存されるようです。例:

<table> .db.order = aaaa
 <table> .db.order.direction = DESC​​​​​​​​​​​​

つまり、sys_user_preferenceには、すべてのユーザーに対してこの4段階のデフォルトソートを定義する方法は提供されていないようです。

 

私の具体的な要望は以下のとおりです。

ORDERBYDESCaaaa
 ^ ORDERBYbbbb
 ^ ORDERBYcccc
 ^ ORDERBYdddd

 ユーザーがモジュールからこのリストを開いたとき。

理想としては、このモジュールからリストを開いた場合にのみソートが適用されるようにしたいです。テーブル全体のデフォルトのクエリ動作を変更したり、API、スクリプト、またはテーブルがクエリされるその他の場所に影響を与えたりしたくありません。

モジュールのデフォルトのソート順として、複数のORDERBY句を設定するための推奨される方法はありますか?

モジュールがこれを直接サポートしていない場合、推奨されるアプローチは何でしょうか?

例えば:

  • 保存済みフィルター
  • 別のモジュール/リスト構成
  • クライアント側のアプローチ
  • クエリ実行前のビジネスルール
  • 別のサポートされているメカニズム

可能であれば、クエリ前ビジネスルールは避けたいと考えています。なぜなら、それはこの特定のモジュール以外のクエリにも影響を与える可能性があるからです。

何かアドバイスをいただければ幸いです。

0 REPLIES 0