はじめに
本記事ではASTERIA Warpにおけるフローのデバッグ等で使用される、以下の2つのコンポーネントについて、サンプルフローを交えて解説します。
- Exception:意図的にエラーを発生させるコンポーネント
- ExceptionReturn:エラー処理フローから呼び出し元のフローに復帰するコンポーネント
両方とも「コントロール」タブの中に存在し、下図のようにExceptionは赤、ExceptionReturnは緑に上向きの矢印のアイコンです。

Exceptionについて
フロー内で意図的にエラーを発生させることができ、フローに汎用エラー処理が設定されている場合には、そちらへ遷移します。
Exceptionのプロパティ設定
Exceptionのプロパティ設定項目は次の通りです。
- エラーメッセージ:このExceptionが動作した際のエラーメッセージを設定します。
- エラーコード:エラーメッセージと同様にこのExceptionが動作した際のエラーコードを設定します。
今回のフローで使用するExceptionのプロパティは下図のように設定しています。

ExceptionReturnについて
エラー処理フローから呼び出し元のフローに復帰します。
ExceptionReturnのプロパティ設定
ExceptionReturnのプロパティ設定項目は次の通りです。
- トランザクション:トランザクションが有効な場合、コミットかロールバックかを選択できます。トランザクションが無効かプロパティのエラー処理後の動作が「次のコンポーネント」の場合はこの設定は無視されます。
- 戻り値:呼び出し元に返す値を設定します。
- 出力形態:ループで複数回入力される場合の出力形態(ストリームのレコードをまとめる・最後のストリームのみ出力・コンテナとして出力)を選択します。
- エラー処理後の動作:呼び出し元フローに復帰後、次のコンポーネントから再開するか、呼び出し元フローに戻って終了するかを選べます。
今回のフローで使用するExceptionReturnのプロパティは下図のように設定しています。呼び出し元のフローに戻ってフローを再開する想定になっています。今回のフローはループする部分は無く、エラー処理後の動作が次のコンポーネントになっているので、トランザクションと出力形態は使用されないため、デフォルトの値をそのまま使用しています。

今回使用するフロー
ExceptionとExceptionReturnの動作を確認するため、下図にある3つのフローを作成しました。
- Exception_ExceptionReturn_SampleFlow:呼び出し元のメインフロー。汎用エラー処理を設定している。
- Hanyou_ErrorShori_Flow:汎用エラー処理用のフロー
- FileNotFound_ErrorShori_Flow:FileGet の「ファイルが存在しない」エラー専用の処理フロー。
フローの実行時にフロー変数「Bunki」に0から3の値を入力することで動作パターンを分岐させることができます。



今回使用するフローの解説
フロー変数「Bunki」に入れた値が0、1、2、3の場合をそれぞれ解説します。実行時にフロー変数を0から3のいずれかにすることで、フローの流れが異なります。
フロー変数「Bunki」が0の場合(正常系)
呼び出し元のフロー(Exception_ExceptionReturn_SampleFlow)の最初の分岐(条件式が$flow.Bunki = 0のBranchStart)で右側に進みます。その後のマッパーで正常系であることを示す文字列「正常系です」をストリームに流してフローは終了します。マッパーは下図のようになっています。また、これ以降もマッパーのconstでストリームにメッセージを流すことがありますが、マッパーの内部はconstの文字列が異なるだけで構成は同じです。

---------------------
フロー変数「Bunki」が1の場合(Exceptionが動作する)
呼び出し元のフロー(Exception_ExceptionReturn_SampleFlow)の2番目の分岐(条件式が$flow.Bunki = 1のBranchStart)で右側に進みます。分岐の後にすぐExceptionが存在するので、ここで意図的にエラーが発生します。呼び出し元のフローには汎用エラー処理として「Hanyou_ErrorShori_Flow」が設定されているので、このフローに遷移します。
汎用エラー処理フロー(Hanyou_ErrorShori_Flow)ではマッパーのconstを使って、ストリームに汎用エラー処理フローに入ったことを示す文字列「汎用エラー処理フローに入って、そこで終了しました」と文字列を流した後にフローを終了します。マッパーの構成はメッセージが異なるだけで正常系と同じです。
---------------------
フロー変数「Bunki」が2の場合(FileGetの「ファイルが存在しない」場合専用のエラー処理フローに入って、そこで終了する)
この場合は、呼び出し元のフロー(Exception_ExceptionReturn_SampleFlow)では2つの分岐(BranchStart)は両方とも下に進みます。次のFileGetでは存在しないファイル(Sonzaishinai_File.txt)を取得しようとさせることで、意図的にエラーを起こします。プロパティ設定は下図の通りに設定しているため、エラー処理の「ファイルが存在しない」に設定されているFileGetでファイルが取得できなかった際の専用エラー処理フロー(FileNotFound_ErrorShori_Flow)に遷移します。

FileGetでファイルが取得できなかった際の専用エラー処理フロー(FileNotFound_ErrorShori_Flow)に遷移したら、最初の分岐($flow.Bunki = 2のBranchStart)で右側に進みます。次のマッパーでconstを使用して専用のエラー処理フローに入ってそこで終了したことを示す文字列「FileGetで読み込むファイルが見つからない場合のエラー処理フローに入って、そこで終了しました」をストリームに流した後にフローを終了します。マッパーの構成はメッセージが異なるだけで正常系と同じです。
---------------------
フロー変数「Bunki」が3の場合(ExceptionReturnが動作する)
※フロー変数「Bunki」の値が3以上でもこちらに分岐します
FileGetでファイルが取得できなかった際の専用エラー処理フロー(FileNotFound_ErrorShori_Flow)に入るまでの動作はフロー変数「Bunki」が2の場合と同じです。
そこから次の分岐(条件式が$flow.Bunki = 2のBranchStart)で下に進みます。フローがExceptionReturnに入るのでプロパティの設定「エラー処理時の動作」に「次のコンポーネント」を設定しているため、呼び出し元のフローに復帰してエラーが起きた次のコンポーネントからフローを再開します。
下図はExceptionReturnによって専用エラー処理フロー(FileNotFound_ErrorShori_Flow)から呼び出し元のフロー(Exception_ExceptionReturn_SampleFlow)に復帰する動作をデバッグ実行で確認した際の画像です。エラーが発生したFileGetの次のコンポーネントであるマッパーが青い破線で囲まれているので、ここからフローが再開されることが確認できます。また、デバッグ実行のウィンドウからフローの現在地がExceptionReturnであることとプロパティが自分で設定した値になっていることを確認できます。
このマッパーでconstを使用して文字列「エラー処理フローから呼び出し元フローに復帰しました」をストリームに流した後にフローを終了します。マッパーの構成はメッセージが異なるだけで正常系と同じです。
実行結果
実行時にフロー変数「Bunki」に入れた値が0、1、2、3の場合それぞれことなるメッセージを返すことが確認できました。



