Power AutomatePower Automate for cloudPower Automate Manegementtips

【Power Automate】フロー側で意図せぬ連続実行を防ぎたかった話

Power Automate

Power AppsからPower Automateのフローを実行する際、ボタン連打などによる意図せぬ連続実行を防ぐためにローディング画面を作ったりします。

この方法でも問題ないですが、アプリ側に画像を用意したり変数を新しく定義したり、実装方法の汎用性が低く手間もかかります。

フロー側で連続実行を防ぐことができれば汎用的に意図せぬ連続実行を防ぐことができるのではないかと思い、試行錯誤した結果を共有します。

フロー名に実行日時を追記

まずフロー名に実行日時を追記し、現在時刻との差分から連続実行を防げないか試しました。

結果は失敗で、フローの取得アクション→フローの更新アクションまでに数秒かかるせいで連続実行を防げませんでした。

ナレッジ1:フローの定義はフローの取得で取得でき、フローの更新で更新可能

フローの定義(フローのロジック)はフローの取得アクションで取得でき、フローの更新アクションに入力することでロジックを更新できます。

大した使い道は思いつかないですが、フローを大量にコピーしたいときは使えるかも。

ナレッジ2:文字列を抜き出すにはslice関数が便利

かなり昔にアクションを使用した文字列抽出の方法を紹介していましたが、2年ほど前?に追加されたslice関数を使うとFind関数のような文字列抽出が可能です。

slice(
    outputs('フローの取得')?['body/properties/displayName'], 
    add(indexOf(outputs('フローの取得')?['body/properties/displayName'], '_'), 1)
)

面倒ですがPower Automateでは四則演算にもいちいち関数を使わないといけないです。

そのうちPower Automateの文字列抽出についてまとめる予定です。

ナレッジ3:2つの日時間の差分を求める

dateDifference関数が最近追加されたので差分を求めるのは簡単になりましたが、出力される形式を指定できないので少し使い勝手が悪いです。

そのため、ticks関数の差分を特定の数で割ることで、2つの日時が何分離れているかを算出します。

div(
    sub(
        ticks(convertFromUtc(utcNow(),'Tokyo Standard Time','yyyy/MM/dd HH:mm')),
        ticks(outputs('フロー名から最終実行日時を取得'))
    ),
    600000000
)

以下のツールを利用すれば数式を簡単に生成できます。

HTTP with Microsoft Entra IDを使用する

試していないですが、有償ライセンスがあればRest APIでフローの実行履歴を取得できそうです。

Power Automate でフロー実行を一括でキャンセルまたは再送信する - Power Automate | Microsoft Learn
テンプレート:すべてのフロー実行をキャンセルする
カスタムコネクタ:Everything to know about Power Automate REST API to manage and administer your flows – Mohamed Ashiq Faleel

実行履歴の取得方法は別記事でまとめるかもしれません。(3回目)

他にもアイデアあれば教えていただけると嬉しいです!

コメント

タイトルとURLをコピーしました