Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

LogicApps:配列のフィルターアクションでORなどの複合条件を作る

LogicApps の配列フィルターのアクションをよく使うんですが、OR条件とかAND条件とか使いたくなるときがありますよね。

f:id:sugimomoto:20210126232620p:plain

docs.microsoft.com

何度か使ってるので、書き残しておこうと思います。

通常の使い方

通常は配列の要素を「Item()」で取り出して、判定します。

配列にオブジェクト要素が入っていれば、「Item()['ObjectName']」で取り出します。

あとは条件を書くだけ、というシンプルなものですね。

例えば、以下のような設定であれば、

f:id:sugimomoto:20210126232637p:plain

こんな感じの結果になりますね。

f:id:sugimomoto:20210126232643p:plain

ただ、このフィルター条件、初期のUIだと一つしか条件を記述することができません。

そこで、詳細モードが利用できます。

詳細モードの使い方

詳細モードの使い方は単純です。配列の要素が一つ一つ取り出されて条件にかけられるものなので、その一つ一つに対して「True」か「False」を返すだけです。

なので、equalsやcontaincsなどの論理比較関数を使って結果を返すのが通常の使い方です。

https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#equals

さっきと同じ条件の書き方が以下のようになります。

@equals(item(), 3)

f:id:sugimomoto:20210126232655p:plain

最終的に「True」として判定されたものだけが、結果の要素として取り出すことができます。

AND・OR条件の書き方

詳細モードの使い方がわかっていれば、そんなに難しいことはありません。シンプルにand・or の関数が利用できます。

https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#and

https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#or

例えば、[1,2,3,4,5] の配列のうち、「3」もしくは「4」に一致する場合のみ抽出したい場合は、以下のように記述します。

@or(equals(item(), 3),equals(item(), 4))

f:id:sugimomoto:20210126232703p:plain

f:id:sugimomoto:20210126232712p:plain

これで、and条件も同様に記述できます。

and or をネストさせれば、さらに細かな複合条件も書けますが、あとは見渡し次第かなと思います。

参考

関数が書きづらい、といった場合には複数のフィルターアクションを作ることでも実現できます。

以下のHiroさんのブログが参考になると思います。実現することは一緒なので、お好みのやり方でどうぞ。

mofumofupower.hatenablog.com