System.Exception変数の値が変わる契機について

こんにちは。UiPath Studio EnterPrise版23.4.2ユーザの初心者です。

  1. WFの説明
    Try CatchアクティビティのCatch Blockで呼び出されるErrorHandler.xamlでSystem.Exception変数をi_exec_SystemExceptionという名前で引数として使い、Main.xamlでは、exec_SystemExceptionという別の名前で変数として使っています。

2.質問内容
Webからファイルダウンロード時にネットワーク輻輳が発生してワークフローが止まった場合、i_exec_SystemExceptionやexec_SystemExceptionなどすべてのSystem.Exception変数、引数にNot Nullの値が自動的に設定されるという認識で間違いないでしょうか?
それとも、ファイルダウンロードに関係するTry CatchアクティビティのCatch Blockで自動生成されるSystem.Exception変数だけNot Nullに上書きされますか?

いいえ、Web からファイルをダウンロードするときにネットワークの輻輳が発生し、ワークフローが停止すると、すべての System.Exception 変数と引数に Not Null 値が自動的に設定されるというのは正しくありません。

ファイルのダウンロードに関連する Try Catch アクティビティの Catch ブロックで自動的に生成される System.Exception 変数のみが Not Null に上書きされます。他の System.Exception 変数と引数は元の値を保持しており、Null である可能性があります。

これは、例外が発生するとワークフローが終了し、実行スタックが巻き戻されるためです。これは、例外発生時にスタック上にあったすべての変数と引数が元の値にリセットされることを意味します。

この唯一の例外は、Catch ブロックで自動的に生成される System.Exception 変数です。この変数はリセットされないため、常に Not Null の値になります。

この動作は、Web からファイルをダウンロードするワークフローを作成することで確認できます。 Try Catch アクティビティに、ファイルが正常にダウンロードされたかどうかを確認する条件を追加します。ファイルが正常にダウンロードされなかった場合、例外がキャッチされ、System.Exception 変数が Not Null に上書きされます。

ワークフローが終了しても、Catch ブロックで自動的に生成される System.Exception 変数は一度Not Nullが設定されると、Not Nullが維持されるという意味でしょうか?

フローチャート全体をTry Catchアクティビティで囲み、その中のファイルダウンロードシーケンスを別のTry Catchアクティビティで囲んでいる場合はどうでしょうか?
ファイルダウンロードシーケンスを囲むCatch Blockで呼び出したErrorHandler.xamlのSystem.Exception引数がNot Nullになった場合、
フローチャート全体を囲む外側のCatch Blockで呼び出したErrorHandler.xamlのSystem.Exception引数が連動してNot Nullになる可能性はありますか?

はい、ファイルのダウンロード シーケンスを囲む内側の Catch ブロックで呼び出される ErrorHandler.xaml の System.Exception 引数が Not Null になる場合、フローチャート全体を囲む外側の Catch ブロックで呼び出される ErrorHandler.xaml の System.Exception 引数が Not Null になる可能性があります。 これは、外側の Try Catch アクティビティが、ファイルのダウンロードが失敗した場合に生成される System.Exception など、内側の Try Catch アクティビティで発生する例外をキャッチするためです。 この動作を確認するには、Web からファイルをダウンロードするワークフローを作成します。ワークフロー全体を Try Catch アクティビティにラップします。ファイルのダウンロード シーケンスを別の Try Catch アクティビティでラップします。 内側の Catch ブロックに、System.Exception 変数の値を 2 番目の変数に割り当てるアクティビティを追加します。 外側の Catch ブロックに、2 番目の変数の値が Not Null かどうかをチェックするアクティビティを追加します。値が Null でない場合、ファイルのダウンロードは失敗し、外側の Catch ブロックが実行されます。 ワークフローを実行するときにファイルのダウンロードが失敗すると、外側の Catch ブロックが実行され、ErrorHandler.xaml の System.Exception 引数が Not Null に設定されます。

2 番目の変数に割り当てるアクティビティを追加します

ここで言っている2番目の変数とは何の2番目のことでしょうか?誤解を防ぐため、1番目の変数とは何のことかも併せてお知らせください。

2 番目の変数は、ファイルのダウンロードが失敗した場合に生成される System.Exception 変数の値を格納するために使用される変数です。最初の変数は、内部 Try Catch アクティビティの Catch ブロックで自動的に生成される System.Exception 変数です。

ワークフローの詳細な説明は次のとおりです。

最初の Try Catch アクティビティは、ワークフロー全体をラップします。
2 番目の Try Catch アクティビティは、ファイルのダウンロード シーケンスをラップします。
2 番目の Try Catch アクティビティの内部 Catch ブロックでは、System.Exception 変数の値が 2 番目の変数に割り当てられます。
最初の Try Catch アクティビティの外側の Catch ブロックで、2 番目の変数の値がチェックされます。値が Null でない場合、ファイルのダウンロードは失敗し、外側の Catch ブロックが実行されます。