System.Exception変数の値の遷移について

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

  1. WFの説明

添付画像のAのシーケンスでWebサイトからファイルダウンロードを実施し、添付画像のBでSystem.Exception変数の値を見て、Nullであれば左方向へ、IsNot Nullであれば右方向へ処理が遷移します。全体のフローチャートと添付画像のAのシーケンスはTry Catchアクティビティで囲んでいます。

  1. 質問内容

過去の経験から、Webサイトからファイルダウンロード時にネットワーク輻輳等のシステム例外が発生すれば、添付画像のBから右方向へ処理が遷移することが分かっています。そのためには、添付画像のBでSystem.Exception変数にNot Nullを設定しなければなりませんが、どこで、どのアクティビティがSystem.Exception変数にNot Nullを設定するのか、そのメカニズムがよく分かりません。分かる方、ご教示をお願い致します。

@gorby
こんにちは!お手伝いできること嬉しいです。

提供された情報に基づいて、Webサイトからのファイルダウンロード時にシステム例外を処理したいようですね。提供された画像に示されるように、ファイルダウンロードを実行するシーケンスAの中で “Try Catch” アクティビティを使い、シーケンスBで System.Exception 変数の値を確認し、変数が Null の場合は左に、Not Null の場合は右にフローを進めることが目的のようです。

System.Exception 変数を設定し、例外を適切に処理するためには、次の手順に従ってください。

  1. シーケンスA(“Try” ブロック)で:
  • Webサイトからのファイルダウンロードを担当するアクティビティを配置します。
  • ダウンロード中にエラーまたは例外が発生した場合は、System.Exception がスローされ、“Catch” ブロックによってキャッチされます。
  1. シーケンスB(“Catch” ブロック)で:
  • ファイルダウンロード中に例外が発生した場合に実行するアクティビティを配置します。
  • デフォルトで、System.Exception 変数は “Catch” ブロックに入る際に例外の詳細が格納されています。
  1. Null または Not Null のチェック:
  • “Catch” ブロックに入った後、システム例外変数が Null または Not Null であるかをシンプルな “If” 条件で確認できます。
  • 変数が Not Null の場合、ダウンロード中に例外が発生したことを意味し、必要な処理を実行したり、右に進んだりできます。

誤解があるようです。
シーケンスBはTry Catchアクティビティではなく、フロー条件分岐です。その前提で回答をお願いします。

@gorby
これを実現するために、シーケンス B で明示的に System.Exception 変数を Not Null に設定する必要はありません。System.Exception 変数は、シーケンス A(ファイルのダウンロード中)で例外が発生した場合に自動的に例外の詳細を保持します。

フローの動作は以下のようになります:

シーケンス A(ファイルのダウンロード):

  • Web サイトからファイルのダウンロードを行うアクティビティが含まれています。
  • ファイルのダウンロード中にシステム例外が発生した場合、フローチャート全体を囲む Try Catch アクティビティでそれがキャッチされます。

シーケンス B(条件分岐):

  • シーケンス A でシステム例外が発生した場合、フローはシーケンス B(Catch ブロック)に移動します。
  • シーケンス B では、“If” 条件を使用して System.Exception 変数が Not Null であるかどうかを確認し(つまり、例外が発生したかどうか)、それに基づいて適切なアクションを実行します。

シーケンス B では条件分岐を使用しているため、例外が発生した場合に異なる方法で例外を処理できます。System.Exception 変数が Not Null の場合、フローチャートの右側で処理を進めることができ、Null の場合は左側で続行できます。

この場合、System.Exception 変数を明示的に Not Null に設定する必要はありません。ファイルのダウンロード中に例外が発生した場合、自動的に例外の詳細が System.Exception 変数に格納されます。

Will you kindly elaborate on this?
ここをもう少し詳しく教えてください。例外の詳細をSystem.Exception 変数するのはワークフローではなく、UiPath Studio本体ですか?

@gorby
UiPathでは、Try Catchアクティビティはアクティビティの実行中に発生する例外を処理するために使用されます。これにより、例外をキャッチして適切に管理することができ、自動化がエラー発生時に急に停止するのを防ぐことができます。

以下は、Try Catchアクティビティの動作と例外を変数に保存する方法です:

