Power Apps の App オブジェクト

適用先: キャンバス アプリ モデル駆動型アプリ

現在実行中のアプリとアプリの動作に対する制御に関する情報を提供します。

内容

コントロールのように、App オブジェクトは、表示されている画面を識別し、変更が失われないように保存するようユーザーに促すプロパティを提供します。 すべてのアプリには App オブジェクトがあります。

App オブジェクトの一部のプロパティには、式を記述することができます。 ツリー ビュー ウィンドウの一番上で、その他のコントロールまたは画面と同じように App オブジェクトを選択します。 数式バーの左側にあるドロップダウン リストでオブジェクトのプロパティの 1 つを選択して、表示および編集を行います。

ツリー ビュー ウィンドウのアプリ オブジェクト

ActiveScreen プロパティ

ActiveScreen プロパティは、表示されている画面を識別します。

このプロパティは画面オブジェクトを返します。 数式 App.ActiveScreen.Name 付きの名前など、現在表示されている画面のプロパティを参照するために使用します。 App.ActiveScreen = Screen2 比較式などを使用して、このプロパティを別の画面オブジェクトと比較し、Screen2 が現在表示されている画面かどうかをテストすることもできます。

Back または Navigate 関数を使用して、表示されている画面を変更します。

BackEnabled プロパティ

BackEnabled プロパティは、Power Apps Mobile で実行している場合デバイスの戻るジェスチャに対するアプリの応答方法を変更します (Android デバイスでスワイプまたはハードウェアの戻るボタンを使用し、iOS デバイスで左から上にスワイプします)。 有効にすると、デバイスの戻るジェスチャは戻る式と同様に、最後に表示された画面に戻ります。 無効にすると、デバイスの戻るジェスチャによってユーザーはアプリ リストに戻ります。

ConfirmExit プロパティ

保存されていない変更を失いたい人はいません。 ConfirmExit および ConfirmExitMessage プロパティを使用し、アプリを閉じる前にユーザーに警告します。

Note

  • たとえば、Power BI および SharePoint など、埋め込まれたアプリでは ConfirmExit は動作しません。
  • 現在、遅延読み込みプレビュー機能が有効になっている場合 (新しいアプリでは既定)、これらのプロパティは、最初の画面のコントロールだけを参照することができます。 参照が作成される場合、Power Apps Studio はエラーを表示しませんが、結果として公開されるアプリは Power Apps モバイルまたはブラウザーでは開きません。 この制限の解消に積極的に取り組んでいます。 その間、設定>今後の機能 (プレビュー 下の) にある 遅延負荷 をオフにすることができます。

ConfirmExit

ConfirmExit は、true の場合、アプリを閉じる前に確認ダイアログ ボックスを開く、ブール値のプロパティです。 既定では、このプロパティは false で、ダイアログ ボックスは表示されません。

ユーザーがアプリに変更を保存していない可能性がある状況では、このプロパティを使用して、アプリを終了する前に確認ダイアログ ボックスを表示します。 変数およびコントロールのプロパティを確認する式を使用します (Edit form コントロールの Unsaved プロパティなど)。

次の例のように、データが失われる可能性がある状況では、確認ダイアログ ボックスが表示されます。

  • Exit 関数を実行しています。
  • アプリがブラウザーで実行されている場合:
    • アプリが実行されているブラウザーまたはブラウザー タブを閉じます。
    • ブラウザーの戻るボタンを選択します。
    • SelfLaunchTargetLaunch 関数を実行します。
  • アプリが Power Apps Mobile (iOS または Android) で実行されている場合:
    • スワイプすることで、Power Apps モバイルの異なるアプリに切り替えます。
    • Android デバイス上の戻るボタンを選択します。
    • Launch 関数を実行して、別のキャンバス アプリを起動します。

確認ダイアログ ボックスの正確な外観は、Power Apps のデバイスおよびバージョン間でさまざまです。

