UpdateContext 関数

適用先: キャンバス アプリ

現在の画面のコンテキスト変数 を作成または更新します。

概要

UpdateContext 関数を使用すると、コンテキスト変数を作成できます。コンテキスト変数とは、ユーザーがボタンを押した回数やデータ操作の結果など、一定の情報を一時的に格納する際に使用する変数です。

コンテキスト変数のスコープは 1 画面に限定されています。このため、別の画面のコンテキスト変数を参照する計算式を作成することはできません。 別のプログラミング ツールを使用したことがある場合、コンテキスト変数をローカル変数とほぼ同じものだと考えてもよいでしょう。 アプリ全体で使用できるグローバル変数を操作するには、Set 関数を使用します。

Power Apps では基本的に、ユーザーがアプリを操作すると、計算式が自動的に再計算されます。 コンテキスト変数ではこの効果が得られませんので、コンテキスト変数を使うと、アプリの作成や理解が難しくなることがあります。 コンテキスト変数を使用する前に、変数の使用 をもう一度確認してください。

内容

コンテキスト変数を作成または更新するには、UpdateContext 関数にレコード を 1 つ渡す必要があります。 各レコードでは、変数の名前の定義または照合に使用するデータとしての の名前と、その変数に設定する値を指定します。

  • 以前に定義した変数の名前を指定した場合は、UpdateContext によって変数が指定された値に設定されます。
  • まだ存在しない変数の名前を指定した場合は、UpdateContext でその名前の変数を作成したうえで、その変数に対して指定された値を設定します。
  • 以前に変数を定義していたものの、UpdateContext の計算式の中でその変数を指定しなかった場合には、その変数の値は以前と同じになります。

コンテキスト変数は、UpdateContext または Navigate 関数 を使用すると暗黙的に作成されます。 明示的な宣言は必要ありません。 UpdateContextNavigate のコンテキスト変数への参照をすべて削除すると、コンテキスト変数は存在しなくなります。 変数をクリアするには、Blank 関数 の結果にその値を設定します。

作成環境のファイル メニューの変数ビューで、変数の値、定義、使用について確認できます。

数式でコンテキスト変数を参照するときは、その変数の列名を使用します。 たとえば、UpdateContext( { ShowLogo: true } ) では、ShowLogo というコンテキスト変数を作成したうえで、値を true に設定します。 この関数を実行した後は、計算式でこの ShowLogo という名前を指定することによって、このコンテキスト変数の値を使用できます。 ShowLogo を画像コントロールの Visible プロパティの計算式として記述した場合には、このコンテキスト変数の値が truefalse のどちらであるかに応じてコントロールの表示と非表示を切り替えることができます。

具体例はこのトピックで後ほど紹介しますが、コンテキスト変数には以下をはじめとするさまざまな情報を格納できます。

  • 単一の値
  • レコード
  • テーブル
  • オブジェクト参照
  • 計算式の結果

アプリが終了するまで、コンテキスト変数の値は保持されます。 コンテキスト変数を定義して、特定の画面についてその値を設定した場合には、ユーザーが別の画面に切り替えた場合でも、設定した情報がそのまま維持されます。 アプリを終了すると、コンテキスト変数の値は失われ、アプリが再読み込みされたときに再作成されます。

コンテキスト変数はいずれも、そのスコープが 1 画面だけにとどまります。 ある画面についてコンテキスト変数を定義し、その値を別の画面から変更する場合には、Navigate 関数に基づく計算式を作成する必要があります。 または、グローバル変数を使用します。

UpdateContext には戻り値がないため、動作の数式 内でのみ使用できます。

構文

UpdateContext( UpdateRecord )

  • UpdateRecord – 必須。 少なくとも 1 つの列の名前と、その列の値を含むレコード。 指定した列と値それぞれについて、コンテキスト変数が作成または更新されます。

UpdateContext( { ContextVariable1: Value1 [, ContextVariable2: Value2 [, ... ] ] } )

  • ContextVariable1 - 必須。 作成または更新するコンテキスト変数の名前。
  • Value1 - 必須。 コンテキスト変数に割り当てる値。
  • ContextVariable2: Value2, ... - オプション。 追加で作成または更新するコンテキスト変数とその値。

計算式 内容 結果
UpdateContext( { Counter: 1 } ) コンテキスト変数 Counter を作成または変更し、その値を 1 に設定します。 Counter の値は 1 になります。 この変数は、計算式で名前 Counter を使用することによって参照できます。
UpdateContext( { Counter: 2 } ) 前の例のコンテキスト変数 Counter の値を 2 に設定します。 Counter の値は 2 になります。
UpdateContext( { Name: "Lily", Score: 10 } ) NameScore というコンテキスト変数を作成または変更し、値をそれぞれ Lily10 に設定します。 Name の値は LilyScore の値は 10 になります。
UpdateContext( { Person: { Name: "Milton", Address: "1 Main St" } } ) コンテキスト変数 Person を作成または変更し、その値をレコードに設定します。 このレコードには、NameAddress の 2 つの列が存在します。 Name 列の値は MiltonAddress 列の値は 1 Main St です。 Person{ Name: "Milton", Address: "1 Main St" } } というレコード値を持っています。

このレコード全体を参照するには Person という名前を使用し、このレコードの個別の列を参照する場合には、Person.Name または Person.Address を使用します。
UpdateContext( { Person: Patch( Person, {Address: "2 Main St" } ) } ) Patch 関数と連携してコンテキスト変数 PersonAddress 列の値を 2 Main St に設定します。 Person{ Name: "Milton", Address: "2 Main St" } }というレコード値を持つようになりました。

ステップバイステップの例 1

  1. 既定の画面に Source という名前を付けてから、別な画面を追加して、その画面の名前を Target に設定します。

  2. Source 画面にボタンを 2 つ追加し、その一方の Text プロパティに English、もう一方に Spanish を、それぞれ入力します。

  3. English ボタンの OnSelect プロパティを次の式に設定します。
    Navigate(Target, ScreenTransition.Fade, {Language:"English"})

  4. Spanish ボタンの OnSelect プロパティを次の式に設定します。
    Navigate(Target, ScreenTransition.Fade, {Language:"Spanish"})

  5. Target 画面にラベルを追加し、その Text プロパティを次の式に設定します。
    If(Language="English", "Hello!", "Hola!")

  6. Target 画面の挿入タブで図形を選択し、戻る矢印を選択します。

  7. 戻る矢印の OnSelect プロパティを次の数式に設定します。
    Navigate(Source, ScreenTransition.Fade)

  8. Source 画面で F5 キーを押し、いずれかの言語のボタンを選択します。

    Target 画面に、選択したボタンに対応する言語でラベルが表示されます。

  9. 戻る矢印を選択して Source 画面に戻り、もう一方の言語のボタンを選択します。

    Target 画面に、選択したボタンに対応する言語でラベルが表示されます。

  10. 既定のワークスペースに戻るには、Esc キーを押します。

ステップバイステップの例 2

  1. この式を使用するキャンバス アプリを開きます。
  2. コマンド バーから 新しい画面 を選択して、新しい空白の画面を追加します。
  3. ボタンを追加し、OnSelect プロパティを次の計算式に設定します。
    UpdateContext( { Name: "Lily", Score: 10 } )