失敗する可能性があることを前提にフローを組めないの?
失敗したら、成功するまで繰り返して
リトライするフローを作れるよ!
Power Automate for desktopのフローで失敗する可能性のある処理をリトライ実行する方法を解説します。
失敗する可能性がある処理はエラーで終了してしまわずに、リトライ(再度実行)することで成功させることができると自動化の幅が広がります。
それでは、どうぞ!
[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]と[パスワード]が入力され❷❸、[ログイン]がクリックされます❹。
このログイン操作が終わると、[お知らせ]画面に遷移し❶、[読みました]がクリックされます❷(ログイン操作に失敗した場合は、エラーが表示されて[お知らせ]画面には遷移しません)。[読みました]がクリックされると、メニュー画面に遷移します。
ログインに失敗した場合は、ログイン操作が2回リトライされます(最初の1回を含めると、合計3回ログイン操作が行われます)。3回のログインの内、1回でも成功すると次のステップに進みます。しかし、3回連続でログインに失敗するとエラーが発生して終了します。
フローは下のページからダウンロードできます。
[2]まとめ
まとまった単位(ブロック)でリトライする方法を解説しました。「リトライするには、このアクションを使う」という決まりがないので、[ブロックエラー発生時]アクションを工夫して使いました。もしかしたら、もっといい方法があるのかもしれません。UiPathには[リトライスコープ]というアクション(UiPathではアクティビティと言う)があるので、そのうちPower Automate for desktopにも似たようなアクションが登場するかもしれません。
Power Automate for desktopは、日々進化していますが、自分で色々と工夫するというのも楽しさの1つです。それでは、また!
コメント ログインすると書き込めます