昨年10月に行われた、OutSystemsのイベントNext Step 2019ですが、セッションのビデオが公開されています。
ビデオは残念ながら英語のみで字幕もないですが、興味のあるセッションがあれば、スライドだけでも見ておくと参考になります。
その中からバッチ処理関係のセッションを紹介します。
Using Processes and Timers for Long-Running Asynchronous Tasks
長時間実行されるバッチ処理を、OutSystemsで実装するパターンを列挙する動画。短い時間にいくつものパターンが詰め込まれています。
長時間実行される「非同期」のトランザクションの実装パターン
- Status Polling:呼び出し側で、長時間実行される処理の状態を確認する。画面からバッチ処理をキックする際によく見るパターンですね
- Callbacks:長時間実行される処理が終了する直前に、終了することを通知する。通知先は、RESTやSOAPが挙げられていましたが、EntityにしてProcessキックという方法もあります
長時間実行される「同期」のトランザクションの実装パターン
- Timeoutの調節:作成したTimerには「Timeout in Minutes」というプロパティがあり、タイムアウトまでの時間を分単位で指定できます。これを処理内容に合わせて調整しましょうということです。デフォルト値は20分です
- バッチ呼び出しを非同期サービスに切り出す:処理はTimerで実装。Timerにはタイムアウトがあるため、N件ずつの処理にして、N件分の処理が終わったあとにまだ処理対象が残っていたら同じTimerを再起動する
- 長時間実行するバッチは同期で終了を待たない:これがおすすめだそうです。私もこれがいいと思います……
Launching a BPT Process on Entity Update
ProcessはEntityのレコード追加(Create)を起点として処理を開始できるのですが、更新(Update)は起点にできません。
これを回避する実装パターンを紹介するセッションです。
- 1インスタンスだけ常に実行中になるProcessを作成する(Close Onが空のWaitをメインフローにおいておく、eSpace Publish時に起動するTimerでこのProcessを開始する)
- ProcessにConditional Startを配置する。このConditional Startは、対象Entityの更新時に開始するように設定
- Conditional Startのフローに、必要な処理を書く
Processのインスタンスが増えすぎないように、Timer処理戦闘中にインスタンスが他にないかをチェックすること。
What Is Light BPT and How Can You Use it for Parallel Processing
特定条件を満たしたProcessは負荷が軽量なLight BPTにできます。
その、Light BPTの紹介セッション。
Light BPTにする条件は、
- Service Centerの該当eSpaceページを開き、Operationタブで「Light process execution」にチェックを入れておく
- Process内は、1つのAutomatic Activityだけで構成されること
- ProcessをEntityのCreateイベントを起点に開始すること
- 前提として、該当EntityのMore… > Advancedタブ > Expose Process Eventsをチェック
デモアプリケーションがForgeにあります。