![見出し画像](https://assets.st-note.com/production/uploads/images/83904471/rectangle_large_type_2_b2b60d19974892872825f0074808539b.jpeg?width=800)
Power Appsのススメ 〜その4〜 アラーム機能追加(1)
前回は時計をキャンバス型アプリで作成してみました。
今回は、その時計アプリをベースにして、アラーム機能を追加してみたいと思います。
1.アプリケーションの初期化とグローバル変数
今回追加するアラーム機能では、アラームの時刻を設定する画面を追加します。
複数の画面をまたがって値を扱うには、グローバル変数を使う必要があります。
コンテキスト変数は画面が表示された際に評価されるOnVisibleプロパティで初期化を行いました。
グローバル変数も同様に初期化を行う必要があるのですが、その初期化はAppオブジェクトのOnStartプロパティで行います。
1−1.アプリケーションの初期化に利用できるApp.OnStartプロパティ
Power AppsのアプリケーションオブジェクトであるAppには、OnStartというプロパティがあります。
このプロパティはアプリケーションが起動した際に1度だけ評価されます。
ここに関数を記述しておくと、起動時に1回だけ呼び出されることになるので、アプリケーションの初期化をしたい場合に利用します。
今回はグローバル変数AlarmTimeの定義と初期化に利用します。
AppオブジェクトのOnStartプロパティに、次の様にSet関数を記述します。
![](https://assets.st-note.com/img/1659440353109-UkZ77DZCYF.png?width=800)
1−2.グローバル変数の定義を行うSet関数
Set関数で定義した変数は、全てグローバル変数となります。
Set(AlarmTime, Blank());
このように関数を記述すると、AlarmTimeという名称でグローバル変数が定義されます。
なお、ここで使用しているBlank関数は、空白値を返します。
これでアラームが設定されているかは、AlarmTimeが空白か否か、で判断できるようになります。
また、後ほど解説しますが、空白か否かを調べるには、If関数とIsBlank関数を使用します。
2.ボタンコントロールとアラーム時刻表示
次に、アラームを設定するための設定画面に遷移するボタンを追加します。
また、設定したアラーム時刻の表示部をテキストラベルで用意します。
![](https://assets.st-note.com/img/1659440465700-jp2O26O1fC.png?width=800)
2−1.Textプロパティの設定
2つのテキストラベルはそれぞれlblAlarmTitle、lblAlarm、ボタンはbtnAlarmSetと名付け、テキストプロパティを以下のように設定します。
![](https://assets.st-note.com/img/1659440494016-DvhS7d0tPP.png?width=800)
![](https://assets.st-note.com/img/1659504181674-MYsk17fye5.png?width=800)
![](https://assets.st-note.com/img/1659440501032-6hpT9tkXHS.png?width=800)
lblAlarmのTextプロパティだけ定数ではなく関数を使ってますが、これはアラーム時刻が未設定時に対応するためです。
2−2.If関数とIsBlank関数
lblAlarmのTextプロパティは以下の通りです。
If(IsBlank(AlarmTime),"--時--分",Text(AlarmTime,DateTimeFormat.ShortDateTime24,"ja"))
If関数は、評価式の結果によって評価する処理を選択できます。
If関数の書式は複数あり、そのうちの1つが以下の書式です。
If(評価式,評価の結果が真の場合の値[,評価の結果が偽の場合の値])
1つ目の引数が評価式で、その結果が真(true)の場合は2つ目の引数が評価されます。
評価式の結果が偽(false)の場合、2つ目の引数は評価されず、3つ目の引数が存在する場合に限り評価されます。
また、IsBlank関数は、引数で渡した値が空白値かどうかで真偽を返します。
なお、Blank関数の値と別に、""(空文字列)も空白値として認識されます。
先のTextプロパティのIf関数は、AlarmTimeが空白値であれば"--時--分"と表示し、そうでなければAlarmTimeを時刻として表示します。
3.アラーム設定画面の追加
次にアラームの設定画面を追加します。
画面の追加は、ツリービューの「+新しい画面の追加」から行います。
![](https://assets.st-note.com/img/1659440680663-O3t13Xmzvi.png?width=800)
今回は空のレイアウトで追加します。
画面の名称は、scrAlarmSettingとします。
この画面では、テキストラベルを3つ、ドロップダウンコントロールを2つ(drpHour、drpMin)、ボタンを3つ(btnAlarmSetting、btnAlarmCancel、btnBack)使って機能を構築します。
![](https://assets.st-note.com/img/1659539837895-YaXwDVsaVx.png?width=800)
3−1.ドロップダウンコントロール
時刻の設定には、時と分を別々にドロップダウンコントロールで行います。
![](https://assets.st-note.com/img/1659440776270-RKY0bnJTTA.png?width=800)
それぞれ、drpHourとdrpMinとし 、drpHourは00〜23まで、drpMinは00〜55までの5分刻みで選択肢を用意します。
ドロップダウンコントロールの選択肢は、Itemsプロパティで指定します。
例えばdrpHourの場合、次のように指定します。
![](https://assets.st-note.com/img/1659539709587-ayJztBUEDs.png?width=800)
ここでは「文字列」で設定しておきます。
これには理由があり、後で時刻変換する際に、時分秒の指定は2桁の文字列がそれぞれ必要となるためです。
[ ]は配列を表します。
こうすることでdrpHourでは0〜23を選択出来るようになります。
なお、Defaultプロパティは0を指定しておきます
3−2.コントロールの配置
コントロールは選択して右クリックすると、いくつかのポップアップメニューが表示されます。
その中の「配置」サブメニューでコントロールの位置を自動調整出来ます。
![](https://assets.st-note.com/img/1659442770275-Rz67lNMaRq.png?width=800)
2つ目以降のコントロールを挿入する際には、他のコントロールを基準にしたガイドラインも表示されるので、自分の好きなUIデザインを構築することが可能です。
(センスがモノを言いますよね・・・あせあせ)
先ほどのアラーム設定画面はこのようにして作成しました。
4.画面遷移
アラーム設定画面ができたところで、画面遷移を実装してみましょう。
画面遷移を行うには、Navigateという関数を利用します。
引数には、遷移先の画面名を指定します。
4−1.時計画面からアラーム設定画面へ遷移する
それでは時計画面からアラーム設定画面へ遷移させてみましょう。
scrClockのbtnAlarmSet.OnSelectプロパティに、先ほどのNavigate関数を記述します。
![](https://assets.st-note.com/img/1659443568084-QzCx7nypT0.png?width=800)
OnSelectプロパティは、コントロールがクリック、タップされた際に評価されます。
4−1.アラーム設定画面から戻る
同様に、アラーム設定画面から時計画面に戻る遷移も実装してみます。
scrAlarmSettingのbtnBack.OnSelectプロパティに、Navigate関数を記述します。
![](https://assets.st-note.com/img/1659443774391-iRal36xPTp.png?width=800)
これで相互の画面を行き来できるようになりました。
お疲れ様でした。
今回はここまでとしましょう。
次回はいよいよアラームを設定し、アラーム(音)を鳴らしてみましょう。
この記事が気に入ったらサポートをしてみませんか?