Aggregate使えばSQL書かずに検索できますが、自分で複雑なSQL書いて検索したいとき、SQLツールを使います。
実行結果はAggregateの場合と同じように画面から参照できます。
Table of Contents
公式情報
使用手順
- SQLを準備する
- SQLのSELECTで取得する列の構造を、DataレイヤのStructuresの下に作成しておく
ただし、出力構造が既存のEntityそのままだったりすると、そのEntityが使えるのでStructureは不要。
型や列数が異なるとエラーになるので、SQLツールを使うたびに新しいStructureを用意することになりそう。
参考:http://www.outsystems.com/help/servicestudio/9.1/index.htm#t=Using_Data%2FSQL_Output_Structure.htm
指定した出力構造の列数とSQLの列数が一致しないとこんなエラーが出ます。
- SQLツールをActionのフローの中にドラッグ&ドロップする
- 設定(SQL、入力、出力構造=上で用意しておいたもの)
- 利用法はAggregateと同様(画面に配置したTable RecordsのSource Record Listに設定したり)
使用例
前提
こんな感じのEntityがあるとします。
メンバーマスター(Member)と、各メンバーが毎日作成する日報(DailyReport)を想定。
メンバーが日報を提出した日はDailyReport内に
- MemberId=そのメンバーのId
- WorkDate=提出日
のレコードが登録され、未提出の日はその分のレコードが登録されていない状態です。
設定
外部結合を使って、「メンバー名、今日提出したか(boolean)、昨日提出したか(boolean)」を返すことにします。
まずはStructureを用意します。上の3項目にソート用にMemberIdも追加しました。
ちなみにこれを追加する先は、Dataレイヤ→Structuresです。Structuresを右クリックしてAdd Structureしてください。
画面のPreparationアクションにSQLツールを配置。
配置したSQLツールをダブルクリックして下記のとおり設定。指定内容は、Parametersに2項目、Output Structureにうえで用意したStructure、SQLタブに実際のSQL文。
SQLでは、{}:Entity名 []:Attribute名 @:Parameterの指定です。TEST実行した後Executed SQLタブを開くとEntityとAttributeは実際の値に展開されたものが確認できます。
SQLをシンプルにするため、今日の日付、昨日の日付はパラメータにしてOutSystemsの組み込み関数で計算して渡すようにしました。
StatementがSQL文を入力するところです。その下に、Parameterとして指定した項目が自動で表示されています。
結果
後はAggregateを使う時と同じように処理できます。
今日、昨日の列には、値がTRUEなら組み込みのチェックマーク画像を表示するようにしてみました。