Power Automate Desktop|ブロックエラー発生時を使ってリトライ実行する方法

めーたん
めーたん

失敗する可能性があることを前提にフローを組めないの?

失敗したら、成功するまで繰り返して
リトライするフローを作れるよ!

こさい
こさい

Power Automate for desktopのフローで失敗する可能性のある処理をリトライ実行する方法を解説します。

失敗する可能性がある処理はエラーで終了してしまわずに、リトライ(再度実行)することで成功させることができると自動化の幅が広がります。

それでは、どうぞ!

この記事を書いた人
この記事を書いた人
こさい
こさい

(株)完全自動化研究所代表のこさいです。

1) エンジニア歴25年超。RPA支援8年超
2) RPA関連の書籍を6冊出版。
3)ご質問・お仕事のご依頼はこちら

[1]ブロックエラー発生時を使ってリトライ実行する方法

リトライ実行は[ブロックエラー発生時]アクションとサブフローをうまく駆使すると実現可能です。実際にフローを作りながら解説していきます。レコーダーの使い方で解説したフロー[Webサイトログイン]を改造するので、最初にこちらの記事をもとにフローを作成してください。

フロー[Webサイトログイン]は完全自動化研究所で運用しているサンプルWebサイトにログインするフローです。サンプルWebサイトは3分の1の確率でログインに失敗する仕様になっているので、ログイン操作をリトライしないとエラーに悩まされます。このサイトを使って、リトライのテクニックを身に付けましょう。

フローは下のページからダウンロードできます。

[1.1]フロー[Webサイトログイン]をコピーする

ここから先はフロー[Webサイトログイン]を作成しているものとして解説していきます。実際にフローを作成していなくても、作り方だけを読んで、自分の作成したフローに応用することもできます。

STEP1 コンソールを操作する

フロー[Webサイトログイン]の[その他のアクション]をクリックし、表示されるメニューの中の[コピーを作成する]をクリックしてください

STEP2 [コピーを作成する]ダイアログを操作する

[コピーを作成する]ダイアログが表示されるので、フロー名を[Webサイトログインリトライ]に変更して、[保存]をクリックしてください