確認ダイアログ ボックスは、Power Apps Studio では表示されません。

ConfirmExitMessage

既定では、確認ダイアログ ボックスに変更が保存されていない可能性があります。などの、汎用メッセージがユーザーの言語で表示されます。

ConfirmExitMessage を使用し、確認ダイアログ ボックスのカスタム メッセージを指定します。 このプロパティが空白の場合、既定値が使用されます。 カスタム メッセージは確認ダイアログ ボックスに合わせて必要に応じて切り詰められるため、メッセージは最大で数行にします。

ブラウザー内で、確認ダイアログ ボックスにブラウザーからの汎用メッセージが表示されることがあります。

Note

App オブジェクトにはさらに実験的な OnMessageBackEnabled の 2 つのプロパティがあります。 これらのプロパティは、最終的にアプリ オブジェクトから削除されます。 これらのプロパティを運用環境で使用しないことをお勧めします。

  1. AccountForm および ContactForm の、2 つのフォーム コントロールを含むアプリを作成します。

  2. App オブジェクトの ConfirmExit プロパティをこの式に設定します。

    AccountForm.Unsaved Or ContactForm.Unsaved
    

    このダイアログボックスは、ユーザーがいずれかのフォームでデータを変更し、変更を保存せずにアプリを閉じようとした場合に表示されます。

    汎用の確認ダイアログ ボックス

  3. App オブジェクトの ConfirmExitMessage プロパティをこの数式に設定します。

    If( AccountsForm.Unsaved,
        "Accounts form has unsaved changes.",
        "Contacts form has unsaved changes."
    )
    

    このダイアログボックスは、ユーザーが取引先企業フォームでデータを変更し、変更を保存せずにアプリを閉じようとした場合に表示されます。

    フォーム固有の確認ダイアログ ボックス

Formulas プロパティ

Formulas プロパティで名前付き計算式を使用して、アプリ全体で再利用できる式を定義します。

Power Apps で、コントロール プロパティは数式によって駆動されます。 たとえば、アプリ全体で一貫した背景色を設定するには、それぞれのFillプロパティを一般的な数式に設定できます。

Label1.Fill: ColorValue( Param( "BackgroundColor" ) )
Label2.Fill: ColorValue( Param( "BackgroundColor" ) )
Label3.Fill: ColorValue( Param( "BackgroundColor" ) )

この数式が表示される場所が非常に多いため、変更が必要な場合にそれらすべてを更新するのは面倒で、エラーが発生しやすくなります。 代わりに、OnStart でグローバル変数を作成して、色を一度設定してから、アプリ全体で値を再利用します。

App.OnStart: Set( BGColor, ColorValue( Param( "BackgroundColor" ) ) )
Label1.Fill: BGColor
Label2.Fill: BGColor
Label3.Fill: BGColor

この方法のほうが優れていますが、BGColor の値が設定される前の OnStart の実行に依存しています。 BGColor はまた、作成者が気付いていないアプリの一部で操作されたり、他の誰かによって行われた変更であったり、追跡が困難な場合があります。

名前付き計算式によって代替手段が提供されます。 通常制御プロパティ = 式を書いているように、代わりに名前 = 式を書くことができ、名前をアプリ全体で再利用して表現を置き換えることができます。 これらの数式の定義は、Formulas プロパティで行われます。

App.Formulas: BGColor = ColorValue( Param( "BackgroundColor" ) );
Label1.Fill: BGColor
Label2.Fill: BGColor
Label3.Fill: BGColor

