LogicApps:配列のフィルターアクションでORなどの複合条件を作る
LogicApps の配列フィルターのアクションをよく使うんですが、OR条件とかAND条件とか使いたくなるときがありますよね。
何度か使ってるので、書き残しておこうと思います。
通常の使い方
通常は配列の要素を「Item()」で取り出して、判定します。
配列にオブジェクト要素が入っていれば、「Item()['ObjectName']」で取り出します。
あとは条件を書くだけ、というシンプルなものですね。
例えば、以下のような設定であれば、
こんな感じの結果になりますね。
ただ、このフィルター条件、初期のUIだと一つしか条件を記述することができません。
そこで、詳細モードが利用できます。
詳細モードの使い方
詳細モードの使い方は単純です。配列の要素が一つ一つ取り出されて条件にかけられるものなので、その一つ一つに対して「True」か「False」を返すだけです。
なので、equalsやcontaincsなどの論理比較関数を使って結果を返すのが通常の使い方です。
さっきと同じ条件の書き方が以下のようになります。
@equals(item(), 3)
最終的に「True」として判定されたものだけが、結果の要素として取り出すことができます。
AND・OR条件の書き方
詳細モードの使い方がわかっていれば、そんなに難しいことはありません。シンプルにand・or の関数が利用できます。
例えば、[1,2,3,4,5] の配列のうち、「3」もしくは「4」に一致する場合のみ抽出したい場合は、以下のように記述します。
@or(equals(item(), 3),equals(item(), 4))
これで、and条件も同様に記述できます。
and or をネストさせれば、さらに細かな複合条件も書けますが、あとは見渡し次第かなと思います。
参考
関数が書きづらい、といった場合には複数のフィルターアクションを作ることでも実現できます。
以下のHiroさんのブログが参考になると思います。実現することは一緒なので、お好みのやり方でどうぞ。