こんにちは。アーティサン株式会社の小刀稱(ことね)です。
Power Apps でアプリを作成するとき、ForAll 関数の中で、変数を更新したいと思ったことはありませんか?
しかし、ForAll 関数内でSet 関数やUpdateContext 関数を使用することはできません。(2022年3月時点)
本記事では、ForAll関数でSetやUpdateContextを使いたいと思ったときの対応策について紹介します。
全パターンが今回紹介する方法で対応できるわけではありませんが、1つの案としてご覧ください。
Power Appsを用いてアプリを作成したことのある方に向けた内容となっております。
やりたいこと:ForAll 関数内で変数を更新する場面
はじめに、今回やりたいことを説明します。
以下図、左側のコレクション( = colBefore )があったとします。本コレクションの中に「枝番を追加する」( = colAfter )というのが今回のやりたいことです。
枝番は、以下のロジックで付与します。
1行前の番号 <> 番号 → 枝番 = 1
1行前の番号 = 番号 → 枝番 = 1行前の枝番 + 1
番号が変わった場合は枝番を1に初期化し、番号が同じ場合は枝番を+1しています。
上記を行うためには、ForAll 関数の中で、1行前の番号を取得する必要があると考え、最初は以下のように記載しました。
Set(prevRecord, {番号: 0, 枝番: 0, 名前:""}); // 1行前のレコード
Clear(colAfter);
ForAll(colBefore,
Collect(colAfter,
{
番号: ThisRecord.番号,
枝番: If(prevRecord.番号 <> ThisRecord.番号, 1, prevRecord.枝番 + 1),
名前: ThisRecord.名前
}
);
Set(prevRecord, ThisRecord); // 1行前のレコードを更新
)
しかし、以下のエラーが発生してしまいました。
どうやら、ForAll 関数内ではSet 関数が使用できないようです。
(UpdateContext 関数も同様のエラーが発生します。)
対策:Last 関数を使用する
上記に対応するためには、Last 関数を用いて実装します。
Last 関数とは、指定したテーブルの最後のレコードを取得する関数です。
詳細は以下URLを参照してください。
Power Apps での First、FirstN、Last、および LastN 関数
以下にLast 関数を用いて修正した内容を記載します。
Clear(colAfter);
ForAll(colBefore,
Collect(colAfter,
{
番号: ThisRecord.番号,
枝番: If(Last(colAfter).番号 <> ThisRecord.番号, 1, Last(colAfter).枝番 + 1),
名前: ThisRecord.名前
}
)
)
ポイントは、Last(colAfter)の部分です。
ForAll 関数内では、colBeforeのレコード数分、colAfterに1行ずつレコードを追加しています。 よって、ForAll 関数内でLast(colAfter)を指定すると、colAfterに最後に追加したレコード( = colBeforeの1行前のレコード )が取得できるということになります。 イメージを以下図にしました。Last 関数を用いることで、無事枝番を付与することができました!
まとめ
本記事では、ForAll関数でSetやUpdateContextを使いたいと思ったときの対応策について紹介しました。
このような内容は、「知っていれば一瞬」ですが「知らなければ多くの時間が必要」となります。
当社では、今回のような実装のアイデアを多く発信していく予定ですので、是非今後ともご覧ください。
最後まで読んでいただき、ありがとうございました!
【こちらも合わせて読みたい】
地方自治体ローコード導入・運用支援サービス(Power Apps・Power Automate)
Microsoft社が提供するローコード技術であるPower Platformを用いて、自治体様のDX化を支援します。
X-SP | SharePoint デザイン・機能拡張サービス
デザイン×機能を兼ね備えたSharePointを提供いたします。
SharePointの利便性を向上し、操作性と視認性を兼ね備えたデザインでユーザーの業務効率化・ストレス低減を提供します。
内製化支援サービス | Power Platform(Power Apps・Power Automate)
Power Platform(Power Apps・Power Automate)開発や運用をスムーズに内製できるよう支援いたします。
DX人材育成プログラム | Power Apps・Power Automte 教育
Microsoft社が提供するローコード技術であるPower Platformを用いて、社内のDX化を推進するための人材を育成いたします。
Power Apps/Power Automateアプリ開発・導入支援サービス
Microsoft社が提供するPower Apps / Power Automateの導入支援として、高度なアプリも最速で作れる業務アプリ作成支援サービスを提供いたします。
SharePointモダン化コンサルティングサービス
従来のSharePoint から移行・モダン化したい方に向けて、事前調査からサイト作成・活用支援までトータルなコンサルティング・技術支援を提供いたします。
小刀稱知哉
大分県出身(温泉大好き)、現在は東京都在住
1990年生まれ
30才でメーカーの技術営業からIT業界にジョブチェンジ!!!
趣味は読書
Power Platform(SharePoint・Power Apps・Power Automate)に関する営業活動や設計、開発などを担当しております!
持ってる資格はPL-200/PL-300/PL-400/PL-600/MS-700/AZ-104/AZ-305/SC-200