名前付き計算式を使用する利点は次のとおりです。

  • 数式の値は常に利用可能です。 タイミング依存関係も、値が設定される前に最初に実行する必要のある OnStart もなく、式の値が不正確になる時間もありません。 名前付き計算式は、循環参照を作成しない限り、任意の順序で相互に参照できます。 それらは並行して計算できます。
  • 数式の値は常に最新です。 数式は、コントロール プロパティまたはデータベース レコードに依存する計算を実行でき、それらが変更されると、数式の値が自動的に更新されます。 変数の場合のように値を手動で更新する必要はありません。 また、数式は必要な場合にのみ再計算されます。
  • 式の定義は不変です。 数式の定義は信頼できる唯一の情報源であり、アプリ内の他の場所で値を変更することはできません。 変数を使用すると、一部のコードが予期せず値を変更する可能性がありますが、名前付きの数式ではこれは不可能です。
  • 数式の計算は延期できます。 値が不変であるため、必要なときにいつでも計算できます。つまり、必要になるまでは計算する必要がありません。 アプリのスクリーン 2 まで使用されない数式の値はスクリーン 2 が表示されるまで計算する必要はないと表示されます。 この作業を遅延させることにより、アプリの読み込み時間を改善できます。 名前付き計算式は宣言型であり、システムが計算方法とタイミングを最適化する機会を提供します。
  • 名前付き計算式は Excel の概念です。 非常に多くの人が Excel をよく知っているので Power Fx は可能な限り Excel の概念を使用します。 名前付き計算式は、名前マネージャーで管理される Excel の名前付きセルおよび名前付き計算式と同等です。 コントロール プロパティと同じように、スプレッドシートのように自動的に再計算されます。

名前付き計算式は、Formulas プロパティで順番に定義され、それぞれセミコロンで終わります。 数式の型は、式の型から推測されます。これは、式内の要素の型と、それらがどのように一緒に使用されるかに基づいています。 たとえば、これらの名前付き計算式は、現在のユーザーに関する有用な情報を Dataverse から取得します。

UserEmail = User().Email;
UserInfo = LookUp( Users, 'Primary Email' = User().Email );
UserTitle = UserInfo.Title;
UserPhone = Switch( UserInfo.'Preferred Phone', 
                    'Preferred Phone (Users)'.'Mobile Phone', UserInfo.'Mobile Phone',
                    UserInfo.'Main Phone' );

UserTitle の式を更新する必要がある場合、この 1 つの場所で簡単に行うことができます。 もしも UserPhone アプリでは必要ない場合、これらの Dataverse のユーザー テーブルへの呼び出しは作られません。 使用されていない数式定義を含めても問題はありません。

名前付き計算式のいくつかの制限:

  • 動作関数を使用したり、アプリ内で副作用を引き起こしたりすることはできません。
  • 循環参照を作成することはできません。 a = b;b = a; を同じアプリ内で持つことは許可されていません。

OnError プロパティ

OnError を使用してエラーが検出された後にアクションを実行します。 エンド ユーザーに表示される前に、エラー バナーを遮断するグローバルな機会を提供します。 また、Trace 関数 でエラーを記録したり、データベースや Web サービスに書き込んだりすることも可能です。

すべての数式評価の結果にエラーがないかチェックされます。 エラーの場合、OnError は、数式全体が IfError 関数 でくくられた場合と同じ FirstErrorAllErrors のスコープ変数で評価されます。

OnError が空の場合、既定のエラー バナーで、エラーの FirstError.Message が表示されます。 OnError 式を定義すると、この動作が上書きされ、作成者が適切と考えるエラー報告を処理することができます。 OnError で既定の動作を要求し、Error 関数 でエラーを再投入できます。 これは、一部のエラーをフィルターで除外したり、別の方法で処理したり、他のエラーをパススルーしたりする場合に役立ちます。

OnError は、IfError のように計算の誤りを置き換えることはできません。 OnError が起動した時点では、すでにエラーは発生しており、数式計算で処理されています。 *OnError* は、エラー報告のみを制御します。

OnError 式は同時に評価され、その評価が他のエラーの処理と重なる可能性があります。 たとえば、OnError の先頭でグローバル変数を設定し、後から同じ数式で読み込むと、値が変わっていることがあります。 With 関数 を使用して、数式にローカルな名前付き値を作成します。

