スタッフブログ

意図しないFor each(Apply to each)の回避方法について(概要)①


はじめに

みなさんこんにちは。

今回はPower Automateを使う際に出てくる、[For each](旧デザイナーでは[Apply to each])について説明したいと思います。

この[For each]は、Power Automateを使い始めたばかりの方は最初につまずくポイントではないかと思います。実は私がPower Automateで最初につまずいたのもこの[For each]でした。

今回で発生する問題に対する回避方法も説明する予定だったのですが、つまずいた時のことを思い出して丁寧に書いていたら長くなってしまったので記事を二回に分けます。

 

For eachとは?

Power Automateは新デザイナーでは[トリガー][アクション]と呼ばれる要素から構成されています。旧デザイナーではこれらの他に[コントロール]と呼ばれる分類がありました。(新デザイナーでは[Control]という一つのコネクタのような扱いのようです。)

[コントロール]は条件分岐や繰り返しを行う際に使用するもので、条件分岐や複数の値を取得した際にそれぞれに処理を行う際等の使用します。

[For each]は複数の値を処理する際に使用される[コントロール]で、複数の値を取得する可能性のある、Dataverseの[行を一覧にする]やSharePointの[複数の項目の取得]で取得した値を、他のアクションで動的なコンテンツとして指定した際に、自動で作成されます。

[For each]内のアクションは取得した複数の値、それぞれに適用されます。

[名]がH.S.であるデータという条件でデータを取得し、メールの本文に動的なコンテンツとして指定し送信するというフローを考えてみます。

この場合、上記画像のように[メールの送信]のアクションが[For each]内に格納されます。そして条件に一致するデータが複数あった場合は、取得したデータの数メールが送られることになります。

 

どんな時に問題になる?

それぞれの値に処理を適用できるようになるということで便利な[For each]ですが、これが邪魔になることもあります。

主な問題はフローの可読性の低下、フロー作成の難易度が高くなることです。

可読性については、処理が長いフローで、複数の[For each]処理が重なる場合を考えていただければと思います。

実際には使うような処理ではありませんが、イメージとしては以下のような場合です。

[For each]が重なっているフローは動かすことができたとしても、可読性が低いので後からメンテナンスするのが難しくなります。

作成の難易度が高くなってしまう原因は[For each]内のアクションの値を[For each]外では動的なコンテンツとして指定することができないためです。

下記画像で[For each]外から中の[行を一覧にする 2]の値を使用しようとすると、以下のように表示され、[行を一覧にする 2]の値を指定することができません。

Power Automateはローコードでフローを作成することができるというのが大きな強みであるため、動的なコンテンツとして使用できなくなってしまうというのは大きな問題です。

式を使うことで値を使用することはできますので、②の記事ではそちらについて解説したいと思います。

 

さいごに

今回は記事を2つに分けさせていただきました。

次回、取得する値が1つの場合に[For each]を回避する方法、[For each]外から中のアクションの値を使用する方法について説明したいと思います。