はじめに
Power Appsでループ処理というと、
- タイマーを用いたループ処理
- スライダーを用いたループ処理
の2つがよく利用されています。
* 厳密にいうとForAll 関数もありますが、こちらは上記のWhile系ループとはことなりFor-Each系ループなので省略しています。
今回これらに加えてさらにもう一つのやり方、トグルでのループ方法を紹介したいと思います!
記事のタイトルはタイポじゃないよ!
語呂がよかったの!!
こんな感じー
トグルでループ処理を実現する
トグルコントロール(切り替えコントロール)を利用することでもループ処理を行ってみます。
ざっくりやり方としては
- トグルの
Default
に設定するフラグを作成 - トグルが変更されたら(
OnChange
)"1"で作成したフラグを反転させる OnCheck
やOnUncheck
、またはOnChange
でループ処理を設定
みたいな感じで、トグルのオン/オフを切り替えることで実現できます。
細かい設定方法をみていきましょう。
ループに必要なコントロールと変数を用意する
まずはトグルを用いたループに必要なコントロールや変数を用意します。
ループを行うための要素
ループを行うためには以下要素は必要です。
- ループを行うためのトグルコントロール
- 1で用意したトグルのオン/オフを切り替えるための変数
2はtrue
/false
を切り替えることで実現可能なので以下のような変数を用意します。
UpdateContext({toggleFlg: false});
ループを開始/緊急停止するための要素
ループを開始するために、トグルのオン/オフを切り替えるための変数(toggleFlg
)をtrue
にするための処理が必要です。
これはボタンなどで実現できますね。
Button.OnSelect
UpdateContext({toggleFlg: true})
上で紹介しているGifでは右下のループ開始用トグルをオンにすることでtrue
にしています。
isLoopTgl.OnCheck
UpdateContext({toggleFlg: true})
また、開発中は予期せぬ無限ループを防ぐためにセーフティ機能として、ループ緊急停止機能が欲しいです。
これを実現するには、
- ループ緊急停止用のフラグを用意する
- ループ緊急停止用のトグルを用意する
の2つがあります。
Gifでは後者で対応しています。
よってループ用のトグルのDefault
には以下のような式を設定しています。
LoopTgl.Default
toggleFlg && isLoopTgl.Value
上記の式では"isLoopTgl.Value"で緊急停止機能を実現していますので、トグルではなく変数で対応される方はこちらを変更してください。
ループさせる仕組み
ループを行うためには、ループ用のトグルをオンにしたりオフにしたりすればよいです。
よって、トグルが変更されたらトグルのDefault
に設定されているフラグの値を切り替えてあげましょう。
LoopTgl.OnChange
UpdateContext({toggleFlg: !toggleFlg})
ループ条件を別で設定したい場合はループ用のトグルのDefault
に条件を追加してあげます。
例えばループの実行条件として変数num
が100以下であること。という条件を加えたい場合は以下のようになりますね。
LoopTgl.Default
toggleFlg && isLoopTgl.Value && num <= 100
これでループ処理が実現できます!
ループ処理を記載する
ループ処理はOnCheck
やOnUncheck
で実現します。
もちろんOnChange
に記載してもらっても大丈夫です。
OnCheck
やOnUncheck
で記載するメリットとしては以下ですかね。
- ループの仕組み用の処理とループ内で実行したい処理を分けることができる
- ループ内の処理の種類によって記載場所を分けられる(可読性向上)
(トグルのオン/オフの切り替えは高速なのでそんなに気にならないはず)
まぁ、めんどくさければOnChenge
に記載するのでも処理自体は変わらないので、好みによって使い分けてください。
おわりに
トグルでループ処理を行うメリットとしては、
- タイマーよりも高速(滑らか)なループを実現できる
- ループに必要な処理とループ内の処理を分離できる(可読性向上)
かな?と思います。
ま、こういう方法もあるんだな!ということを知っていただければ幸いです。
凄くざっくり書いちゃったのでよくわからない点などあればコメントお願いしますー