[保存済み」と表示されるので、[閉じる]をクリックしてください

STEP3 フロー[Webサイトログインリトライ]を起動する

フロー[Webサイトログインリトライ]が作成されるので、[編集]をクリックして、フローデザイナーを起動してください。

こさい
こさい

フロー[Webサイトログインリトライ]が開くよ!

[1.2]メインフローに[変数の設定]アクションを追加する

フロー[Webサイトログインリトライ]が開いたら、さっそくフローを作成していきましょう。フロー[Webサイトログインリトライ]を起動すると、現在のメインフローはこのようになっています。ここにアクションを追加していきます。

STEP1 [変数の設定]アクションを追加する

[変数]アクショングループをクリックし、[変数の設定]アクションを[新しいMicrosoft Edgeを起動する]アクションの後に追加してください

STEP2 [変数の設定]アクションを設定する

[変数の設定]ダイアログが表示されるので、変数名を「RetryCount」に変更してください。[値](画像は「宛先」ですが現バージョンでは名前が変わっています)に「0」と入力して、[保存]をクリックしてください

メインフローの変更はいったん完了です。後でもう一度変更しますが、その前にサブフローを新たに追加してフローを作成します。

[1.3]サブフローを追加する

リトライする回数に制限を設けないと、永遠にリトライし続ける可能性があります。3回連続でログインに失敗したら、フローを終了するようにします。

STEP1 サブフロー[Login_Catch]を追加する

[サブフロー]をクリックし、[Login_Catch]という名前のサブフローを追加してください。

このサブフローの中に、エラー発生時のフローを作成していきます。

STEP2 [If]アクションを追加する

[条件]アクショングループをクリックし、[If]アクションをサブフロー[Login_Catch]のワークスペースに追加してください

STEP3 [If]アクションを設定する

[If]ダイアログが表示されます。[最初のオペランド]の[変数の選択]をクリックし、選択可能な変数の一覧から[RetryCount]を見つけて、ダブルクリックしてください

次に[演算子]のドロップダウンリストから[より大きい(>)]を選択し、[2番目のオペランド]に「2」と入力してください。入力が完了したら[保存]をクリックしてください

STEP4 [フローを停止する]アクションを追加する

[If]ブロックの中にアクションを追加します。変数[RetryCount]が2より大きいときに動作します。[フローコントロール]アクショングループをクリックし、[フローを停止する]アクションを[If]アクションの後に追加してください

STEP5 [フローを停止する]アクションを設定する

[フローを停止する]ダイアログが表示されるので、[フローの終了]のドロップダウンリストをクリックし、[エラーメッセージの表示]を選択してください

[エラーメッセージ]の入力ボックスが表示されるので、「3回連続でログイン処理が失敗しました」と入力して、[保存]をクリックしてください

[フローを停止する]アクションの詳しい使い方については「フローを途中で停止させる方法」という記事で解説しているので、興味のある方はお読みください。

これで、変数[RetryCount]が2より大きいときにエラーで終了する、というフローが完成です。下図のようなフローが出来上がっていますね。

こさい
こさい

サブフロー[Login_Catch]の作成が完成したよ。メインフローの変更に戻るよ。

[1.4]メインフローに[ブロックエラー発生時]アクションを追加する

メインフローを変更します。

STEP1 [ブロックエラー発生時]アクションを追加する

メインフローをクリックして、メインフローを表示させてください。[フローコントロール]アクショングループの[ブロックエラー発生時]アクションを2ステップ目の[変数の設定]アクションの後に追加してください

STEP2 [ブロックエラー発生時]アクションを設定する

[ブロックエラー発生時]ダイアログが表示されるので、[名前]に「Main_Block」と入力してください。[新しいルール]をクリックし、[変数の設定]をクリックしてください

変数の設定ができるようになるので、[変数]の右側にある[変数の選択]をクリックし、表示された一覧の中から[RetryCount]をクリックしてください

[変数]に[RetryCount]が設定されました。次に[宛先]の[変数の選択]をクリックし、表示された一覧の中から[RetryCount]をダブルクリックしてください

[宛先]に「%RetryCount%」と入力されるので、「%RetryCount+1%」に変更します。エラーが発生したら変数[RetryCount]を1つカウントアップすることになります。

もう一つ[新しいルール]を追加します。今度は[サブフローの実行]です。[新しいルール]をクリックし、[サブフローの実行]をクリックしてください

[サブフローの実行]が追加されるので、ドロップダウンリストをクリックし、先ほど作成したサブフロー[Login_Catch]を選択してください

[フロー実行を続行する]を選択して、[例外処理モード]のドロップダウンリストをクリックし、[ブロックの先頭に移動する]を選択してください。選択が完了したら[保存]をクリックしてください

STEP3 [End]アクションをドラッグ&ドロップで移動する

[ブロックエラー発生時]アクションとともに[End]アクションも追加されるので、[End]アクションをクリックして選択状態にしてください。[End]アクションを1番下のステップまでドラッグアンドドロップしてください

これでメインフローの変更が完成しました。下図のようになっていますか?

[1.5]実行する

フローを実行してください。

フローを実行すると、Microsoft Edgeが起動し、サンプルWebサイトが表示されます。[ユーザーID]と[パスワード]が入力され❷❸、[ログイン]がクリックされます

フロー実行時の動作-1
フロー実行時の動作-1

このログイン操作が終わると、[お知らせ]画面に遷移し、[読みました]がクリックされます(ログイン操作に失敗した場合は、エラーが表示されて[お知らせ]画面には遷移しません)。[読みました]がクリックされると、メニュー画面に遷移します。

フロー実行時の動作-2
フロー実行時の動作-2


ログインに失敗した場合は、ログイン操作が2回リトライされます(最初の1回を含めると、合計3回ログイン操作が行われます)。3回のログインの内、1回でも成功すると次のステップに進みます。しかし、3回連続でログインに失敗するとエラーが発生して終了します。

MEMO:ログインに1回で成功してしまったときは

1回で成功してしまった(成功したので本当は喜ばしいことですが)場合は、リトライの動作を確認することができないので、サンプルWebサイトを閉じて、再度フローを実行してください。 [ユーザーID]または[パスワード]にテキストが入力されている途中で、キーボードの適当な文字を押して、わざとログインに失敗させる、と手段を使ってもいいです。

フローは下のページからダウンロードできます。

[2]まとめ

まとまった単位(ブロック)でリトライする方法を解説しました。「リトライするには、このアクションを使う」という決まりがないので、[ブロックエラー発生時]アクションを工夫して使いました。もしかしたら、もっといい方法があるのかもしれません。UiPathには[リトライスコープ]というアクション(UiPathではアクティビティと言う)があるので、そのうちPower Automate for desktopにも似たようなアクションが登場するかもしれません。

Power Automate for desktopは、日々進化していますが、自分で色々と工夫するというのも楽しさの1つです。それでは、また!

コメント ログインすると書き込めます