業務改善と標準化を同時に実現:MS 365業務システム開発

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

    
【PowerApps】変数の基本、グローバル変数と画面変数の違い
\ この記事を共有 /
【PowerApps】変数の基本、グローバル変数と画面変数の違い

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

(動画時間:6:09)

初級編:「マイクロソフトPowerApps【コントロールと関数 完全ガイド】」
Udemyオンラインコースを作りました!

⇒ 半額になる「ディスカウントリンクページ」へ

変数とは何か?

こんにちは、リーンシグマ、ブラックベルトのマイク根上です。
業務改善コンサルをしています。

最近Udemy.comでPowerAppsのオンライントレーニングコースを作りました。
⇒ コースが半額になる「ディスカウントリンクページ」へ

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

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

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

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

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

PowerAppsでは各画面だけで使える変数を「画面変数」と呼び、
全画面を通して使える変数を「グローバル変数」と呼びます。

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

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

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

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

PowerApps上の変数の確認

次にボタンを一つ追加してそれを押すと
この「+」と「‐」を切り替える様にしたいです。
その為にボタンの「OnSelect」属性を使います。

何と書けばいいのでしょうか?

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

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

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

「OnSelect」属性=
UpdateContext({和差:”+”})

これで変数:和差にプラスと言う記号を入れたのです。
そしたらエラーは消えましたが、
「+」記号が消えてしまいました。

テキスト型の変数は既定では空白なのです。
そのラベルを小細工する必要があります。

「Text」属性=
If(IsBlank(和差),“+”,和差)

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

ボタンの「OnSelect」属性を
「和差に+が入ってたらーを入れ、ーが入ってたら+を入れる」
という数式が必要です。

「OnSelect」属性=
UpdateContext({和差:If(和差=“+”,“-”,“+”)}) 

上記の様にしたら「+」/「-」は変わるようになりましたが、
計算結果はまだ変わりません。その数式をこれに変えます。

計算結果のラベルの「Text」属性=
“= “&If(和差=”+”,TextInput1+TextInput2,TextInput1-TextInput2)

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

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

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

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

これに対処する方法は二つあり、
一つは「Navigate」関数を使って変数の値を持ってくる事です。
ちょっと何を言ってるかわからないですね。説明します。
この関数はボタンを押して画面を移動できる関数ですが、
同時に変数も持ってこれます。

Navigate関数の引数の構造
Navigate(移動先画面名, 遷移, {移動先の画面変数: 値})

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

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

最初の画面の変数:「和差」の値を次の画面の変数:「和差」に入れたのです。

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

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

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

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

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

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

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

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

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

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

初級編:「マイクロソフトPowerApps【コントロールと関数 完全ガイド】」
Udemyオンラインコースを作りました!

⇒ 半額になる「ディスカウントリンクページ」へ

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