各エラーは OnError によって個別に処理されますが、既定のエラー バナーは各エラーに対して個別に表示されない場合があります。 同時に表示されるエラー バナーが多すぎるのを避けるために、最近表示された場合、同じエラーが新しいエラー バナーをトリガーすることはありません。

式で結合された Label コントロールと Slider コントロールを考えてみましょう:

Label1.Text = 1/Slider1.Value

Label と Slider コントロールが数式 Label1.Text = 1/Slider1.Value でバインドされます。

スライダーの既定値は 50 です。 スライダーを 0 にすると、Label1 の値は表示されず、エラー バナーが表示されます。

Slider コントロールが 0 に移動したため、ゼロ除算エラーとなり、エラー バナーが表示されました。

何が起こったのかを詳しく見てみましょう:

  1. ユーザーがスライドを左に移動し、 Slide1.Value プロパティが 0 に変更されました。
  2. Label1.Text が自動的に再評価されました。 ゼロ除算が発生し、エラーが発生しました。
  3. この式では IfError はありません。 ゼロ除算エラーは、数式評価によって返されます。
  4. Label1.Text はこのエラーに対して何も表示できないので、空白の状態が表示されます。
  5. OnError が呼び出されます。 ハンドラーがないため、標準エラー バナーがエラー情報とともに表示されます。

必要に応じて、計算式を Label1.Text = IfError( 1/Slider1.Value, 0 ) に修正することも可能です。 これにより、エラーやエラーバナーは発生しません。 その時点ですでにエラーは発生しているため、OnError からエラーの値を変更することはできず、どのように報告するかという問題にすぎません。

OnError ハンドラーを追加しても、ステップ 5 以前には何の影響もありませんが、エラーの報告方法には影響を与えることができます。

Trace( $"Error {FirstError.Message} in {FirstError.Source}" )

トレースを生成するように設定された App.OnError 式。

これが適切に行われていれば、アプリ ユーザーの観点からはエラーは発生しません。 しかし、このエラーは Monitor のトレースに追加され、FirstError からのエラー情報のソースも完全に追加されます:

Slider コントロールが 0 に移動したため、ゼロ除算エラーとなりますが、エラー バナーは表示されません。

トレースに加えて、同じ既定のエラー バナーも表示させる場合は、Trace がなかった場合と同じように、Trace 呼び出し後に Error 関数でエラーを再スローすることが可能です。

Trace( $"Error {FirstError.Message} in {FirstError.Source}" );
Error( FirstError )

OnStart プロパティ

Note

OnStart プロパティを使用すると、アプリの読み込み時にパフォーマンスの問題を引き起こすことがあります。 プロパティを使用する上位 2 つの理由データのキャッシュとグローバル変数の設定については、代替案を作成中です。 Navigate で表示される最初の画面を定義するための代替案をすでに作成しました。 コンテキストによっては、このプロパティは既定で無効になっている場合があります。 表示されておらず、使用する必要がある場合は、スイッチを有効にするためにアプリの詳細設定を確認してください。 画面の OnVisible プロパティも使用できます。

OnStart プロパティは、ユーザーがアプリを開始するときに実行されます。 このプロパティは、次のタスクを実行するためによく使用されます:

  • Collect 関数を使用して、データをコレクションに取得し、キャッシュします。
  • Set 関数を使用して、グローバル変数を設定します。

この数式は最初の画面が表示される前に評価されます。 画面が読み込まれないため、UpdateContext 関数を使用してコンテキスト変数を設定することはできません。 ただし、Navigate 関数を使用してコンテキスト変数を渡すことはできます。

OnStart プロパティを変更した後、ツリー ビュー ペインで アプリ オブジェクトにカーソルを合わせて、省略記号 (...) を選択し、OnStart を実行 を選択してテストします。 アプリが初めて読み込まれるときとは異なり、既存のコレクションおよび変数はすでに設定されています。 空のコレクションから始めるには、Collect 関数の代わりに、ClearCollect 関数を使用します。

