【PowerApps】変数の基本、グローバル変数と画面変数の違い

まず、変数とは何かから入り、PowerAppsでの変数の使い方、そしてPowerAppsのグローバル変数と画面変数の違い、変数の一覧の見方を、PowerApps上で実際にそれらを使った事例で説明しています。

【PowerApps】変数の基本、グローバル変数と画面変数の違い

(動画時間:6:09)

<< Udemy オンラインコース >>
「マイクロソフトPowerApps【コントロールと関数 完全ガイド】初級用」
https://www.udemy.com/course/powerapps-c/?couponCode=ECONOSHIFT2020

 

変数とは何か?

 

こんにちは、リーンシグマ、ブラックベルトのマイク根上です。

 

最近Udemy.comでPowerAppsのオンライントレーニングコースを作りました。⇒「マイクロソフトPowerApps【コントロールと関数 完全ガイド】初級用 Udemyオンラインコース」

 

今日はその中からPowerAppsの変数のレクチャーをお見せしようと思います。これで変数の基本から、PowerAppsのグローバル変数と画面変数の違いも理解できるようになります。

 

どのコンピューター言語でも同じですが、データを扱う時に必ず変数は必要になります。それはPowerAppsでも同じですが、PowerAppsのコントロールや関数での変数の扱い方はとても独特です。

 

ですので、変数の概念をよく理解する事は必須です。まずそもそも変数とは何でしょうか?他のコンピューター言語を知っている方は当然ご存じですが、もしそうでない方の為に言うと、変数とはデータを入れる入れ物です。

 

データは無限にありますね。それをプログラムで扱う時そのデータに名前がないと扱えないわけです。そこで対象データを一時的に名前を付けた入れ物に入れてその名前を使ってプログラムはそのデータを処理できるのです。その入れ物を変数と呼ぶわけです。

 

PowerAppsの画面変数とグローバル変数の違い

 

PowerAppsでは各画面だけで使える変数を「画面変数」と呼び、全画面を通して使える変数を「グローバル変数」と呼びます。また、データの集まりを行と列のあるテーブルとして一時的にアプリ内に保管できる場所が「コレクション」なのです。これも変数の一種です。⇒「PoweAppsのコレクションとCollect関数の基本と使い方(ClearCollect、Clear、LookUp関数)」

 

画面変数とグローバル変数の違いをPowerApps上でもう少し学んでいきましょう。

 

変数の動きをPowerApps上で確認する

 

ブランクの画面に「テキスト入力」コントロールを二つ、ラベルコントロールを二つ用意しました。テキスト入力に数字を入れてラベルに合計が出るようにしたのです。そのテキスト入力が変数の役割をしています。PowerAppsはエクセルと同じ様にデータが変われば自動で再計算してくれます。

 

PowerApps上の変数の確認

 

次にボタンを一つ追加してそれを押すとこの+と―を切り替える様にしたいです。その為にボタンの「OnSelect」属性を使います。何と書けばいいのでしょうか?

 

残念ながらPowerAppsには直接コントロールの属性にデータを代入する術がありません。しかし変数を入れておくことはできます。

 

上図の「+」記号のラベルの「Text」属性で、入力した文字を「”(ダブルクォーテーション)」で挟むと、文字として表示しますが、ダブルクォーテーションがないと変数と認識します。 「和差」と入れときます。しかし、今は赤のエラーマークが出ています。これは変数:「和差」をまだ定義していないからです。

 

追加したボタンの「OnSelect」属性に変数:「和差」に「+」/「-」を切り替えて入れる数式を入れたいです。何の事でしょうか?取り合えずやってみます。そこで使うのがUpdateContext関数です。こう書きます。「 UpdateContext({和差:”+”}) 

 

これで変数:和差にプラスと言う記号を入れたのです。そしたらエラーは消えましたが、「+」記号が消えてしまいました。テキスト型の変数はアプリ起動後は空白なのです。そのラベルを小細工する必要があります。

 

If(IsBlank(和差),“+”,和差) 」に変更したら「+」記号が出てきました。この数式は「変数:「和差」が空白なら+を表示し、そうでなければ和差の中身を表示しなさい」と言う意味です。しかし、ボタンを押しても何も変わりません。今は変数:「和差」に+を入れ続けているだけだからです。

 

ボタンの「OnSelect」属性を「和差に+が入ってたらーを入れ、ーが入ってたら+を入れる」という数式が必要です。「 UpdateContext({和差:If(和差=“+”,“-”,“+”)}) 」これです。

 

「+」/「-」は変わるようになりましたが、計算結果はまだ変わりません。その数式をこれに変えます。「 “= “&If(和差=”+”,TextInput1+TextInput2,TextInput1-TextInput2)

 

ここでもし「和差」が+ならそのままで、違うならーにするとなるのです。これでうまくいきました。これが変数の使い方の簡単な例です。

 

画面変数の動きをPowerApps上で確認する

 

次にグローバル変数と画面変数の違いの話をしましょう。新しい画面を追加し、ラベルも2枚追加します。ラベルの一つにはさっきの計算結果の表示をそのラベルを参照( Label5.Text )して行います。

 

もう一つのラベルに変数:「和差」と入力してその中身を表示します。そしたらエラーってなってしまいました。これはさっき作った変数は画面変数でその画面だけしか使えないからです。

 

これに対処する方法は二つあり、一つは「Navigate」関数を使って変数の値を持ってくる事です。説明します。この関数はボタンを押して画面を移動できる関数ですが、同時に変数も持ってこれます。引数は「 Navigate(移動先画面名, 遷移, {移動先の画面変数: 値})

 

この関数の詳細:「MS公式ページ:Power Apps の Back および Navigate 関数」

 

この数式内で「 {和差:和差} 」にすると次の画面で変数:「和差」が使える様になります。しかし厳密に言うとこれは全く同じ変数ではなく両画面に変数:「和差」があるだけなのです。

 

ですから中身を一緒にする為には元の画面に戻る時にまたNavigate関数で変数の値の受け渡しを徹底する必要があります。画面が増えていくと抜け穴ができちゃう事もあります。

 

もし、複数の画面で使うなら画面変数ではなくグローバル変数を最初から使うと良いのです。

 

グローバル変数の動きをPowerApps上で確認する

 

グローバル変数を使うのが二つ目の対処法です。UpdateContext関数で作った変数は画面変数になるのです。その代わりにSet関数を使うとグローバル変数になり、その変数はアプリ内どこでも使えます。

 

しかし、引数の構造がちょっと違い、波カッコを取って、コロンをカンマに変えて下さい。

 

  • 画面変数の定義の仕方:UpdateContext({変数名:値})
  • グローバル変数の定義の仕方:Set(変数名,値)

 

これでボタンを押します。しかし今度はボタンが全く動かなくなりました。こういう時は変数の状況が見たいです。変数の一覧を見る方法があり、メニューバーで「ビュー」、「変数」でこのアプリ内の全ての変数を一覧できます。

 

ちなみに各変数をクリックするとどこでその変数が定義されて、どこで使われているかがすぐに分かります。またリンク付きでその数式の場所にそのまま飛べる優れものです。

 

グローバル変数とまだ画面変数も残っています。Navigate関数でまだ画面変数:和差が残っていました。その関数をボタンごと消したらグローバル変数だけになり上手く動くようになりました。

 

この一連の動きを上の動画で見る事ができます。

 

「こちらの記事も読まれてます

 

Comments