Exception Handler下のFlowで再びExceptionをRaiseしたい時がある。
この時の動作を確認する。
OutSystemsの無限ループ問題でも検討したように、OutSystemsで無限ループを発生させると厄介なので、「無限ループが発生しないこと」を確認したい。
(例えば、AllExceptionsのHandler下で再びExceptionをRaiseしたときに、同じException Handlerに再び捕まらないか)
環境情報
ODC Studio(Version 1.4.7)
確認結果
今回の検証で以下のことが確認できた
- Exception Handler下のFlowで発生した例外は同じException Handlerではハンドルされないようだ
- 同じAction内のException Handlerでハンドルしたあと、更にExceptionをRaiseした場合、Action内にそのExceptionをハンドルしうる別のException Handlerがあってもそこではハンドルされないようだ
- (参考)Global Exception HandlerのAllExceptions下のFlowでさらに例外を発生させると、GEHを設定せずに例外を発生させたときと同じ画面になる(=GEHの外側まで例外が届いてしまっている)
(Action内の)AllExceptions Handlerの下でExceptionをRaiseした場合
動作確認用Action Flow
以下の通り、
- メインのFlowでTestExceptionをRaiseする
- AllExceptionsのException Hanlderへ遷移
- Settingに用意した、Boolean型のLoopStopperを見て、TrueならEndへ(ログから流れを確認できるようにLogMessageも配置)
- LoopStopper=Falseなら、Sleepした上で再びTestExceptionをRaiseする
LoopStopperを持たせているのは、仮説が間違っていて無限ループになったら止めるため。
(AllExceptions下で再びRaiseしたTestExceptionをAllExceptionsでHandleしてしまうようなら無限ループになる。幸い以下の確認結果の通りそうはならなかったが)
Sleepで5秒止めているのも無限ループ対策。無限ループになっていたら、LoopStopperをTrueにするまでの時間を稼ぐ。
確認結果
Action内のAllExceptionsのException Handlerではハンドルされず、上位(今回はGlobal Exception Handler)でハンドルされた。
つまり、Exception Handler下のFlowで発生した例外は同じException Handlerではハンドルされないようだ。
Action中の具象Exception
動作確認用Action Flow
上のバリエーションで、具象例外に対するException Handlerを追加し、その下のFlowでも同様にExceptionをRaiseしてみる。
確認結果
処理は
- メインフローでTestExceptionをRaise
- 同じActionのTestExceptionに対するException Handlerでハンドル
- その下のFlowで再びTestExceptionをRaise
- 同じActionのAllExceptionsではハンドルされず、上位(GEH)AllExceptionsに対するException Handlerでハンドルされた
つまり、同じAction内のException Handlerでハンドルしたあと、更にExceptionをRaiseした場合、Action内にそのExceptionをハンドルしうる別のException Handlerがあってもそこではハンドルされないようだ。
Global Exception Handlerでハンドル後、再びExceptionをRaiseしてみる
動作確認用Action Flow
Global Exception HandlerのAllExceptionsに対するException Handler部分だけ見ると以下の通り。
AllExceptions下で具象例外をRaiseしてみた。
確認結果
Global Exception Handlerを設定せず、かつ例外が発生したときと同じ画面になる。
つまりGEHの外側まで例外が届いてしまっている。