Skip to main content
Created for OutSystems 11. Not working on your version? Tell us about it!

 

 

 

 

 
Language:
 
リアクティブWebアプリにのみ適用されます
 
 
OutSystems

SQLクエリによってデータを取得するTableの動的ソートの使用

On Sortイベントで[(New On Sort Client Action)]を選択すると、Tableの動的ソートを有効にすることができます。Service Studioによって、各ヘッダーセルSort Attributeを使用するソートロジックを含むアクションが作成されます。Sort AttributeはAggregateに適した形式になっており、Sort AttributeをSQLクエリで使用する前にエンコードする必要があります。

SQLクエリをデータソースとするTableの動的ソートを有効にするには、以下の手順を実行します。

  1. TableのOn Sortイベントを処理するための新しいアクションを作成するには、Tableを選択し、On Sortに[(New On Sort Client Action)]を追加します。

    On Sortイベントで[(New On Sort Client Action)]を選択すると、TableSortStartIndexの2つのローカル変数も追加されます。

  2. デフォルトのソートアトリビュートを定義するには、TableSort変数を選択し、Default Valueプロパティを「"<Sort Attribute>"」に設定します。このとき、<Sort Attribute>ヘッダーセルSort Attributeの値です。

    たとえば、Default Valueを「"User.Name"」に設定すると、UserエンティティのNameアトリビュートがデフォルトのソートアトリビュートとして設定されます。

  3. 新しいOnSortアクションフローで、Refresh Data要素のData Sourceを、Tableにデータを提供するSQLクエリが含まれるデータアクションに設定します。

  4. SQLクエリにクエリパラメータを追加して、Nameを「SortForSQL」に設定し、Expand Inlineプロパティを[Yes]に設定します。

    Expand Inlineプロパティを[Yes]に設定すると、最初の評価とSQLエンジンによるリテラル変換が行われないまま、実行時にデータベースに送信するSQLコードの一部としてクエリパラメータを使用できるようになります。

  5. SQLスニペットORDER BY @SortForSQLSQLクエリに追加します。

  6. 新しい関数EncodingSortForSQLを作成します。この関数は、OnSortアクションで使用するTableSort変数をSQLクエリで使用できる形式にエンコードします。

    1. Logic]タブで新しいサーバーアクションを作成し、以下の変数を追加します。

      • SortForAggregate入力パラメータ
      • SortForSQL出力パラメータ
      • Entityローカル変数
      • Attributeローカル変数
    2. 新しいアクションのNameを「EncodingSortForSQL」に設定し、Functionプロパティを[Yes]に設定します。

    3. Start要素とEnd要素の間にIfを追加し、Conditionに以下のExpressionを設定します。

      Index(SortForAggregate,".")<> -1
      
    4. 先ほどのIfFalseブランチにAssignを追加します。次のように割り当てを追加します。

      • SortForSQL = SortForAggregate
    5. Assignを追加して、IfTrueブランチに接続します。次のように割り当てを追加します。

      • Entity = "{" + Substr(SortForAggregate,0,Index(SortForAggregate,"."))+ "}"
    6. Ifを追加して、先ほどの手順で作成したAssignの右側に接続します。Conditionに以下のExpressionを設定します。

      Index(SortForAggregate,"DESC",ignoreCase: True) <> -1
      
    7. Assignを追加して、IfTrueブランチに接続します。次のように割り当てを追加します。

      • Attribute = "[" + Substr(SortForAggregate,Index(SortForAggregate,".")+1,Index(SortForAggregate," ")-Index(SortForAggregate,".")-1) + "]"

      • SortForSQL = Entity + "."+ Attribute + " DESC"

    8. End要素を追加して、Assignの右側に接続します。

    9. Assignを追加して、IfFalseブランチに接続します。次のように割り当てを追加します。

      • Attribute = "[" + Substr(SortForAggregate,Index(SortForAggregate,".")+1,Length(SortForAggregate)) + "]"

      • SortForSQL = Entity + "."+ Attribute

    10. End要素を追加して、先ほどのAssignの下に接続します。

  7. SQLクエリのSortForSQLパラメータを「EncodingSortforSQL(TableSort)」に設定します。

  • Was this article helpful?