Power Appsで変数のように使用できるものは、コレクション、グローバル変数、コンテキスト変数、With関数、コントロールの出力プロパティの5つです。
これらの変数の使い分けを考えてみました。個人的な使い分けなので、ぜひコメントでみなさんの使い分けを教えてください。
一般的に使用される変数について説明するため、名前つき数式、コンポーネント変数は除いています。
使い分け
Power Appsで使用できる変数を、変数が使用できる範囲と値が動的に変化するか、静的に変化するかで分類しました。
変数名 | 使用範囲(スコープ) | 動的・静的 | 用途 |
---|---|---|---|
コントロール | アプリ全体 | 動的 | 基本的な値の参照方法 |
With関数 | プロパティ内 | 動的 | 使用範囲がプロパティ内の変数 |
グローバル変数 | アプリ全体 | 静的 | 使用範囲がアプリ全体の変数 |
コンテキスト変数 | 画面内 | 静的 | 使用範囲が画面内のみの変数 |
コレクション | アプリ全体 | 静的 | テーブル型の変数 |
Power Appsはコントロールの出力プロパティの値を変数のように扱えるため、他のプログラミング言語と比較して変数の利用頻度は低いと思います。
それ以外の変数は、基本的には使用範囲(スコープ順)が狭いものを優先的に利用しましょう。
コントロールの出力プロパティの値
Power Appsでは、コントロールの出力プロパティの値を変数のように扱うことができます。
コントロールの出力プロパティを使用するメリット
コントロールは実体がある分、変数よりも値の変更を追いやすく管理もしやすいです。
また変数は増えれば増えるほど管理が大変になりますが、アプリの構成上コントロールは必要な要素ですので参照したところで管理コストは変数ほど増えません。
使用範囲は広い(アプリ全体)ですが、上記の理由から変数の乱用は避けた方が良いと考えています。
コントロールの出力プロパティを使用しないケース
ただしコントロールの値は動的に変化するため、変数が静的であってほしい場合(それが普通)は通常通り変数を使用しましょう。
また少なくとも参照するコントロールには適切な名前をつけるようにしましょう。
変数はどんな型でも格納できますが、コントロールの出力プロパティは型が決まっているので値の形式がコントロールに依存してしまいます。
With関数
With関数は値をレコードとして定義することで、プロパティ内でのみ変数のように扱うことができます。
プロパティ内でのみしか利用できないため汎用性はない反面、使用範囲が小さいかつプロパティ内でも範囲を絞れるため非常に有用です。
レコード型のみしか使えないように思われがちですが、レコードとして定義すれば良いのでどんな型でも使用できます。
グローバル関数
アプリ上のどこからでも参照できる変数です。App.OnStartでよく使用します。
コントロールの出力プロパティとの使い分け
前述の通り値を静的に使用したい場合、使用する値がコントロールの形式ではマッチしない場合に使用します。
グローバル変数はどこでも使用できる分非常に扱いやすいですが、使用し過ぎると管理コストが増大するので注意しましょう。
コンテキスト変数との使い分け
使用範囲に応じて使い分け、アプリ全体で使用する場合はグローバル変数、画面内のみの場合はコンテキスト変数と使い分けます。
コンテキスト変数はNavigate関数で値を渡せるため複数画面でも使用できますが、どこから来てどこで使用されるのかが非常にわかりにくくなってしまいます。
変数を宣言する際、2画面以上での使用が想定される場合はグローバル変数を使用しましょう。
コンテキスト変数
画面内でのみ使用できる変数です。グローバル変数と値の宣言方法が違うのが地味にストレスです。
グローバル変数とは違い、一つの関数で複数の変数を宣言することができます。
グローバル変数との使い分けは前章を見てください。
コレクション
テーブル形式の変数を格納します。
多分一番使われていない可哀想な子です。Power Appsの仕様上一度に2000行までしか格納出来ないこと、初心者が扱いづらいことが要因の一つだと思います。
しかし理解するとアプリの保守性がかなり高くなるためぜひ理解して欲しいです。
テーブル型、レコード型の変数を使用すれば散らばった変数やコントロールをまとめることができるため、開発中のアプリでコレクションが利用できる箇所がないか常に意識するようにしましょう。
まとめ
If文でまとめるとこんな感じです。
If(
変数として使用するのは動的な値,
"コントロールの出力プロパティ",
変数の型はテーブル,
"コレクション",
変数の使用範囲がプロパティ内,
"With関数",
変数の使用範囲が画面内,
"コンテキスト変数",
変数の使用範囲がアプリ全体,
"グローバル変数"
)
コメント