0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[OutSystems]Timerを停止できるように作る

Posted at

OutSystemsでバッチ処理を作るのに使うTimerは、実は外部から強制的に止める手段が、(アプリレベルでは)無かったりする。

そこで、Timerでループを作るときは外部からTimerを停止できるようにロジックを組んでおくとよいかもしれない。

Timerを止めたくなるとき

たとえば、

  • 開発中のTimerでうっかり無限ループを仕込んでしまった
  • 長時間かかるTimerが走り始めたが、データの不備に気付いた
  • 本番運用中のTimerがデータの急増等でTimeoutを超える時間動作した(Timeoutになるとエラーになるが、一定時間後リトライが走ってしまう)
  • パフォーマンスや調査の都合上、今動いているTimerを一時止めたい

Service Centerには実行中のTimerを止めるUIがない

各環境でTimerを管理するUIは、Service Center > 各モジュールページ > Timersタブだが、実行中のTimerを停止することはできない。

実装案:Site Property (Boolean型)を判定し、Timerの実行を中断できるようにする

Boolean型のSite Property (Entityでもよい)としてフラグを用意しておく

image.png

Timer Actionのループでフラグをチェックして分岐させる

ループを持つTimer Actionは、ループの先頭でフラグの値をチェックし、Trueであれば直ちに処理を中止(End要素に分岐)する(下の赤枠部分)。
image.png

If要素の設定は以下のように、フラグのSite Propertyの値をセット。
image.png

Timerを停止したいときは、フラグをオンにする

操作はService Centerで行える(モジュールページ > Site Propertiesタブから)。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?