Power Appsのキャンバスアプリでの変数の使い分けについて聞かれる機会が多いので、(あくまで)僕がやっている使い分けをメモ。
Power Appsの変数は3種類
- Set/コレクション
- UpdateContext
- With
で、それぞれの変数はスコープ(変数がアクセスできる範囲)が違うので、状況によって使い分けが必要。
Set/コレクション
まずは「Set」で宣言したグローバル変数や、「ClearCollect」などで宣言したコレクション。
これらの変数のスコープは「アプリ内」で、どこからでも参照や変更が可能。
どこからでも参照できて便利だけど、どこからでも変更ができてしまうのでアプリを修正するときにデグレが起きたり、作ったアプリを誰かに引き継ぐときに混乱が起きやすかったりする。
使った方が実行速度が速くなることもあるし、アプリ全体で値を管理する必要があることも多い(買い物かごとか、サイドメニューの開き状態とか)ので、必要なときにのみ使う!というイメージ。
グローバル変数は一部のカスタムコンポーネントからもアクセス可能
UpdateContext
つづいて「UpdateContext」で宣言するコンテキスト変数で、スコープは「変数を宣言した画面内」。
Setよりスコープが狭いので、なるべくUpdateContextを使おう!となっている記事をよく見るし、僕も同じようになるべくUpdateContextを使用している。
コレクションを使うかテーブル型のコンテキスト変数を使うか
コレクションで作っちゃうとどこからでも参照やアクセスが可能にもなるので、特にコレクションを使う理由がないのであればテーブル型のコンテキスト変数を使う方が個人的におすすめ。
Navigate関数の引数として使うコンテキスト変数
ただ、Navigate関数は遷移先の画面のコンテキスト変数を書き換えることもできちゃうのでちょっとだけ注意が必要。
引数として他の画面から渡されたコンテキスト変数を、画面内のいろいろなところで書き換えたり使ったりしてると、画面遷移を交えた操作をしたときに思わぬバグが発生することもある。
こんな感じで接頭語にparamを付けてあげると、
With
最後はWith関数の第一引数で宣言(?)する変数で、スコープは一番小さくてWith関数の中でのみ参照可能。
あんまり存在を知られていないけどこのWith関数が個人的にはすごく好きで、ほどよいスコープの長さで値を保持してくれる。
「Patch関数の戻り値をチェックして、成功したらフォームを更新、エラーが起きたら(戻り値がBlankだったら)メッセージを出す」
くらいであればUpdateContextを使わなくてもWithだけで実装が可能。
MSの公式でもコンテキスト変数やグローバル変数より推奨されているので、個人的にはなるべくこのWith関数を使用するようにしている。
Withを使用すると、自己完結型で理解しやすく、宣言式のコンテキストで使用できるため、コンテキスト変数やグローバル変数よりも推奨されています。
MS公式より抜粋
まとめ
ということでまとめると、
まずはWith関数の使用を検討し、それでもだめならUpdateContextを使って、それでもそれでもだめであればSetを使用する
というのがよいかな~と。
Power Appsのキャンバスアプリの引継ぎでわりと厄介なのが変数。
最近「検索」や「置換」みたいな機能が開発環境に追加されてだいぶ読みやすくなってきたけど、なるべくきれいにコードを書くと後任者に喜ばれるかも。。
コメント