OnStart で実行用のアプリ アイテム ショートカット メニュー

注意

  • OnStart プロパティでの Navigate 関数の使用は廃止されました。 既存のアプリは引き続き機能します。 期間限定で、アプリの設定で有効にすることができます (廃止 で使用可能)。 ただし、この方法で Navigate を使用すると、最初の画面を表示する前にシステムが OnStart の評価を完了しなければならないため、アプリの読み込みが遅れる可能性があります。 代わりに、StartScreen プロパティを使用して、最初に表示される画面を計算します。
  • 2021 年 3 月より前に作成されたアプリで、2021 年 3 月から現在までの間に OnStartNavigate を追加した場合、廃止 スイッチはオフになります。 このようなアプリを Power Apps Studio で編集すると、エラーが表示される場合があります。 上記の 廃止 スイッチを切り替えて、このエラーをクリアします。

StartScreen プロパティ

Note

廃止されたオプション強化された数式バーがオンになってる場合、StartScreen プロパティはプロパティのリストに表示されません。 強化された数式バー をオフにするには、設定>近日公開>機能廃止>の順に選択し、StartScreen プロパティを使用する場合は、強化された数式バー スイッチをオフにします。

StartScreen プロパティは、最初に表示される画面を決定します。 アプリが読み込まれるときに一度評価され、表示される画面オブジェクトを返します。 既定では、このプロパティは空で、Studio ツリー ビューの最初の画面が最初に表示されます。

StartScreen は、動作関数を含めることができないデータ フロー プロパティです。 すべてのデータ フロー関数が使用可能で、特に、次の関数と信号を使用して、最初に表示する画面を決定します:

Note

OnStart で作成されたものを含むグローバル変数とコレクションは StartScreen で使用できません。 これを行うための宣言型の方法を検討中です。 この制限に関するフィードバックについては、Power Apps コミュニティ フォーラム にアクセスしてください。

StartScreen がエラーを返すと、Studio ツリー ビューの最初の画面が、StartScreen が設定されていないかのように表示されます。 IfError 関数を使用してエラーを見つけ、適切なエラー画面にリダイレクトします。

Studio で StartScreen を変更した後、ツリー ビュー ペインで アプリ オブジェクトにカーソルを合わせて、省略記号 (...) を選択し、StartScreen に移動 を選択してテストします。 アプリが読み込まれたかのように画面が変わります。

StartScreen に移動する

使用例

Screen9

アプリが起動するたびに、Screen9 を最初に表示することを示します。

If( Param( "admin-mode" ) = 1, HomeScreen, AdminScreen )

Param "admin-mode" がユーザーによって設定されているかどうかを確認し、それを使用して HomeScreen または AdminScreen のどちらを先に表示するかを決定します。

If( LookUp( Attendees, User = User().Email ).Staff, StaffPortal, HomeScreen )

会議の参加者がスタッフ メンバーであるかどうかを確認し、起動時に適切な画面に移動します。

IfError( If( CustomConnector.APICall() = "Forest", 
             ForestScreen, 
             OceanScreen 
         ), 
         ErrorScreen 
)

API 呼び出しに基づいてアプリを ForestScreen または OceanScreen に移動します。 何らかの理由で API が失敗した場合、代わりに ErrorScreen が使用されます。

StudioVersion プロパティ

StudioVersion プロパティを使って、アプリを公開するために使用された Power Apps Studio を表示または記録します。 これは、デバッグ時や、アプリが最新 Power Apps Studio バージョンで再公開されていることを確認する場合に役立ちます。

StudioVersion がテキストとして返されます。 テキストの形式は時間の経過とともに変化する可能性があるため、全体として扱う必要があります。個々の部分を抽出することは避けてください。