前回の「JPPUG758 #4 Power Apps Q&A補足」の補足です。あるいは、Power Apps におけるコントロールはグローバル変数的な扱いなのか?について、です。
結論、グローバル扱いなんですけどね。
コントロールの名前は一意
コントロール名は、そのアプリの中で一意(=ユニーク)になるよう制御されます。
Screen 内で一意ではありません。
アプリ全体で一意です。
実際に、Screen をまたいで同じコントロール名を設定するとエラーになります。同じコントロール名が利用されないようにガードされます。
#PowerApps Controls -> Global values. pic.twitter.com/xQlSDNxOHY
— やま (Yama) (@yamad365) February 11, 2020
コントロールをコピー&ペーストした際に、コントロール名が「[コピー元の名称]_1」みたいに、数値が自動的に付与されます。この動作は、同一コントロール名が発生しないように処理されている、と推測できますね。
コントロールはグローバル
コントロール名がアプリで一意である必要は把握できました。では、その他プロパティはグローバル変数のようにScreenを跨いでも利用可能でしょうか?
#PowerApps Controls -> Global values. pic.twitter.com/keQcHp9Pb8
— やま (Yama) (@yamad365) February 11, 2020
はい、利用可能ですね。
上記の動画では「SettingsScreen」に配置した「lblSettingTitle」コントロールの[Text]、および[Color]プロパティを「Screen1」に追加したラベルコントロールから参照しています。
これにより、コントロールはグローバル変数のようにScreenをまたいで利用可能なモノである、と確認できました。
活用法
コントロールがグローバル扱いである、という特性を活かして「アプリ全体の設定値を保持するScreen」を作成しておくテクニックがあります。前述のようにアプリの全Screenで表示する文字列や色などを設定用Screenで作成しておいて、利用される各々のScreenはそのコントロールを参照すればよいのです。
例えば、名称や色の変更が発生した場合、その設定用Screenに置いてあるコントロールのプロパティ等を修正するだけで、参照しているコントロールは全て対応完了になります。修正量、極小化されます。
もちろん、コンポーネントを利用しても良いのですが・・・。
コンポーネント機能は、いまだプレビューなのですよ(;^ω^)
まとめ
- Power Apps のコントロールはグローバル扱い
- アプリ全体でコントロール名は一意になる
- Screen をまたいで参照できる
- 設定用 Screen などを用意して、アプリ全体設定を保持するテクニックもあるよ!
この件も JPPUG758 の現場で質問もらって、その場で回答したんです。が、実際に Power Apps の画面を操作しながら動作等を説明する時間が確保できなかったんです。そのため、記事として補足した次第。
それでは、皆さま。素晴らしい Power Platform Life を!