ForAll 関数
これまで、単一目的の関数を使用したテーブルの操作について学習しました。 これらの関数は理想的なシナリオでは問題なく機能しますが、より高い柔軟性が必要な場合や、1 つの関数で対応できない場合があります。 このような状況では、ForAll 関数を使用できます。
ForAll 関数は、テーブルのすべてのレコードに対して数式を適用します。 数式では、値を計算したり、データの変更や接続の操作などのアクションを実行したりすることができます。
現在処理されているレコードのフィールドは、数式内で利用できます。 その他の値と同じように、名前でそれらを参照できます。 また、アプリ全体でコントロールのプロパティやその他の値を参照することもできます。
たとえば、ForAll(CustomerOrders, Office365.SendEmail(Email, "ありがとうございます", " ご利用ありがとうございます、 " & FirstName)) を使用して、CustomerOrders テーブルのすべてのメール アドレスに個別のメールを送信できます。 メールの件名は "ありがとうございます" になり、本文は "ご利用ありがとうございます、" になり、"名" フィールドに格納されている値が続きます。
この例は、Concat の例と 2 つの重要な点で異なります。 1 つ目は、ここでは CustomerOrders テーブルのレコードごとに 1 件のメールが送信されます。 そのため、レコードが 50 個ある場合、50 件の異なるメールが送信されます。 Concat の例では、1 件の電子メールのみが、To: 行の 50 個すべてのメール アドレスを使って送信されます。 2 つ目は、このメールでは CustomerOrders テーブルから "名" フィールドも参照されます。 ForAll 関数を使用する場合、レコードごとにすべてのフィールドを使用できます。
ForAll を使用するときの注意事項
ForAll は非常に便利な関数ですが、数式の作成を開始するときに知っておくべき点もいくつかあります。
数式には、Patch 関数と Collect 関数でデータ ソースのレコードを変更するなど、アクションを実行する関数を含めることができます。
ForAll 関数のサブジェクトであるテーブルを変更することはできません。 これには、テーブルでの Patch 関数または Collect 関数の使用が含まれます。
この数式では接続でメソッドを呼び出すことができます。
; 演算子を使用して、レコードごとに複数のアクションを実行できます。
数式を記述するときは、レコードを任意の順序で、また可能な場合は並列で処理できることに留意してください。 テーブルの最初のレコードを最後のレコードの後に処理することもできます。 順序の依存関係は避けてください。 このため、ForAll 関数内で Set、UpdateContext、Clear、ClearCollect の関数を使用することはできません。これらを使用すると、この影響を受けやすい変数を保持しやすいためです。 Collect は使用できますが、レコードが追加される順序は定義されていません。
ForAll は委任可能ではありません。つまり、外部データと共に使用した場合に、レコードの一部が処理されない可能性があります。 返される結果は完全なストーリーを表さない場合があります。 数式を記述する際に、この制限が存在することを知らせ、可能であれば委任できる代替の選択肢に切り替えるように提案する警告が表示される場合があります。 ForAll はコレクションに対応していますが、委任可能ではない点に注意してください。 詳しくは、「委任の概要」を参照してください。
ForAll 関数には、ほとんどの Power Apps 関数よりも多くのルールがあります。 また、Set や UpdateContext などの関数を使用できないため、数式を処理する別の方法を見つけなければならない場合があります。 ForAll と共に Set を使用する必要がある理由は、変更されたレコード数を追跡すること、これらのレコードに関する情報を取得することなどのためであることがよくあります。 同じデータを追跡するコレクションを更新する Patch を使用すると、同じ結果が得られることがわかります。
ForAll 関数の使用法とルールの詳細については、Power Apps での ForAll 関数を参照してください。