Power Automate Desktop|ブロックエラー発生時のフローを作成する

この記事は、ブロックエラー発生時のフローを作成する手順について解説しています。

Power Automate Desktop|エラー処理の方法」という記事の補足です。この記事だけでは、意味がわからないと思うので、こちら記事を先にお読みください。↓↓

「Power Automate Desktop|エラー処理の方法」から、飛んできた人は、そのままお読みください。

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

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

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

[1] フローの概要

本記事で作成するフローを簡単に把握しましょう。

テキストファイルを読み込んで、演算を行い、最後にメッセージボックスを表示するというフロー()は「Power Automate Desktop|エラーが発生するフローを作成する」で作成しました。

このフロー内でエラーが発生した場合は、エラーキャッチして、エラーメッセージを表示します()。

本記事で作成するフローの概要

[2] フローの作成準備

STEP1 フロー[エラー処理]をコピーする

Power Automate Desktop|エラーが発生するフローを作成する」で作成したフロー[エラー処理]をコピーして、フロー[ブロックエラー処理]を作成してください。

フロー[エラー処理]をコピーする

STEP2 フロー[ブロックエラー処理]をフローデザイナーで開く

STEP1で作成したフロー[ブロックエラー処理]をフローデザイナーで開いてください。

フロー[エラー処理]で作成したフローが表示されている状態になります。

フロー[ブロックエラー処理]をフローデザイナーで開く

これで準備は完了です。

[3] フローの作成手順

大きく2つの手順でフロー作成を進めていきます。

  • 1.エラー処理を行うサブフローの作成
  • 2.メインフローの作成

[3.1] エラー処理を行うサブフローの作成

最初にサブフローを作成します。このサブフロー内でエラー処理を行います。

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

メインフローの左横の[サブフロー]をクリックし、表示される[新しいサブフロー]をクリックしてください。

[サブフローの追加]ダイアログが表示されるので、[サブフロー名]に「Catch」と入力して()、[保存]をクリックしてください()。

サブフロー[Catch]の追加

サブフロー[Catch]が追加されます。

STEP2 [コメント]アクションを追加する

アクションペインの[フローコントロール]グループをクリックし()、[コメント]アクションをサブフロー[Catch]のワークスペースに追加してください()。

[コメント]アクションの追加

[コメント]ダイアログが開くので、のようにコメントを入力し、[保存]をクリックしてください()。

[コメント]アクションの設定

STEP3 [最後のエラーを取得]アクションを追加する

アクションペインの[フローコントロール]グループ内の[最後のエラーを取得]アクションを[コメント]アクションの後に追加してください()。

[最後のエラーを取得]アクションの追加

[最後のエラーを取得]ダイアログが開くので、[生成された変数]に[LastError]が表示されていることを確認し()、[エラーを消去する]はデフォルトのまま[無効]とします()。

[保存]をクリックしてください()。

[最後のエラーを取得]アクションの設定

STEP4 [メッセージを表示]アクションを追加する

アクションペインの[メッセージボックス]グループをクリックし()、[メッセージを表示]アクションを[コメント]アクションの後に追加してください()。

[メッセージを表示]アクションの追加

[メッセージを表示]ダイアログが開くので、[メッセージボックスのタイトル]に「%LastError.SubflowName%内でエラー発生」と入力し()、[表示するメッセージ]にのように入力してください。

[メッセージを表示]アクションの設定-1

[メッセージボックスアイコン]のドロップダウンリストから[エラー]を選択してください()。

[メッセージを表示]アクションの設定-2

[メッセージボックスを常に手前に表示する]を[有効]にし(4❻)、[メッセージボックスを自動的に閉じる]はデフォルトのまま[無効]としてください()。

[生成された変数]の[ButtonPressed]を[無効]にして()、[保存]をクリックしてください()。

[メッセージを表示]アクションの設定-3
【HINT】「LastError.SubflowName」を正確に入力する方法

