こんにちは、あんこ先生です。
PowerAppsで扱うコントロールの値を、思ったように変化させられなかった経験はありませんか?
例えば、表示させるテキストを変えたい、ボタンを押した分だけ数値が増やしたいけどうまくいかないことが往々にありますよね。
わたしも初心者のころ、ラベルのテキストを変えたくて、ボタンに「Text=変えたい文字」とか試しましたが、もちろん実現できませんでした。
そこで、今回は「思い通りにコントロールを制御したい」、「変数について詳しく知りたい」といった初心者の方を対象に、グローバル変数を使ってコントロールを変化させる方法を紹介します。
事例をふんだんに取り入れているので、この記事を読めば変数を使いこなせるようになりますよ。
グローバル変数を使ってコントロールを変化させる
変数とは
変数は様々な値を一時的に保存する箱のようなものです。
それを参照させることで、計算させたり表示させたりします。
変数はSharePointリストと異なり、アプリ使用中のみ利用できます。
アプリ使用中、すべての変数がメモリに保持され、アプリを終了すると値は失われます。
そのため、必要なデータはSharePointリストに保存しておきましょう。
PowerAppsで扱える変数の種類は次の3つです。
①グローバル変数
アプリ内ならどこでも使えます。
コンテキスト変数と比べ、記述内容が少なく済むので作成が容易です。
Appでも作成できるため、アプリ起動時の初期設定に利用できます。
つまり、コンテキスト変数の上位互換です。
ただし、同じ名前の変数は作成できません。
テーブルも格納できますが、コレクションを使いましょう。
なぜなら、更新にPatch関数が使えないからです。
テーブルはコレクションを使う、大事なので覚えておいてください。
②コンテキスト変数
作成したスクリーンのみで利用できます。
そのため、別スクリーンで使う場合はNavigate関数で値を渡す必要があります。
グローバル変数と異なり、一度に複数の変数を作成できます。
また、スクリーンが違えば同じ名前の変数を作成できます。
つまり、スクリーンを移動する都度、同じ名前の変数に値を引き継げばグローバル変数と同じように扱えます。
しかし、Appでは作成できないため、アプリ全体の初期設定には利用できません。
③コレクション
複数項目のテーブルを扱うならこれ一択です。
今回は詳細に触れません。詳しくはこちらの記事を読んでください。
以降、この記事で説明する変数はグルーバル変数を指します。
グローバル変数の使い方
変数宣言
一般的に、この変数はこの種類のデータを格納する箱ですよって宣言してから使います。
PowerAppsの場合、変数はSet関数を記述した段階で暗黙的に作成されます。
つまり、データ型は格納されたデータの種類で自動的に判定するため、明示的な宣言は不要です。
ただし、Set関数が実行されるまで中身は空の状態です。
参照したら中身が空だった!
そんなときはSet関数が実行されているか確認しましょう。
変数の代入
変数にデータを格納するために、Set関数を実行します。
単一フィールドの数値やテキスト、色などはもちろん、テーブルやレコードも格納できます。
Set(_変数,1234) //1234を代入。データ型は数値。
Set(_変数,"1234") //1234を代入。データ型はテキスト。
Set(_変数,{a:1,b:2,c:3,d:4}) //レコードを代入。
Set(_変数,テーブル名) /テーブルを代入。
データの更新は、再度Set関数が実行されることで上書きされます。
ただし、データの型が異なる場合はエラーとなり更新されません。
データをクリアするには、Blank関数を代入します。
データをクリアしても、変数そのものとデータ型は維持されます。
Set(_変数,Blank()) //変数の値をクリア。枠とデータ型は維持される。
テーブルを格納した変数は、Collect関数で更新できます。
しかし、同名の空コレクションが作成され扱いに困ります。
テーブルを格納する場合はコレクションを使いましょう。
変数の確認
変数ビューで、変数の値、定義、使用について確認できます。
コード欄の変数名にカーソルを載せることでも確認できます。
グローバル変数でコントロールを変化させる
変数の値を参照するには、変数の名前を指定します。
変数が含まれるコードは、変数が更新される都度再計算されます。
コントロールの変化について、具体的にケースごとの動作を見ていきましょう。
①ラベルの文字列を置き換える
ボタンを押すと_変数01の値(テキスト)が変化し、ラベルの文字列も置き換わります。
//ボタン
Set(_変数01,"変数の中身")
//ラベルのText
_変数01
②テキスト入力に計算結果を表示する
ボタンを押すと_変数02の値(数値)がランダムで変化し、スライダーの値をかけた結果をテキスト入力に表示します。
//ボタン
Set(_変数02,Rand())
//テキスト入力のText
Slider01.Value*_変数02
③チェックボックスのチェック状態を制御する
ボタンを押すと_変数03の値(ブール値)がtrueとfalseの交互に変化し、チェックボックスのチェック状態が変化します。
//ボタン
Set(_変数03,!_変数03)
//チェックボックスのDefault
_変数03
④日付の選択に変数の値分進めた日付を表示する
ボタンを押すと_変数04の値(日付)が本日の日付にテキスト入力分の日数を進ませた値に変化し、日付の選択の日付も置き換わります。
//ボタン
Set(_変数04,DateAdd(Today(),Value(TextInputDate.Text),TimeUnit.Days))
//日付の選択のDefaultDate
_変数04
⑤ドロップダウンの選択肢を変更する
ボタンを押すと_変数05の値(単一項目テーブル)が交互に変化し、ドロップダウンの選択肢も置き換わります。
同じ仕組みでギャラリーのデータソースも変更できます。
//ボタン
If(First(_変数05).Value="和菓子の種類",
Set(_変数05,["あんこの種類","こしあん","つぶあん","うぐいすあん"]),
Set(_変数05,["和菓子の種類","まんじゅう","だんご","ようかん"])
)
//ドロップダウンのItems
_変数05
⑥スクリーンの移動先を変更する
ボタンを押すと_変数06の値(スクリーン名)が変化し、アイコンを押したときの移動先が置き換わります。
//ボタン
Set(_変数06,Screen99)
//アイコンのOnSelect
Navigate(_変数06, ScreenTransition.Fade)
⑦コントロールの色を変える
ボタンを押すと_変数07の値(RGBA色情報)が変化し、アイコンの色が置き換わります。
複数のコントロールのColorやFillプロパティに設定することで、ユーザーごとにテーマカラーを切り替えることもできます。
Set(_変数07,RGBA(54, 176, 75, 1))
//アイコンのColor
_変数07
⑧複数コンテナの表示を制御する
ボタンを押すと_変数08の値(メニュー番号)が変化し、複数あるコンテナのひとつが表示されます。
切替メニューに応用できます。
//ボタン
Set(_変数08,1) //数値が各コンテナに対応
//コンテナのVisible
_変数08=1
⑨アイコンの形状を変更する
ボタンを押すと_変数09の値(アイコンの形状)が交互に変化し、アイコンの形状が変化します。
上記⑦と組み合わせれば色も変化できます。
//ボタン
If(_変数09=Icon.CancelBadge,
Set(_変数09,Icon.CheckBadge),
Set(_変数09,Icon.CancelBadge)
)
//アイコンのIcon
_変数09
グローバル変数でコントロールを変化させる方法のまとめ
今回はグローバル変数を使ってコントロールを変化させる方法を紹介しました。
具体的なケースを画像とコード付きで解説したため、すぐに使えると思います。
結論として、変数はグローバル変数、テーブルの時はコレクションを使いましょう。
それでは、実際にアプリに組み込んで動作させてみましょう!
テーブル以外は、グローバル変数を使おう!