LoginSignup
1
1

More than 1 year has passed since last update.

[OutSystems]Timer・BPTにおける未処理Exceptionの扱い

Last updated at Posted at 2022-09-17

非同期で処理を実行するTimer・BPT内でExceptionを発生させ、Handleしないまま終わった場合、どうなるかを検証してみる。

環境

Personal Environment(Version 11.17.0 (Build 36291))
Service Studio(Version 11.53.16)

まとめ

Timer・BPTでExceptionが発生し、Handleされないまま終わると、

  • Timer: 自動でリトライされる(環境ごとに定められたリトライ回数の上限まで)
  • BPT
    • Automatic Activity: User ExceptionをRaiseした場合とTimeoutしたらProcessのStatusがActive with Errors(Automatic ActivityはStatus=Error)、Automatic Activity Change ExceptionをRaiseした場合はActive(Automatic ActivityはStatus=Executing)のままとなる
    • Wait: User/Automatic Activity Change ExceptionをRaiseした場合、WaitはWaitingのままでProcessはActive
    • Human Activity: User/Automatic Activity Change ExceptionをRaiseした場合、Human ActivityはOpenのままでProcessはActive
要素 Exception 要素のStatus Process自体のStatus
Automatic Activity User Exception Error Active with Errors
Automatic Activity Abort Activity Change Exception Executing Active
Automatic Activity (Timeoutによる) Error Active with Errors
Wait User Exception Waiting Active
Wait Abort Activity Change Exception Waiting Active
Human Activity User Exception Open Active
Human Activity Abort Activity Change Exception Open Active

Timerは同じ条件でリトライしたところで、同じ場所でExceptionになるだけなので、基本的にはAll Exceptionsで適切に処理したほうが良さそう。ただし、Timeoutの場合はHandleできないので、ベストプラクティスに従って、Timeoutしないように実装する必要がある。

Automatic Activity Change Exceptionは、ActivityのStatusを変えずに終わらせたいときに使う。このとき、Errorログも出力されない

サンプルモジュール

Forgeコンポーネント: HousesoftSampleBPTのV1.0.1。

モジュール > ExceptionTestFlow > ExceptionTestScreen Screen

Timer

ロジック中でExceptionをRaiseするTimer

Timerに紐づくAction内でUser ExceptionをRaiseし、適切なException Handlerを置かなかった場合、一定時間後にリトライされる。

TimerのActionの実装(User ExceptionをRaiseするだけ)
image.png

リトライ回数の上限は、Retrying after an execution errorにある通り、Service Centerで環境単位に設定する(ドキュメントは日本語版もあるが、この記事を書いている時点で該当部分が翻訳されていなかったために英語版をリンク)。

以下のTimerログの通り、リトライ回数の上限回実行し、それでもExceptionで終わると、Next Runが本来の次回スケジュールになる(下の例では、Schedule未設定のTimerであるためdeactivated)。最後のログのError Messageを確認すると、「Timer ExceptionRaiseTimer2 reached maximum number of retries (3) [Calculating next run]」となっている。
image.png

必ずTimeoutするTimer

ForgeにあるSleepを使って、TimerのTimeoutプロパティを確実に上回る時間Sleepすることで、TimerのAction中でTimeoutさせてみる。

2分Sleepさせる設定
image.png

TimerのTimeoutプロパティは1分にしておく
image.png

この状態だと、Timerの実行は確実にTimeoutにかかり、エラーとなる。
エラー発生時のログはリトライ回数の上限 * 2 + 1個出るようだ。最後の+1はUser ExceptionをRaiseした場合と同じく、リトライ回数の上限に達したことを示すメッセージ。
image.png

BPT

Automatic ActivityでExceptionを発生させる

以下のように、必ずExceptionをRaiseするAutomatic Activtityを実装して、動作を確認する。
image.png

User ExceptionをRaiseした場合

ActivityのStatusがError、Process InstanceのStatusがActive with Errorsになった。
image.png

image.png

Abort Activity Change ExceptionをRaiseした場合

ActivityのStatusがExecuting、Process InstanceのStatusがActiveになった。
(Activityの詳細を見るとNext Runが設定されているのでリトライされている)
image.png

image.png

WaitのOn Close Callback

BPTのWait(一定のタイミングやイベントまでProcessの実行を停止する)は終了時にコールバックを指定できる(On Close)ので、そこでExceptionをRaiseしてみた。
image.png
(常にFalseになるIfをおき、FalseのときはExceptionをRaiseする実装)

User ExceptionをRaiseした場合

WaitのStatusがWaiting、Process InstanceのStatusがActiveになった。
(Activityの詳細を見るとNext Runが設定されているのでもう一度Waitが開始している)
image.png

image.png

Abort Activity Change ExceptionをRaiseした場合

WaitのStatusがWaiting、Process InstanceのStatusがActiveになった。
(Activityの詳細を見るとNext Runが設定されているのでもう一度Waitが開始している)
image.png

image.png

どうも、Abort Activity Change ExceptionをRaiseしたときError Logに記録されないようだ。

Human ActivityのOn Close Callback

Human Activity(人にタスクを割り当てる)も終了時にコールバックがある。On CloseのコールバックでExceptionをRaiseして結果を確認してみる。

User ExceptionをRaiseした場合

Human ActivityのStatusがOpen、Process InstanceのStatusがActiveになった。
image.png

image.png

Abort Activity Change ExceptionをRaiseした場合

Human ActivityのStatusがOpen、Process InstanceのStatusがActiveになった。
image.png

image.png

Automatic ActivityをTimeoutさせる

Automatic Activityには内部的なTimeout(たしか5分)があるので、6分間Sleepさせる処理を書いてTimeoutさせ、動作を確認する。

ActivityのStatusがError、Process InstanceのStatusがActive with Errorsになった。
image.png

image.png

1
1
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
1
1