[メッセージボックスのタイトル]の「LastError.SubflowName」は、次のステップで選択すると正確に入力できます。

[メッセージボックスのタイトル]の[変数の選択]アイコンをクリックすると(5❶)、フロー変数の一覧が表示されるので、[LastError]の右側の[>]アイコンをクリックしてください()。

[LastError.SubflowName]を選択する方法-1

[LastError]のプロパティが表示されるので、[.SubflowName]をクリックし()、[選択]をクリックしてください()。

[LastError.SubflowName]を選択する方法-2

サブフロー[Catch]が完成しました。

サブフロー[Catch]の完成

[3.2] メインフローの作成

次にメインフローを作成します。

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

メインフローを開いてください。

メインフローを開く

アクションペインの[フローコントロール]グループをクリックし()、[ブロックエラー発生時]アクションを[コメント]アクションの後に追加してください()。

[ブロックエラー発生時]アクションの追加

[ブロックエラー発生時]ダイアログが開くので、[名前]に「Main_Block」と入力してください()。[新しいルール]をクリックしてください()。

メニューが表示されるので、[サブフローの実行]をクリックしてください()。

[ブロックエラー発生時]アクションの設定-1

[サブフローの実行]のドロップダウンリストから[Catch]を選択してください()。

[ブロックエラー発生時]アクションの設定-2

[スローエラー]はそのまま選択状態として()、[予期しないロジックエラーを取得]もデフォルトのまま[無効]としてください()。

[保存]をクリックしてください()。

[ブロックエラー発生時]アクションの設定-3

STEP2 4ステップ目から6ステップ目までを移動する

4ステップ目から6ステップ目までを選択して()、[ブロックエラー発生時]アクションと[End]アクションの間にドラッグ&ドロップで移動させてください()。

4ステップ目から6ステップ目までを移動

メインフローが完成しました。
↓↓

メインフローの完成

[4] フローの実行

ここから、フローを実行して、ブロックエラー発生時の処理を確認していきます!

フロー実行の内容
  • ①エラー後、フローを続けない場合(スローエラー)
  • ②フローを続けない場合(スローエラー)その2
  • ③フローを続けない場合(スローエラー)その3
  • ④フローを続ける場合(フロー実行を続行する)
フロー実行の前提

Power Automate Desktop|エラーが発生するフローを作成する」のフローを実行して、[エラーテスト2.txt]が存在し、[エラーテスト.txt]が存在しない、という状態であることが前提です。

[4.1] エラー後、フローを続けない場合(スローエラー)

最初に、ブロックエラー発生後に、フローを続けない場合を確認します。

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

「エラー処理について考えよう」で[エラーテスト.txt]の名前を[エラーテスト2.txt]に変更したままなのでエラーが発生します()。

すると、[Catch]サブフローに遷移し()、メッセージボックスが表示されます()。

メッセージボックスのタイトルからメインフロー内でエラーが発生したことがわかります()。エラーが発生したアクション()とそのエラー内容もわかります()。

[OK]をクリックしてください()。
スローエラーによりフローが異常終了します。

フロー実行結果

これは「Power Automate Desktop|エラーが発生するフローを作成する」のフローでも発生したエラーですね。エラーパネルにエラーが表示されます。

[4.1.1] テキストファイルの名前を変更

エラーを確認できましたね。
別のパターンを確認したいので、テキストファイルの名前を変更してください。

[ドキュメントフォルダー]の[エラーテスト2.txt]の名前を[エラーテスト.txt]に変更してください(❶❷)。

[エラーテスト2.txt]の名前を[エラーテスト.txt]に変更

[4.2] フローを続けない場合(スローエラー)その2

ブロックエラー発生後に、フローを続けない場合の別パターンを確認します。そのために、「テキストファイルが存在しない」というエラーではなく、別のエラーを発生させます。

[エラーテキスト.txt]の内容を変更してください。現在「1」が入力されていますが、これを「0」に変更し、上書き保存して閉じてください(❶❷❸)。

