エラーハンドリングについて

エラーハンドリングについて質問したいです。

例えばフロー1からフロー2を呼び出す際に、フロー2でエラーが発生したとします。
やりたいことは、下記です。
フロー1で、フロー2のエラー発生時点の引数と、どのアクションでエラーが起きたかを取得したいです。(アクション名はログ出力でもOKです)

ですが、仕様を確認したところ両者を同時に満たす方法が浮かびませんでした。
理由
・トライキャッチを使っていないと、フロー1にエラーで返った時にOut引数は引き継がれない
・フロー2のどのアクションでエラーが発生したかをフロー1で受け取るには、フロー1のCatchでexception.Sourceで取得できるが、フロー1でトライキャッチを使用していたら取得できない

グローバル例外ハンドラーという方法もあるようですが、あまりおすすめできないと書いてありました。
何か両者を満たすよい方法がありましたら教えてください。

文章が途中で勝手に抜けてしまい、あまりいい日本語にはなっていないようです。。

やりたいことは、呼び出し先でエラーが発生した場合に、
エラー発生時点の引数の値と、エラー発生アクション名の両方を、呼び出し元で受け取りたいです。

こんにちは

いくつかアプローチ案が考えられますが、
たとえば

案1.Exception.Dataを使う。
必要な情報をException.Dataに押し込んで外のCatchでつかう。

案2.フロー2の内部は例外をTry-Catchで捕捉して、正常終了させる
フロー2の引数としてexception型のoutまたはin/out引数を用意しておいて、例外発生時は例外情報をそれに代入する。
フロー1で例外の引数の中身を確認し、中身になにか入っていればフロー2で例外が発生したと判断して処理を行う。

1 Like

ご提案ありがとうございます!

案1は予期せぬエラーに対応できません
案2はエラーが発生したアクティビティ名を取得できますでしょうか。
exception.sourceですと、「System.Activities」としか表記されません。

image

こんにちは

どのようなアクティビティでどのような式を入力したか判るように画面共有等いただけると良いかと思います。

例外発生のアクティビティの特定ですが以下の方法があります。ただしワークフローの呼び出し元での捕捉にしか使えませんので案2との併用は難しいかもしれません。

ありがとうございます!ちょうどそちらの投稿を拝見していたところでした。
ですがちょっと方法がわかりませんでした。。

そしていろいろ考えて、やはり下記のようにしようと思いました。
エラー時にMainに渡したいのはブラウザからとってきたエラーメッセージ1つでしたので、
Sub1.xamlはトライキャッチで囲まずに、エラーメッセージをThrow内で出力するようにしようと思います。

他に妙案ありましたらご教示いただけると助かります。
ありがとうございました。

こんにちは

Messageに必要な情報をいれてしますのも一つの手ですが、呼び出し先で自身でthrowするなら
案1が使えます。以下サンプルです。

Sample20221023-1.zip (3.9 KB)

1 Like

ご丁寧にありがとうございます!
確認させていただきます。

ありがとうございました。拝見しました!
奥が深いのですね。
大変勉強になりました。ありがとうございました。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.