- リリース ノート
- 基本情報
- セットアップと構成
- オートメーション プロジェクト
- 依存関係
- ワークフローの種類
- ファイルの比較
- オートメーションのベスト プラクティス
- ソース管理との連携
- デバッグ
- 診断ツール
- ワークフロー アナライザー
- 変数
- 引数
- インポートされた名前空間
- 制御フロー
- オブジェクト リポジトリ
- ログ
- ScaleCoordinates 移行ツール
- ScreenScrapeJavaSupport ツール
- Studio Pro
- 拡張機能
- トラブルシューティング
グローバル例外ハンドラーは、実行エラーが発生した場合にプロジェクトの動作を決定するよう設計されたワークフローの一種です。オートメーション プロジェクト 1 件につき、グローバル例外ハンドラー を 1 つだけ追加できます。
グローバル例外ハンドラーが使用できるのはプロセスのみです。ライブラリには使用できません。
The Global Exception Handler has two arguments, that should not be removed.
1 つ目の引数は [入力] 方向にerrorInfoされ、発生したエラーと失敗したワークフローに関する情報を格納します。ログ対象とするエラー レベルは [ メッセージをログ ] アクティビティで設定できます。
errorInfo の ActivityInfo プロパティを使用して、例外をスローしたアクティビティの名前を取得し、[出力] パネルに表示します。
2 つ目の引数は、出力方向の result です。エラー発生時に、この引数を使用してプロセスの次の動作を決定します。次の値が result 引数に割り当てられます。
-
Continue - 例外が再度スローされます。
-
無視 - 例外を無視して、次のアクティビティから実行を続行します。
-
リトライ - 例外をスローしたアクティビティがリトライされます。
errorInfoのRetryCountメソッドを使用して、アクティビティのリトライ回数をカウントします。 -
中止 - 現在のグローバル例外ハンドラーを実行した後に、実行が中止されます。
注:Studio では、ライブラリ プロジェクト以外の任意のプロジェクトと
Main.xamlをグローバル例外ハンドラーとしてフラグ付けすることができます。
デバッグ中に発生したエラーを処理する
デバッグ中に例外が検出されると、失敗したアクティビティが強調表示され、実行が停止し、[ローカル] パネルと [コール スタック] パネルに例外の種類と詳細が表示されます。
Debugging actions like Continue, Stop, Retry, Ignore, Restart and Slow Step are available in the ribbon. Ignore is used for continuing the execution from the next activity.
グローバル例外ハンドラーが介入することなく、[リトライ] ボタンは現在のアクティビティを実行しようとします。続行操作を行うと、result 引数で以前に選択された値 (Continue、Ignore、Retry、または Abort のいずれか) を考慮して、グローバル例外ハンドラーを実行します。
[トライ キャッチ] を含むプロジェクトで グローバル例外ハンドラー を使用する際には、必ず[Try] コンテナーの内部の[シーケンス] にアクティビティをグループ化してください。グループ化しないと、 グローバル例外ハンドラー は実行されません。
入れ子になったアクティビティの場合、グローバル例外ハンドラーは、コールスタックに含まれるそれぞれのアクティビティに対して実行されます。ただし、[トライ キャッチ] に直接カプセル化されている複数のアクティビティについては、これらが 1 つのアクティビティに格納されていない限り、グローバル例外ハンドラーは実行されません。
グローバル例外ハンドラーの使用例
次の例では、実行中に例外がスローされた場合のプロジェクトの動作を示します。
このオートメーション プロジェクトは、空で保存された Notepad ドキュメントの内部をクリックし、テキストを入力した後でアプリケーションを閉じるように設定されています。ただし、保存ボタンをクリックしてドキュメントを保存する前に、この操作が発生しないようにします。
エラー発生時のこのワークフローの動作を制御するために、グローバル例外ハンドラー はこのアクティビティを 3 回リトライしてから、エラー メッセージを表示して中止します。
ワークフローを作成する
-
Create a Blank Process by following the steps in the Creating a Basic Process page.
-
Notepad を開き、ドキュメントを使用中のマシンに保存します。
-
From the Activities panel, drag a Type Into activity to the Designer panel. The activity is automatically added to a Sequence.
-
[文字を入力] アクティビティで、[画面上で指定] をクリックします。Studio が最小化し、[メモ帳] ウィンドウの内部をクリックしてセレクターを作成できるようになります。テキスト フィールドに、目的のテキストを引用符で囲んで入力します。
-
From the Activities panel, add a Send Hotkey activity to the workflow. Indicate the Notepad window, and select Ctrl from the activity, type in s in the Key field. This saves the Notepad document after the text was typed in.
-
From the Activities panel, add a Close Application activity to the workflow. Indicate the Notepad window using Indicate on screen. The resulted workflow should look like this:
グローバル例外ハンドラーを追加する
-
リボンの一部である [デザイン] タブで、[新規作成] > [グローバル ハンドラー] を選択します。[新しいグローバル ハンドラー]ウィンドウが開きます。ハンドラーの名前を入力して、プロジェクト パスに保存します。[作成] をクリックすると、グローバル例外ハンドラー がオートメーション プロジェクトに追加されます。
-
[変数] タブで、
retryCountという名前でInt32の変数を作成します。その範囲をグローバル例外ハンドラー全体に設定して、[既定値] フィールドは空のままにしておきます。この変数はリトライ回数を格納します。エラーが発生するたびに1ずつ数値がインクリメントされます。 -
failedActivityという名前の String 変数を作成し、その範囲をワークフロー全体に設定します。この変数は失敗したアクティビティの名前を格納し、[出力] パネルに表示します。 -
From the Activities panel, add an Assign activity below the Log Error in the Global Handler sequence. Add the
retryCountto the activity and assign it theerrorInfo.RetryCountexpression, which counts the number of times the exception is thrown. -
errorInfo.ActivityInfo.Name式をfailedActivity変数に代入する別の[代入] アクティビティを追加します。この時点で、ワークフローは次のようになっています。 -
Add an If activity to the workflow. Set the Condition to
retryCount < 3to limit the number of retries to 3. -
[Then] カテゴリの[代入] アクティビティの部分で、
ErrorAction.Retryをresult変数に代入し、グローバル例外ハンドラーが例外をスローしたアクティビティをリトライするようにします。 -
[Else] カテゴリで、
ErrorAction.Abortをresultに代入し、条件に適合したときにグローバル例外ハンドラーが実行を中止するようにします。[条件分岐 (if)] アクティビティは次のようになります。
グローバル例外ハンドラーは例外を検出すると、失敗したアクティビティの名前をログし、そのアクティビティを 3 回リトライします。実行のたびに同じ例外が発生し、リトライ回数が 3 回に達した場合、例外をスローしたアクティビティのレベルで実行を中止します。
試行中に 1 回でも例外が発生しなかった場合には、ワークフローの実行が継続され、グローバル例外ハンドラーは介入しません。