グローバル変数
グローバル変数は、柔軟性のために最も一般的に使用される変数です。 変数を設定したら、変数を参照したり、アプリ全体で更新したりできます。 これにより、同じ情報に対する重複したクエリを避け、必要な情報を強制的に構築したり、あるいは時には単にプレースホルダーとして使用することもできます。
ユーザーの情報を格納する
アプリの一般的な設計パターンはパーソナル化です。 たとえば、すべての画面にユーザーの名前を含むウェルカム メッセージを表示できます。 Power Apps では、ラベル コントロールで次の式を使用して、宣言型の方法でユーザーの名前を取得できます。
"Welcome " & User().FullName
この数式では、Welcome という文字列が表示され、ユーザーの DisplayName プロパティについて Azure Active Directory にクエリが実行され、テキストとして表示されます。 ただし、すべての画面にその関数を含める場合は、画面が開くたびに、Power Apps は Microsoft Entra ID から直接そのデータに対してクエリを実行する必要があります。 これにより、ネットワークへの繰り返し呼び出しが作成され、アプリの速度が低下します。
より良い方法は、アプリが開いたときにその情報をグローバル変数に格納し、アプリ全体でその変数を参照することです。 これを行うには、アプリの OnStart プロパティを次の式で変更します。
Set(varUserDisplayName, User().FullName)
次に、Label コントロールの数式を次のように変更します。
"Welcome " & varUserDisplayName
この数式は前の数式と同じ出力を取得しますが、すべての画面で Microsoft Entra ID に戻る必要はなく、Power Apps は変数に格納されている値を参照できます。
変数の状態の追跡
宣言型の考え方では、データのクエリに基づいてコントロールを非表示または表示できます。 たとえば、顧客の注文を管理するためのアプリがある場合、顧客に 3 つ以上の未処理の請求書がある場合にのみ表示される警告アイコンが表示される場合があります。 警告に加えて、顧客が未処理の請求書が 3 つを超える場合に新しい注文を送信する場合は、マネージャーから承認を得る必要がある場合があります。 この承認ワークフローは、ユーザーが承認ボタンを選択することによって開始されます。
宣言型の考え方では、警告アイコンの Visible プロパティを次のように設定します。
CountRows(Filter(InvoiceEntity, CustomerNumber = ThisCustomersNumber
And Status = "Outstanding")) > 3
true の場合はアイコンが表示され、false の場合はアイコンは表示されません。 その後、[承認] ボタンの Visible プロパティで同じ数式を繰り返します。
問題は、これは 2 つの異なる場所で管理する複雑な数式になり、そのクエリによって重複するネットワーク トラフィック、アプリでの処理、データ ソースでの処理が生成されます。
より良い方法は、複雑な呼び出しを 1 回実行し、結果を変数に格納してから、その変数を使用して各コントロールの Visible プロパティを制御することです。
これを行うには、変数を設定するように画面の OnVisible プロパティを構成します。
Set(varOustandingExceeded, CountRows(Filter(InvoiceEntity, CustomerNumber =
ThisCustomersNumber And Status = "Outstanding")) > 3)
変数 varOutstandingExceeded は、数式の結果に基づいて true または false になります。 次に、アイコンとボタン コントロールの Visible プロパティを varOutstandingExceeded に設定します。
追加の数式や関数は必要ありません。 これは、これらのコントロールが Visible プロパティに対して true または false を受け入れ、変数が true または false になるためです。 Power Apps は、画面の OnVisible プロパティの Set 関数に基づいて、変数の型をブール値に設定し、数式の結果に基づいて値を true または false に設定します。
このような小さな変更により、アプリのパフォーマンスが高く、保守が容易になります。 変数を使用している間に変更されない情報を繰り返し取得する場合は、いつでも変数を組み込む必要があります。