SQLクエリによってデータを取得するTableの動的ソートの使用
On Sortイベントで[(New On Sort Client Action)]を選択すると、Tableの動的ソートを有効にすることができます。Service Studioによって、各ヘッダーセルのSort Attributeを使用するソートロジックを含むアクションが作成されます。Sort AttributeはAggregateに適した形式になっており、Sort AttributeをSQLクエリで使用する前にエンコードする必要があります。
SQLクエリをデータソースとするTableの動的ソートを有効にするには、以下の手順を実行します。
-
TableのOn Sortイベントを処理するための新しいアクションを作成するには、Tableを選択し、On Sortに[(New On Sort Client Action)]を追加します。
On Sortイベントで[(New On Sort Client Action)]を選択すると、TableSortとStartIndexの2つのローカル変数も追加されます。
-
デフォルトのソートアトリビュートを定義するには、TableSort変数を選択し、Default Valueプロパティを「
"<Sort Attribute>"
」に設定します。このとき、<Sort Attribute>
はヘッダーセルのSort Attributeの値です。たとえば、Default Valueを「
"User.Name"
」に設定すると、UserエンティティのNameアトリビュートがデフォルトのソートアトリビュートとして設定されます。 -
新しいOnSortアクションフローで、Refresh Data要素のData Sourceを、Tableにデータを提供するSQLクエリが含まれるデータアクションに設定します。
-
SQLクエリにクエリパラメータを追加して、Nameを「
SortForSQL
」に設定し、Expand Inlineプロパティを[Yes]に設定します。Expand Inline
プロパティを[Yes
]に設定すると、最初の評価とSQLエンジンによるリテラル変換が行われないまま、実行時にデータベースに送信するSQLコードの一部としてクエリパラメータを使用できるようになります。 -
SQLスニペット
ORDER BY @SortForSQL
をSQLクエリに追加します。 -
新しい関数
EncodingSortForSQL
を作成します。この関数は、OnSortアクションで使用するTableSort変数をSQLクエリで使用できる形式にエンコードします。-
[Logic]タブで新しいサーバーアクションを作成し、以下の変数を追加します。
SortForAggregate
入力パラメータSortForSQL
出力パラメータEntity
ローカル変数Attribute
ローカル変数
-
新しいアクションのNameを「
EncodingSortForSQL
」に設定し、Functionプロパティを[Yes]に設定します。 -
Start要素とEnd要素の間にIfを追加し、Conditionに以下のExpressionを設定します。
Index(SortForAggregate,".")<> -1
-
先ほどのIfのFalseブランチにAssignを追加します。次のように割り当てを追加します。
SortForSQL
=SortForAggregate
-
Assignを追加して、IfのTrueブランチに接続します。次のように割り当てを追加します。
Entity
="{" + Substr(SortForAggregate,0,Index(SortForAggregate,"."))+ "}"
-
Ifを追加して、先ほどの手順で作成したAssignの右側に接続します。Conditionに以下のExpressionを設定します。
Index(SortForAggregate,"DESC",ignoreCase: True) <> -1
-
Assignを追加して、IfのTrueブランチに接続します。次のように割り当てを追加します。
-
Attribute
="[" + Substr(SortForAggregate,Index(SortForAggregate,".")+1,Index(SortForAggregate," ")-Index(SortForAggregate,".")-1) + "]"
-
SortForSQL
=Entity + "."+ Attribute + " DESC"
-
-
End要素を追加して、Assignの右側に接続します。
-
Assignを追加して、IfのFalseブランチに接続します。次のように割り当てを追加します。
-
Attribute
="[" + Substr(SortForAggregate,Index(SortForAggregate,".")+1,Length(SortForAggregate)) + "]"
-
SortForSQL
=Entity + "."+ Attribute
-
-
End要素を追加して、先ほどのAssignの下に接続します。
-
-
SQLクエリのSortForSQLパラメータを「
EncodingSortforSQL(TableSort)
」に設定します。