Tryブロック:Try Catchアクティビティの内部には、実行したいアクティビティを配置します。このブロック内で例外が発生すると、Try Catchアクティビティによってキャプチャされます。

Catchブロック:Catchブロックは、Try Catchアクティビティによってキャッチされた例外を処理する場所です。Tryブロック内で例外が発生すると、ワークフローは対応するCatchブロックにジャンプしてそこに配置されたアクティビティを実行します。

System.Exception変数:Try Catchアクティビティは自動的にSystem.Exception変数(カスタム変数を選択することもできます)を作成します。この変数は、エラーが発生した際に例外の詳細を保持します。この変数はCatchブロック内で使用し、例外に関する情報(エラーメッセージ、スタックトレース、その他の詳細)にアクセスできます。

例:

textCopy code

Try
{
    // 例外が発生する可能性のあるアクティビティ
}
Catch (System.Exception ex)
{
    // 例外を処理するためのアクティビティ
    // 'ex' 変数を使用して例外の詳細にアクセスできます
    LogMessage("Exception Message: " + ex.Message)
    LogMessage("Exception Stack Trace: " + ex.StackTrace)
    // その他のエラー処理アクション
}

この例では、Tryブロック内で例外が発生すると、ワークフローはCatchブロックに移動し、'ex’変数に例外の詳細が保存されます。その後、この変数を使用してエラーメッセージをログに記録したり、適切なエラー処理アクションを実行したりすることができます。

@gorby
UiPathで例外を変数に保存するには、Assignアクティビティを使用してSystem.Exception型の変数に例外を割り当てます。以下にその方法を説明します:

変数を作成する:まず、例外を保存するための変数を作成する必要があります。Variablesパネルで、"+"アイコンをクリックして新しい変数を追加します。変数の型をSystem.Exceptionに設定し、意味のある名前を付けます(例: “ex”)。

Try Catchを使用する:例外が発生する可能性のあるアクティビティを、Try CatchアクティビティのTryブロック内に配置します。

例外をキャッチする:Try CatchアクティビティのCatchブロックで、Assignアクティビティを使用して、キャッチした例外を先に作成した変数に割り当てます。

以下に例を示します:

textCopy code

Try
{
    // 例外が発生する可能性のあるアクティビティ
}
Catch (System.Exception ex)
{
    // キャッチした例外を変数に割り当てる
    exVariable = ex
}

この例では、キャッチした例外(ex)が変数"exVariable"に割り当てられます。その後、この変数をワークフローの後で使用できます。たとえば、例外の詳細をログに記録したり、ユーザーにメッセージを表示したり、発生した特定の例外に基づいて他のアクションを実行したりすることができます。

分かりにくいですが、要は、フロー条件分岐Bを含むフローチャート全体を囲むTry Blockでネットワーク輻輳のシステム例外がCatchされたのでしょうか?

@gorby
ファイルをダウンロードする際に使用しているすべてのアクティビティを try catch ブロックの中に配置してください。catch ブロックでは、変数を設定してそのスコープを指定し、外部からもアクセスできるようにしてください。

Catch ブロックで設定するSystem.Exception変数(添付画像A)はimplicit variableであるため、変数パネルで定義できないことから、スコープを設定できないという認識です。
Catch ブロックで設定するSystem.Exception変数のスコープを指定し、外部からもアクセスできるようにする具体的な方法をご教示ください。

@gorby
最初に、i_exec_SystemExceptionの引数のタイプはoutである必要があります。
変数パネルで変数exceptionを確認し、そのスコープを設定してください。

>最初に、i_exec_SystemExceptionの引数のタイプはoutである必要があります。

i_exec_SystemExceptionの引数のタイプはoutではなく、inではないでしょうか?確認をお願いします。

>変数パネルで変数exceptionを確認し、そのスコープを設定してください。

再度の質問になりますが、変数exceptionはCatch Blockで生成されるimplicit variableになりますため、変数パネルに存在しません。implicit variableのスコープをどのように設定するか詳しく教えてください。

i_exec_SystemExceptionの引数はImplicit Variable(Parameter)のため、の引数のタイプはinではないでしょうか?確認をお願いします。