MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Power Automate でデバッグする際のTips

『Power Automate でデバッグするのすごい大変』というツイートを最近よく見るので、普段やることと、最近知ったことをまとめておこうかと思います。

Power Automate や Logic Apps でデバッグって確かになかなか難しいですよね。内部処理をトレースできるわけではないので、どこでどういう値が渡されて何が問題だったかというのはエラーメッセージ頼みだったりします。

今回のスコープとしては、ある程度エラーは理解できる前提です。

以下がTipsの4つ

  1. 中身が見えなくなるステップでは直前・直後に「作成」
  2. ツイートしたりTeamsに投稿するアクションをテスト時に止めたいなら「実行条件」
  3. 処理の途中を見たいなら「遅延(待ち時間)」
  4. HTTPアクションで外部サービスをたたきたくないときは「静的な結果」

です。

1. 中身が見えなくなるステップでは直前・直後に「作成」

以前も紹介した方法です。ループ処理や分岐処理では、処理の対象になる値が見えなくなるので、「作成」アクションを前後に入れて、ループの対象アイテムが何なのか、分岐で比較される値は何かを知ることができます。

mofumofupower.hatenablog.com

例えば以下のような分岐のあるフローでは、スイッチで明確に定義している値への分岐ならよいですが、「デフォルト」のほうに分岐してしまうと、じゃあ結局なんだったのかというのがわからなくなります。

f:id:mofumofu_dance:20201117220958p:plain

これを防ぐために、スイッチの分岐処理の前に、判定する値を「作成」アクションに入れてあげることで実行結果が見やすく・理解しやすくなります。

ループ処理の場合には、今度は中で回っている配列内の値がわかりにくくなるので、ループ処理の先頭に items('Apply_to_each')を入れてあげます。

これで実行結果を見たときに「これはどういう値が対象になっているのか」がわかりやすくなります。

f:id:mofumofu_dance:20201117224537p:plain

2. ツイートしたりTeamsに投稿するアクションをテスト時に止めたいなら「実行条件」

処理の途中や最後にツイートしたり、Teamsに投稿したりするアクションがあったとしましょう。そういうアクションをテスト時にONにしていると、テストするたびに無駄なツイートやチャンネルへの投稿が入ってしまいますね。 これを回避するために「実行条件」をいじります。

例えば下図のようなフローを考えた場合、「Blobからのコンテンツ取得はテストしたいけど、間にあるツイートは止めたい」というケースがあります。

f:id:mofumofu_dance:20201117221514p:plain

このような場合には、ツイートするアクションとその直後のアクションの実行条件を変更します。

f:id:mofumofu_dance:20201117221927p:plain

ツイートは前のアクションの失敗時/タイムアウトなどのイレギュラー時のみ実行されるようにし、その後続はツイートがスキップされたらとします。

これでテストの度にツイートはされず、そこだけコメントアウトしたようなフローになります。

3. 処理の途中を見たいなら「遅延(待ち時間)」

最近知った手法です。フローは文字通り、うまく処理されれば止まることなくサーッと流れてしまうので、処理の途中で止めてキャンセルするということがしづらいです。

これを改善するために、注目する処理の手前・直後に「遅延(待ち時間)」のアクションを入れます。

f:id:mofumofu_dance:20201117222401p:plain

例えば上の例では、Apply to eachのループの結果を見て、途中で止めたりしたかったので、Apply to eachの後ろに「遅延」アクションを2分で入れています。 これで、2分の間にApply to eachの結果を見て、そのまま流すか、フローをキャンセルするかを判断できます。

一種のブレークポイントの役割になるわけです。とりわけ、Apply to eachは、ループすべてが終わらないと処理結果がわからないので、その後ろに遅延を入れるのは有効かなと思います。

f:id:mofumofu_dance:20201117222904p:plain

4. HTTPアクションで外部サービスをたたきたくないときは「静的な結果」

これはTipsでもなくて、Docsでも紹介されています。

docs.microsoft.com

主にLogic Apps向けかと思いますが、HTTPアクションで何らかのAPIを実行する場合、他の処理を確認したいだけなのに毎回API実行してしまうと困る場合がありますよね。

例えば対象のサービスにデータが残っちゃうとか、あるいは月の実行回数を消費してしまうとか。そういった困りごとを避けるために(無駄にAPIたたかないために)「静的な結果」という設定が提供されています。

これを利用するとあらかじめ決まった結果を返してくれるので、HTTP以外のアクションの挙動だけを確認することができるようになります。

f:id:mofumofu_dance:20201117223258p:plain

画像の例ではbodyで画像を返すようなAPIを実行した場合のモックデータを「静的な結果」に指定しています。

おわり

Power AutomateやLogic Appsはそのままだとかなりデバッグ・テストで細かく値の流れを見ていくのが大変です。

でも完全に何もできないわけではなく、少し手を加えることでフローの結果を追いかけやすくなることは間違いありません。

今回ご紹介したようなちょっとした豆知識が、フロー作成時に役立てば幸いです。