LoginSignup
0
0

[ODC]Exception Handler下のFlowでExceptionが発生した時の動作

Posted at

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

以下の通り、

  1. メインのFlowでTestExceptionをRaiseする
  2. AllExceptionsのException Hanlderへ遷移
  3. Settingに用意した、Boolean型のLoopStopperを見て、TrueならEndへ(ログから流れを確認できるようにLogMessageも配置)
  4. LoopStopper=Falseなら、Sleepした上で再びTestExceptionをRaiseする
    image.png

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してみる。
image.png

確認結果

処理は

  1. メインフローでTestExceptionをRaise
  2. 同じActionのTestExceptionに対するException Handlerでハンドル
  3. その下のFlowで再びTestExceptionをRaise
  4. 同じ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してみた。
image.png

確認結果

Global Exception Handlerを設定せず、かつ例外が発生したときと同じ画面になる。
つまりGEHの外側まで例外が届いてしまっている。
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0