はじめに
Power Automateでのループアクションというと"Do until"と"Apply to each"がありますが、今回はこれらのループ内で実行されたアクションの出力結果をループ外から参照する方法について紹介します。
Do until
Do until内の処理はこんな感じ。
そんな凝ったことはしてないですね。
リストアイテムのIDが1~5のものを順番にDo until内で取得しています。
ループ外からbody関数で参照
Do untilの外からDo until内の「項目の取得」アクションを参照するなら以下のような式になります。
body('項目の取得(Do_until)')
この結果取得できる結果は以下のようなものです。
{ "@odata.etag": "\"1\"", "ItemInternalId": "5", "ID": 5, ... "{HasAttachments}": false, "{VersionNumber}": "1.0" }
単一の結果ですね。
これはDo until内で最後に実行された結果が取得されています。
すべての実行結果を取得するには
Do until内で実行された特定のアクションの実行結果をすべて取得するには、配列変数(array型)の変数を用意して、ループ内でアクション実行後に配列変数に追加してあげる必要があります。
あとはループ外で配列変数を参照してあげればいいですね。
ちなみにN番目のループ結果、例えば3番目のループ結果を取得したい場合は以下のようになります。
variables('DoUntil')[2]
配列変数は0から始まるので、1番目の値を取得したい場合は0、2番目の値を取得したい場合は1となります。
他にも特定の結果だけ取得したい場合は、「アレイのフィルター処理」を実施してあげればよいですね。
おまけ(result関数)
Power Automateの関数にはresult関数というものがあります。
この関数を利用することで、Do until、Apply ro each、Scopeアクションで実行されたアクションたちの実行結果や、開始時刻や終了時刻などを取得することができます。
これを以下のようにDo untilの結果を参照するようにすると以下のような式になります。
result('Do_until')
この結果得られるのはbody関数で参照したときと同様、Do untilループの最後のループで実行された結果が返されます。
Apply to each
Apply to each内の処理はこんな感じ。
range関数の中身はこんな感じです。
range(1, 5)
1~5のテーブルを順に実行させているだけです。
ループ外からbody関数で参照
Apply to eachの外からApply to each内の「項目の取得」アクションを参照するなら以下のような式になります。
body('項目の取得(Apply_to_each)')
この結果取得できる結果は以下のようなものです。
[ { "@odata.etag": "\"1\"", "ItemInternalId": "1", "ID": 1, ... "{HasAttachments}": false, "{VersionNumber}": "1.0" }, { "@odata.etag": "\"1\"", "ItemInternalId": "2", "ID": 2, ... "{HasAttachments}": false, "{VersionNumber}": "1.0" }, { "@odata.etag": "\"1\"", "ItemInternalId": "3", "ID": 3, ... "{HasAttachments}": false, "{VersionNumber}": "1.0" }, { "@odata.etag": "\"1\"", "ItemInternalId": "4", "ID": 4, ... "{HasAttachments}": false, "{VersionNumber}": "1.0" }, { "@odata.etag": "\"1\"", "ItemInternalId": "5", "ID": 5, ... "{HasAttachments}": false, "{VersionNumber}": "1.0" } ]
Apply to each内のアクション結果をループ外から参照すると、Do untilとは違い、ループ内で実行された結果すべてが配列形式でかえされます。
特定の項目を取得するには
特定の項目を取得するには「アレイのフィルター処理」を行うか、以下のようにN番目の項目を指定してあげればよいですね。
body('項目の取得(Apply_to_each)')[0]
おまけ(result関数)
result関数の説明は先ほど行ったので割愛すると、Apply to eachの結果に対してresult関数で参照すると以下のような式になります。
result('Apply_to_each')
この結果はApply to eachで実行されたすべての結果を返します。
おわりに
同じループ処理といってもDo untilとApply to eachでは参照して得られる結果に違いがあります。
この違いを理解してフローを作成するようにすると、Power Automateでのループ処理に少し詳しくなれるかもしれません。