この記事は、ブロックエラー発生時のフローを作成する手順について解説しています。
「Power Automate Desktop|エラー処理の方法」という記事の補足です。この記事だけでは、意味がわからないと思うので、こちら記事を先にお読みください。↓↓
「Power Automate Desktop|エラー処理の方法」から、飛んできた人は、そのままお読みください。
[1] フローの概要
本記事で作成するフローを簡単に把握しましょう。
テキストファイルを読み込んで、演算を行い、最後にメッセージボックスを表示するというフロー(①)は「Power Automate Desktop|エラーが発生するフローを作成する」で作成しました。
このフロー内でエラーが発生した場合は、エラーキャッチして、エラーメッセージを表示します(②)。
[2] フローの作成準備
STEP1 フロー[エラー処理]をコピーする
「Power Automate Desktop|エラーが発生するフローを作成する」で作成したフロー[エラー処理]をコピーして、フロー[ブロックエラー処理]を作成してください。
STEP2 フロー[ブロックエラー処理]をフローデザイナーで開く
STEP1で作成したフロー[ブロックエラー処理]をフローデザイナーで開いてください。
フロー[エラー処理]で作成したフローが表示されている状態になります。
これで準備は完了です。
[3] フローの作成手順
大きく2つの手順でフロー作成を進めていきます。
- 1.エラー処理を行うサブフローの作成
- 2.メインフローの作成
[3.1] エラー処理を行うサブフローの作成
最初にサブフローを作成します。このサブフロー内でエラー処理を行います。
STEP1 サブフロー[Catch]を追加する
メインフローの左横の[サブフロー]をクリックし、表示される[新しいサブフロー]をクリックしてください。
[サブフローの追加]ダイアログが表示されるので、[サブフロー名]に「Catch」と入力して(❶)、[保存]をクリックしてください(❷)。
サブフロー[Catch]が追加されます。
STEP2 [コメント]アクションを追加する
アクションペインの[フローコントロール]グループをクリックし(❶)、[コメント]アクションをサブフロー[Catch]のワークスペースに追加してください(❷)。
[コメント]ダイアログが開くので、❸のようにコメントを入力し、[保存]をクリックしてください(❹)。
STEP3 [最後のエラーを取得]アクションを追加する
アクションペインの[フローコントロール]グループ内の[最後のエラーを取得]アクションを[コメント]アクションの後に追加してください(❶)。
[最後のエラーを取得]ダイアログが開くので、[生成された変数]に[LastError]が表示されていることを確認し(❷)、[エラーを消去する]はデフォルトのまま[無効]とします(❸)。
[保存]をクリックしてください(❹)。
STEP4 [メッセージを表示]アクションを追加する
アクションペインの[メッセージボックス]グループをクリックし(❶)、[メッセージを表示]アクションを[コメント]アクションの後に追加してください(❷)。
[メッセージを表示]ダイアログが開くので、[メッセージボックスのタイトル]に「%LastError.SubflowName%内でエラー発生」と入力し(❸)、[表示するメッセージ]に❹のように入力してください。
[メッセージボックスアイコン]のドロップダウンリストから[エラー]を選択してください(❺)。
[メッセージボックスを常に手前に表示する]を[有効]にし(4❻)、[メッセージボックスを自動的に閉じる]はデフォルトのまま[無効]としてください(❼)。
[生成された変数]の[ButtonPressed]を[無効]にして(❽)、[保存]をクリックしてください(❾)。
[メッセージボックスのタイトル]の「LastError.SubflowName」は、次のステップで選択すると正確に入力できます。
[メッセージボックスのタイトル]の[変数の選択]アイコンをクリックすると(5❶)、フロー変数の一覧が表示されるので、[LastError]の右側の[>]アイコンをクリックしてください(❷)。
[LastError]のプロパティが表示されるので、[.SubflowName]をクリックし(❸)、[選択]をクリックしてください(❹)。
サブフロー[Catch]が完成しました。
[3.2] メインフローの作成
次にメインフローを作成します。
STEP1 [ブロックエラー発生時]アクションを追加する
メインフローを開いてください。
アクションペインの[フローコントロール]グループをクリックし(❷)、[ブロックエラー発生時]アクションを[コメント]アクションの後に追加してください(❸)。
[ブロックエラー発生時]ダイアログが開くので、[名前]に「Main_Block」と入力してください(❹)。[新しいルール]をクリックしてください(❺)。
メニューが表示されるので、[サブフローの実行]をクリックしてください(❻)。
[サブフローの実行]のドロップダウンリストから[Catch]を選択してください(❼)。
[スローエラー]はそのまま選択状態として(❽)、[予期しないロジックエラーを取得]もデフォルトのまま[無効]としてください(❾)。
[保存]をクリックしてください(❿)。
STEP2 4ステップ目から6ステップ目までを移動する
4ステップ目から6ステップ目までを選択して(❶)、[ブロックエラー発生時]アクションと[End]アクションの間にドラッグ&ドロップで移動させてください(❷)。
メインフローが完成しました。
↓↓
[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]に変更してください(❶❷)。
[4.2] フローを続けない場合(スローエラー)その2
ブロックエラー発生後に、フローを続けない場合の別パターンを確認します。そのために、「テキストファイルが存在しない」というエラーではなく、別のエラーを発生させます。
[エラーテキスト.txt]の内容を変更してください。現在「1」が入力されていますが、これを「0」に変更し、上書き保存して閉じてください(❶❷❸)。
[エラーテキスト.txt]は閉じれましたね。
では、フローを実行してください。
すると、[変数の設定]アクションでエラーが発生します(❶)。エラー内容は「0で割る演算は許可されません」となっています(①②)。
変数[FileContents]には「0」が入るので、100を0(ゼロ)で割ることになり、ゼロ除算エラーが発生することになります。
今度はサブフロー[Catch]に遷移せずに終了しました。
ブロックエラー発生時のアクションが効いていない感じですね!?
なぜでしょう?
それは、、
Power Automate for desktopがあらかじめ予期しているエラーには対応できますが、予期しないエラーは[ブロックエラー発生時]アクションのデフォルトの設定では対応できないから、です。
この例のように、演算を行ってみないとわからない『ゼロ除算エラーのような論理的なエラー』は、予期できず対応できなかったというわけです。
[4.3] フローを続けない場合(スローエラー)その3
このような『予期しないエラー』にも対応できるように、[ブロックエラー発生時]アクションを変更してください。
[ブロックエラー発生時]アクションをダブルクリックしてください(❶)。
[ブロックエラー発生時]ダイアログが開くので、[予期しないエラーを取得]を有効にし(❷)、[保存]をクリックしてください(❸)。
もう一度、フローを実行してください。
今度はサブフロー[Catch]に遷移し、エラーメッセージボックスが表示されます。
論理的なエラーをキャッチすることができました!
[4.4] フローを続ける場合(フロー実行を続行する)
最後にエラーが発生しても、フローを続ける場合を試してみましょう。
[ブロックエラー発生時]アクションを変更してます。[ブロックエラー発生時]アクションをダブルクリックしてください。
[ブロックエラー発生時]ダイアログが開くので、[フロー実行を続行する]をクリックしてください(❶)。
[例外処理モード]はデフォルトのまま[ブロックの末尾に移動する]とし(❷)、[保存]をクリックしてください(❸)。
[例外処理モード]の選択項目は下図の5つがあります。
フローを実行してください(❶)。[Catch]サブフローに遷移し、[エラー発生]メッセージボックスが表示されます。
[OK]をクリックしてください(❷)。
さらにフローの実行が続き、「フローの実行に成功しました」というメッセージボックスが表示されるので、[OK]をクリックしてください(❸)。フローが終了します。
ステータスバーに「ステータス:準備完了」と表示されます。
エラーメッセージが表示されたのに、「フローの実行に成功した」というのには違和感があるかもしれませんが、これは正しい動作です。
エラーが発生したけれど、フローを続行することができたということです。
[5] まとめ
はい、ブロックエラー発生時の処理について、フローで確認してきました。
なかなか、複雑でしたね……。
ブロック内には複数のアクションがあり、複数の種類のエラーが発生する可能性があるので、
ブロックエラー発生時の処理は汎用的なものになります。
エラーメッセージを取得して、メッセージボックスでポップアップ表示するくらいがよいでしょう。
「フローの実行|④フローを続ける場合(フロー実行を続行する)」のように、ブロック内でエラーが発生して、フローを続行するケースは多くないはずです。
ブロックエラー発生時の処理について、だいぶ理解できたと思います。
「Power Automate Desktop|エラー処理の方法」に戻って、続きを実施してください。
>>Power Automate Desktop|エラー処理の方法に戻る
コメント ログインすると書き込めます