コルネの進捗や備忘録が記されたなにか

進捗や成果物や備忘録てきななにかを雑に更新していきます。

Power Appsでトグループを設定してみよう


スポンサードリンク

はじめに

Power Appsでループ処理というと、

  • タイマーを用いたループ処理
  • スライダーを用いたループ処理

の2つがよく利用されています。

* 厳密にいうとForAll 関数もありますが、こちらは上記のWhile系ループとはことなりFor-Each系ループなので省略しています。

今回これらに加えてさらにもう一つのやり方、トグルでのループ方法を紹介したいと思います!

記事のタイトルはタイポじゃないよ!
語呂がよかったの!!

こんな感じー

トグルでループ処理を実現する

トグルコントロール(切り替えコントロール)を利用することでもループ処理を行ってみます。

ざっくりやり方としては

  1. トグルのDefaultに設定するフラグを作成
  2. トグルが変更されたら(OnChange)"1"で作成したフラグを反転させる
  3. OnCheckOnUncheck、またはOnChangeでループ処理を設定

みたいな感じで、トグルのオン/オフを切り替えることで実現できます。

細かい設定方法をみていきましょう。

ループに必要なコントロールと変数を用意する

まずはトグルを用いたループに必要なコントロールや変数を用意します。

ループを行うための要素

ループを行うためには以下要素は必要です。

  1. ループを行うためのトグルコントロール
  2. 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

これでループ処理が実現できます!

ループ処理を記載する

ループ処理はOnCheckOnUncheckで実現します。
もちろんOnChangeに記載してもらっても大丈夫です。

OnCheckOnUncheckで記載するメリットとしては以下ですかね。

  • ループの仕組み用の処理とループ内で実行したい処理を分けることができる
  • ループ内の処理の種類によって記載場所を分けられる(可読性向上)
    (トグルのオン/オフの切り替えは高速なのでそんなに気にならないはず)

まぁ、めんどくさければOnChengeに記載するのでも処理自体は変わらないので、好みによって使い分けてください。

おわりに

トグルでループ処理を行うメリットとしては、

  • タイマーよりも高速(滑らか)なループを実現できる
  • ループに必要な処理とループ内の処理を分離できる(可読性向上)

かな?と思います。

ま、こういう方法もあるんだな!ということを知っていただければ幸いです。

凄くざっくり書いちゃったのでよくわからない点などあればコメントお願いしますー


スポンサードリンク