5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OutSystems Aggregate で動的SQL

Last updated at Posted at 2021-12-06

先日、検索画面から動的にクエリを構成したいんだけど、Aggregate だと検索条件が決め打ちになるので、検索条件が設定されていたら検索条件に加える、ということができないと相談をうけることがありました。

スキャッフォールディングで作成すると、自動的にこの対応がなされるのですが、複数の検索条件を想定して一から検索画面を作る際に思いつかなかったりと、意外に盲点になっている方がいらっしゃるのかなと思い、今回記事にしてみました。

#パラメータは Aggregate のなかで評価できる

単純な入力有無チェックを行う場合は、次のようなフィルタを追加することで、AdvancedSQL にすることなく、実現できます。

<入力パラメータ> = "" or <入力パラメータ> = Entity.Field

パラメータチェックは、最初(左側)にします。これで、入力があったら、検索条件に加えるという動作になります。

例えば、アカウントテーブルを定義して、名前、タイプ、開設日のフィールドを定義したとします。アカウント検索画面を作成して、入力されていたら条件に加える、という標準的な仕様があったとします。その場合は、このような感じになります。

OutSystemsAggregate1.png

SearchXXXというのは、各検索入力値です。

#入力有無以外のロジックは埋め込めるか

式を評価できる仕様にはなっていますが、シンプルな入力有無チェック以外の要件は、なかなかフィルタの中に記述しきれないと思います。

その場合は、Aggregate を呼び出す前に、呼び出し元で要・不要判定だけしておいて、Aggregate では、

<要・不要判定結果フラグパラメータ> and <入力パラメータ> = Entity.Field

のようにすることもできます。こちらは、もちろん and です。

パラメータではなく、関数に差し替えることもできますが、複雑な処理であれば、パラメータを使って外で計算するほうが、トラブルシューティングしやすいでしょう。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?