繰り返し処理
Power Appsには一般的なプログラミング言語によくあるforやwhileといった繰り返し処理のためだけの構文は無く、基本的にテーブルに対して反復処理を行う関数のみがあります。
ForAll関数
ForAll関数は指定したテーブルのレコード全てに対して同一の処理を行い、その結果をテーブルとして返します。
例えば、次のようなテーブルがあったとします。
Value | Answer |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 0 |
このテーブルのAnswerカラムをValueの100倍の値に更新したい場合は以下のような実装になります。
ClearCollect(myTable, AddColumns(Sequence(4), "Answer", 0));
ClearCollect(myTable, ForAll(myTable, {Value: Value, Answer: Value*100}));
1行目で先のテーブルを作成し、ForAllでAnswerを計算させて改めてmyTableに内容を保存します。
Value | Answer |
1 | 100 |
2 | 200 |
3 | 300 |
4 | 400 |
ForAll関数の第2引数の評価結果が空の場合は、結果のテーブルは元のテーブルよりもレコード数の少ないテーブルになります。
例えば次のような実装を行ったとします。
ClearCollect(myTable, ForAll(myTable, If(Value<3, {Value: Value, Answer: Value*100}));
すると結果は以下のようになります。
Value | Answer |
1 | 100 |
2 | 200 |
UpdateIf関数
テーブルの特定条件にマッチしたレコードに対して更新を行いたい場合はUpdateIf関数で行います。
この「特定条件にマッチ」という部分を逆手に取ると、全レコードに対して処理を行うこともできるわけです。
先ほどの処理をUpdateIf関数を使った場合、以下のようになります。
ClearCollect(myTable, AddColumns(Sequence(4), "Answer", 0));
UpdateIf(myTable, true, {Value: Value, Answer: Value*100});
先ほどよりもこちらの方がちょっとだけ処理が早そうなイメージ……
Update関数
Update関数は「指定したレコードを置き換える」関数です。
Update(myTable, {Value: 1, Answer: 0}, {Value: 1, Answer: Value * 100})
上記は、Valueが1、Answerが0のレコードを、ValueはそのままでAnswerをValue*100に更新します。
つまり、指定したレコードと同じ内容のレコードのみ更新できます。
また、同じ内容のレコードが複数あった場合、最初のレコードしか更新しません。
ただし、第4引数にAllを指定すれば、第2引数と同じレコードが複数あった場合、全てのレコードに対して更新処理が行われます。
今回はForAll、UpdateIf、Updateの3つの繰り返し処理を行う関数を紹介しました。
次回はまた別の繰り返し処理を行う関数を紹介したいと思います。
コメント