Power Appsの変数 「Set」「UpdateContext」「With」の個人的使い分け|スコープや使い道

Power Appsのキャンバスアプリでの変数の使い分けについて聞かれる機会が多いので、(あくまで)僕がやっている使い分けをメモ。

スポンサーリンク

Power Appsの変数は3種類

Power Appsでは以下3種類の変数(のスコープ)がある。

  • Set/コレクション
  • UpdateContext
  • With

で、それぞれの変数はスコープ(変数がアクセスできる範囲)が違うので、状況によって使い分けが必要

Set/コレクション

まずは「Set」で宣言したグローバル変数や、「ClearCollect」などで宣言したコレクション。

これらの変数のスコープは「アプリ内」で、どこからでも参照や変更が可能

どこからでも参照できて便利だけど、どこからでも変更ができてしまうのでアプリを修正するときにデグレが起きたり、作ったアプリを誰かに引き継ぐときに混乱が起きやすかったりする

僕はこんな感じで定数の定義に使うことがほとんどなんだけど、

使った方が実行速度が速くなることもあるし、アプリ全体で値を管理する必要があることも多い(買い物かごとか、サイドメニューの開き状態とか)ので、必要なときにのみ使う!というイメージ。

グローバル変数は一部のカスタムコンポーネントからもアクセス可能

ちなみにSetなどで宣言したグローバル変数は、アクセスアプリスコープをオンにしたカスタムコンポーネントからもアクセスが可能

UpdateContext

つづいて「UpdateContext」で宣言するコンテキスト変数で、スコープは「変数を宣言した画面内」

こんな感じでポップアップの表示とかに使われることが多いイメージ。

Setよりスコープが狭いので、なるべくUpdateContextを使おう!となっている記事をよく見るし、僕も同じようになるべくUpdateContextを使用している。

コレクションを使うかテーブル型のコンテキスト変数を使うか

例えばSPOリストとかから複数のアイテムを持ってきて保持したいとき、こんな感じでコレクションを使うこともあると思うけど、
このあとアイテムを追加したり(Collect)、特定のアイテムを削除したり(Remove)することがないのであれば、テーブル型のコンテキスト変数で事足りる。

コレクションで作っちゃうとどこからでも参照やアクセスが可能にもなるので、特にコレクションを使う理由がないのであればテーブル型のコンテキスト変数を使う方が個人的におすすめ

Navigate関数の引数として使うコンテキスト変数

ただ、Navigate関数は遷移先の画面のコンテキスト変数を書き換えることもできちゃうのでちょっとだけ注意が必要。

引数として他の画面から渡されたコンテキスト変数を、画面内のいろいろなところで書き換えたり使ったりしてると、画面遷移を交えた操作をしたときに思わぬバグが発生することもある。

※Power Appsのコーディング規約では、UpdateContextで宣言した変数は「loc~~~」みたいな名前をつけるべし、ってなってることが多いけど、他の画面から渡される引数としてのコンテキスト変数は「param~~~(prm~~~)」とか「arg~~~」といった名前にするとけっこうソースが読みやすくなる(こともある)。

こんな感じで接頭語にparamを付けてあげると、

別画面から呼び出すとき、どの変数に値を渡せばよいか気が付きやすかったりしたりもする。

With

最後はWith関数の第一引数で宣言(?)する変数で、スコープは一番小さくてWith関数の中でのみ参照可能

あんまり存在を知られていないけどこのWith関数が個人的にはすごく好きで、ほどよいスコープの長さで値を保持してくれる。

例えば、
「Patch関数の戻り値をチェックして、成功したらフォームを更新、エラーが起きたら(戻り値がBlankだったら)メッセージを出す」
くらいであればUpdateContextを使わなくてもWithだけで実装が可能。

MSの公式でもコンテキスト変数やグローバル変数より推奨されているので、個人的にはなるべくこのWith関数を使用するようにしている。

Withを使用すると、自己完結型で理解しやすく、宣言式のコンテキストで使用できるため、コンテキスト変数やグローバル変数よりも推奨されています。
MS公式より抜粋

まとめ

ということでまとめると、
まずはWith関数の使用を検討し、それでもだめならUpdateContextを使って、それでもそれでもだめであればSetを使用する
というのがよいかな~と。

Power Appsのキャンバスアプリの引継ぎでわりと厄介なのが変数。

最近「検索」や「置換」みたいな機能が開発環境に追加されてだいぶ読みやすくなってきたけど、なるべくきれいにコードを書くと後任者に喜ばれるかも。。

関連記事

コメント

タイトルとURLをコピーしました