Power AutomateはMicrosoftが提供する業務を自動化するためのRPA(Robotic Process Automation)ツールです。 Show 課題:繰り返し処理を途中で抜けられない?Apply to each
繰り返し処理の途中で中断できない
解決策Apply to eachの代わりにDo untilを使うPower Automateには、繰り返し処理を行うもう一つのアクションとしてDo untilがあります。 一方、検索にヒットしないことも想定されます。この場合、Do untilの繰り返し回数の制限値に到達するまで繰り返されます。そのため、検索対象の最後の要素に到達したら繰り返しを終了させる条件を加える必要があります。 以上のことから、次の4点をDo untilループの内部に実装します。 ①検索判定式(検索対象の要素が検索条件に合致したら値が真になる式) 具体例を、次章の「事例」にて説明します。 空回りさせるApply to eachの繰り返し処理を途中で抜けるのは諦めて、検索条件に合致した後の繰り返し処理は何も実行しないようにすることはできます。Do untilを使うよりフローはシンプルになります。 ①検索判定式(検索対象の要素が検索条件に合致したら値が真になる式) 具体例を、次章の「事例」にて説明します。 事例Apply to eachの代わりにDo untilを使うここでは、Do untilを使って配列の値を検索し、ヒットしたら即ループを抜けるフローの簡単な例を示します。 「手動でフローをトリガーします」フローの最初に出てくる「手動でフローをトリガーします」では、実行時に検索文字を手動で入力します。 配列(array)検索対象の配列arrayの要素は以下のようにしました。
変数(loopCount、hit、final)変数loopCountは、Do untilループ内で繰り返し回数をカウントする整数で、初期値は0です。 Do untilの中身以下、Do
untilの中身を示します。 ①検索判定式検索条件に合致したことを判定する検索判定式を、ブール変数hitに設定します。 equals(variables('配列の名称')[variables('番号')], '検索文字') 実際の式は以下の通りです。triggerBody()['text']は、「手動でフローをトリガーします」で手動で入力した文字列です。 equals(variables('array')[variables('loopCount')],triggerBody()['text']) 変数hitは、配列arrayのloopCount番目の要素と検索文字が一致した場合に真(true)が設定されます。 ②ループカウンタループカウンタloopCountに+1を加えます。 ループするたびに変数loopCountの値が1ずつ増えます。 ③最終判定式 配列arrayの最後の要素まで到達したことを判定する判定式を、ブール変数finalに設定します。 greaterOrEquals(variables('loopCount'),length(variables('array'))) ④上記①と③のいずれかでループを終了する判定式Do
untilの繰り返し処理を終了する条件の入力欄に、以下の式を入力します。「詳細設定モードで編集」をクリックすることで、式が入力可能となります。 @or(variables('hit'), variables('final')) 「@or」は論理和を演算します。
実行結果上記フローを実行した結果は以下の通りです。 検索文字として'D'を入力した場合、配列arrayの5番の要素'D'がヒットします。 空回りさせるここでは、Apply to
eachの例を示します。 ①検索判定式(検索対象の要素が検索条件に合致したら値が真になる式)Apply to eachの中に、「条件」アクションを追加します。 もう一つの条件として、hit、次の値に等しい、false、を設定します。変数hitの初期値は偽(false)ですので、この条件式の値は最初は真(true)になっています。 ②検索判定フラグ(検索に一度ヒットしたらその後の値が真になるブール変数)「条件」アクションの「はいの場合」に、ブール変数hitを真(true)に設定するアクションを追加します。 これにより、一度検索にヒットしたら、変数hitの値は以後 真(true)を保持します。 「いいえの場合」には、何もアクションを追加せず、空にしておきます。 注意点「終了」アクションは使えない「コントロール」コネクタに、フローを終了させる「終了」アクションがあります。 Do untilの制限 Do untilには繰り返し回数に制限があります。 まとめPower Automateで、繰り返し処理を途中で終了させるフローを作成しようとする場合、Do untilアクションを使って実現できます。 参考Exit from "Apply to Each" |