[エラーテキスト.txt]の内容を変更

[エラーテキスト.txt]は閉じれましたね。

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

すると、[変数の設定]アクションでエラーが発生します()。エラー内容は「0で割る演算は許可されません」となっています(①②)。

フローの実行結果

変数[FileContents]には「0」が入るので、100を0(ゼロ)で割ることになり、ゼロ除算エラーが発生することになります。

今度はサブフロー[Catch]に遷移せずに終了しました。
ブロックエラー発生時のアクションが効いていない感じですね!?

なぜでしょう?

それは、、

Power Automate for desktopがあらかじめ予期しているエラーには対応できますが、予期しないエラーは[ブロックエラー発生時]アクションのデフォルトの設定では対応できないから、です。

この例のように、演算を行ってみないとわからない『ゼロ除算エラーのような論理的なエラー』は、予期できず対応できなかったというわけです。

[4.3] フローを続けない場合(スローエラー)その3

このような『予期しないエラー』にも対応できるように、[ブロックエラー発生時]アクションを変更してください。

[ブロックエラー発生時]アクションをダブルクリックしてください()。

[ブロックエラー発生時]アクションをダブルクリック

[ブロックエラー発生時]ダイアログが開くので、[予期しないエラーを取得]を有効にし()、[保存]をクリックしてください()。

[ブロックエラー発生時]アクションを変更

もう一度、フローを実行してください。

今度はサブフロー[Catch]に遷移し、エラーメッセージボックスが表示されます。

【図31】フローの実行結果

論理的なエラーをキャッチすることができました!

[4.4] フローを続ける場合(フロー実行を続行する)

最後にエラーが発生しても、フローを続ける場合を試してみましょう。

[ブロックエラー発生時]アクションを変更してます。[ブロックエラー発生時]アクションをダブルクリックしてください。

[ブロックエラー発生時]アクションをダブルクリック

[ブロックエラー発生時]ダイアログが開くので、[フロー実行を続行する]をクリックしてください()。

[例外処理モード]はデフォルトのまま[ブロックの末尾に移動する]とし()、[保存]をクリックしてください()。

[ブロックエラー発生時]アクションを変更
【HINT】[例外処理モード]の選択項目

[例外処理モード]の選択項目は下図の5つがあります。

[例外処理モード]の選択項目

フローを実行してください()。[Catch]サブフローに遷移し、[エラー発生]メッセージボックスが表示されます。

[OK]をクリックしてください()。

フローの実行結果

さらにフローの実行が続き、「フローの実行に成功しました」というメッセージボックスが表示されるので、[OK]をクリックしてください()。フローが終了します。

フローの実行結果

ステータスバーに「ステータス:準備完了」と表示されます。

エラーメッセージが表示されたのに、「フローの実行に成功した」というのには違和感があるかもしれませんが、これは正しい動作です。

エラーが発生したけれど、フローを続行することができたということです。

[5] まとめ

はい、ブロックエラー発生時の処理について、フローで確認してきました。

なかなか、複雑でしたね……。

ブロック内には複数のアクションがあり、複数の種類のエラーが発生する可能性があるので、

ブロックエラー発生時の処理は汎用的なものになります。

エラーメッセージを取得して、メッセージボックスでポップアップ表示するくらいがよいでしょう。

「フローの実行|④フローを続ける場合(フロー実行を続行する)」のように、ブロック内でエラーが発生して、フローを続行するケースは多くないはずです。

フローを続行する特殊なケースとしては、『リトライ処理』があります。

たまにブロック内でエラーが発生することが分かっており、複数回ブロック内のアクションを繰り返し実行したい場合です。

ブロックエラー発生時の処理について、だいぶ理解できたと思います。

「Power Automate Desktop|エラー処理の方法」に戻って、続きを実施してください。
>>Power Automate Desktop|エラー処理の方法に戻る

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