LogicApps の配列フィルターのアクションをよく使うんですが、OR条件とかAND条件とか使いたくなるときがありますよね。 Show docs.microsoft.com 何度か使ってるので、書き残しておこうと思います。 通常の使い方通常は配列の要素を「Item()」で取り出して、判定します。 配列にオブジェクト要素が入っていれば、「Item()['ObjectName']」で取り出します。 あとは条件を書くだけ、というシンプルなものですね。 例えば、以下のような設定であれば、 こんな感じの結果になりますね。 ただ、このフィルター条件、初期のUIだと一つしか条件を記述することができません。 そこで、詳細モードが利用できます。 詳細モードの使い方詳細モードの使い方は単純です。配列の要素が一つ一つ取り出されて条件にかけられるものなので、その一つ一つに対して「True」か「False」を返すだけです。 なので、equalsやcontaincsなどの論理比較関数を使って結果を返すのが通常の使い方です。 https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#equals さっきと同じ条件の書き方が以下のようになります。
最終的に「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」に一致する場合のみ抽出したい場合は、以下のように記述します。
これで、and条件も同様に記述できます。 and or をネストさせれば、さらに細かな複合条件も書けますが、あとは見渡し次第かなと思います。 参考関数が書きづらい、といった場合には複数のフィルターアクションを作ることでも実現できます。 以下のHiroさんのブログが参考になると思います。実現することは一緒なので、お好みのやり方でどうぞ。 mofumofupower.hatenablog.com こんにちは。アーティサン株式会社の小刀稱(ことね)です。 「Power AutomateでExcelをSharePointリストにインポートしたい時に考えること」シリーズの第6回です。 本シリーズでは、私が実際にPower Automateを用いて、「ExcelをSharePointリストにインポートする」フローを作成していきます。 また、作成の際に学んだ点や躓いた点を中心に紹介いたします。 Power Automateでどんな事ができるのか知りたい、実際の作成方法を知りたい、という方に向けた記事です。 前回は、Microsoft Graph APIベースの「SharePoint REST V2.0」を使用して、 SharePointのドライブ一覧を動的に取得し、一覧から今回使用するドライブ情報をドライブ名で検索する手法についてお伝えしました。 第5回目の内容はこちらを参照ください。 Power AutomateでExcelデータをSharePointにインポートするために考えること(第5回) 今回は、「動的にExcelデータを取得する」方法の続きで、ExcelデータのファイルIDを動的に取得する方法についてお伝えしていきます! Excelデータの動的な取得(ファイルID編) その2ファイルIDを取得するには、以下の手順を実施していきます。
前回のブログでは、「ドライブ一覧から今回使用するドライブ情報をドライブ名で検索」までが完了しました。 今回は「対象のドライブIDを取得」についてお伝えします。 前回アレイのフィルター処理アクションで取得した”Excelファイルの保存場所”に関する情報は、以下のとおりです。 この中から「id」値(ハイライト部分)を抽出します。 「JSONの解析」アクションを使ってid値の取得を試したが・・・私はまず以下の手順でid値を取得してみました。
すると自動的にApply to eachアクションで囲われました。 id値は1つしかないのに、なぜApply to eachアクションで囲われるのでしょうか。 それは、アレイのフィルター処理アクションで得た結果のbody要素が配列([ ~ ])になっているためです。 Power Automateでは、配列内の項目を取得する場合、自動的に「Apply to each」アクションで囲まれるようになっています。 しかし今回取得されるid値は1つであることが明確です。 このような場合、わざわざApply to eachアクションを行う必要はありません。 よって、不要なApply to eachアクションを回避するように設定しましょう。 回避が必要な理由については、本記事の最後で整理しますね。 「Apply to each」アクションを回避してid値を取得しようさて、先程とは方法を変えてid値の取得を試みたいと思います。 目標は”Apply to eachを回避しつつ、id値を取得”することです。 これを実現するための考え方としては、「アレイのフィルター処理」アクションで得た結果のbody要素のうち、先頭項目のid値を抽出するというものです。 上記で説明した考え方が少し分かりづらいので、順を追って説明していきます。 まず、アレイのフィルター処理アクションのbody要素は、以下の式によって取得できます。(上図(1)破線部分) body(‘アレイのフィルター処理’) さらに取得したbody要素(=配列)のうち、先頭項目だけ取得するには、first()関数を用います。 first(body(‘アレイのフィルター処理’)) 最後に、上記で取得した結果から、id値を抽出します。 具体的には以下です。(上図の(3)) first(body(‘アレイのフィルター処理’))[‘id’] 上記式を設定することで、作成アクションがApply to eachアクションで囲まれることを回避できました。 ドライブIDを取得する部分のフローは以下のとおりです。 ちなみに今回は、取得した要素のうち、先頭項目だけ取得するためにfirst()関数を用いました。 要素の0番目を取得する:body(‘アレイのフィルター処理’)[0][‘id’] 要素の末尾項目を取得する:last(body(‘アレイのフィルター処理’))[‘id’] Apply to eachを回避すべき理由最後に、なぜ不要なApply to eachを回避する必要があるのか考えてみましょう。 それは、以下2つの理由があります。
さて、今回の連載でドライブIDを取得するまでのフローが完成しました。 今回はここまで! 不要なApply to eachを回避する手法は、汎用的に活用できる内容ですので、是非覚えていただければと思います。 次回は、ExcelデータのファイルID・テーブルIDを動的に取得する方法についてお伝えします。 ここまで読んでいただき、ありがとうございました。 弊社ではPower Platform(Power AppsやPower Automateなど)を用いてお客様の業務を自動化するご支援を数多く承っております。 業務の中で、「普段手動でやっている業務を自動化できないか」というような疑問がある場合には、お気軽にアーティサン株式会社までお問い合わせください。 小刀稱知哉 大分県出身(温泉大好き♥♥)、現在は東京都在住 1990年4月9日生まれ 30才にしてメーカーの技術営業からIT業界にジョブチェンジ!!! 趣味は読書 Power Platform(SharePoint・Power Apps・Power Automate)に関する営業活動や設計、開発などを担当しております! |