Catch Blockの設定内容についてご相談

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

1.WFの説明
Edgeに自動ログイン後、指定フォルダに配置されたファイルを1つずつWebにアップロードするワークフローをデバッグ中です。
1件分の業務処理を行うシーケンス全体をTry Catchアクティビティで囲み、Try BlockでThrowしたアプリ例外をCatch BlockのErrorHandler.xamlで処理しています。

2.質問
添付画像AにはException、BusinessRuleException, FileNotFoundExceptionなどthrowアクティビティに対応して様々な例外の名前が指定できるようですが、
System.Exceptionの例外の変数名と型と値がたまたま同じため、
添付画像B,C,Dには必ず同じ"Exception"が指定されるという認識で正しいでしょうか?

'Exception ’ will be an implicit variable if your use try catch. So there should not be an issue.

Regards,

こんにちは

BはUiPathではどのException型またはそのサブクラスを指定してもデフォルト値がexceptionとなっています。
Cは呼び出し先のxamlの引数の定義で決まりますので、呼び出し元の状況は関係ありません
Dは自身が呼び出し先に渡したい変数ですので、この場合はexceptionが最有力候補になりますが、ロジック次第になります。(必ずしもexceptionを渡す必要はありません)

そのシステム例外はすべてを処理します。スムーズなワークフローのために、catch ブロックで個別の例外を与える方がよいでしょう。
ビジネスルールの例外をキャッチする

少し突っ込ませてください。
Dは自身が呼び出し先に渡したい変数の値ですよね?System.Exceptionの変数の値は初期値はNothingと思いますが、どのような契機で、exceptionに変わるのでしょうか?

Sorry,But I could not understand you.

少々質問の意味が分かりにくいのですが、

System.Exceptionの変数の値は初期値はNothingと思いますが

単に変数パネルで変数を定義しただけの場合、その変数の中身はNothingになります。

どのような契機で、exceptionに変わるのでしょうか?

こちらどのような意味でしょうか?

それでは、順を追って質問していきます。
添付画像をご覧ください。Main.xamlからErrorHandler.xamlに渡す引数です。
添付画像の黒丸はMain.xamlで使用した変数System.Exceptionの値と思われますが、
Main.xamlで明示的に変数System.Exceptionの値としてExceptionを設定した箇所はありません。
それにも関わらず、どうしてここで"Exception"を設定するのでしょうか?
それとも、ここで設定するのは変数の値ではなく、アプリ例外を表す変数名Exceptionでしょうか?

もし大文字、小文字を厳密に記載するなら、引数として渡すのは、exceptionです。これはCatchで自動的に定義、生成された変数で、中身も自動的にセットされています。

なおSystem.Exceptionは型ですので、その点は留意ください

exception以外でどのようなものが設定できますか?ご参考までにご教示ください。

Bのexceptionは、例外クラスの派生元のSystem.Exceptionと同じものでしょうか?

例えば自身で定義したSystem.Exception型の変数などを設定できます。

Bのexceptionは、例外クラスの参照元のSystem.Exceptionと同じものでしょうか?

参照元が何を指しているか不明ですが、Aで定義した型になります。

Aで定義した型とは、Catch Blockを呼び出した側(つまり例外をthrowしたMain.xaml側)で定義した例外変数の型ということでしょうか?

下図参照ください。赤矢印の部分が変数名です。
青矢印の部分が型名です。(より厳密にはSystem.Exceptionです)

訂正します。
誤:例外クラスの参照元
正:例外クラスの派生元

訂正いただいた後でも意味が分かりづらいですが、

Bのexceptionというのは、変数名です。
その型はAで定義した型になります。System.Exceptionが選択されていればSystem.Exceptionですし、例えばSystem.ArgumentExceptionが選択されていれば、System.ArgumentExceptionです。

その変数の値(インスタンス)は、例えば型がSystem.Exceptionであれば、System.ExceptionあるいはSystem.Exceptionを継承したクラスのインスタンスを保持できます。

になります

1 Like