[Salesforce]Apexジョブの開始から終了まで変数を引き継ぐ

最近フローが便利になってきておりスケジュール実行もできるようになったため、Apexの出番は減ってきていますがフローのみでは対応できないこともあるのでメモ。

Apexジョブは以下の順で実行される、定期的なバッチ処理や大量データを処理する際に際にガバナ制限回避に利用するApexです。

  1. start:対象データを取得

  2. execute:1で取得したデータを、スケジュールクラスで指定した件数で分割して全データ処理するまで分割して実行

  3. finish:終了処理(何もしなくても良い)

ケースによっては、finish処理で処理件数やエラー件数を取得してログ用のオブジェクトに書き込みたい!というケースもあります。
通常はApexジョブクラスで変数を用意してexecute内でカウントしてもfinishメソッドで参照した際には値が保持されていません。

変数の値を保持したい場合は、Apexクラスの宣言にDatabase.Statefulを追加することで変数の値を保持することが可能となります。

execute内でも変数の値を参照できるようです。
ジョブなので、夜間処理であれば問題ないかもしれませんが、もしかしたら処理が並列にならずに、通常よりも時間がかかるなどのデメリットがあるかも?(詳細は調べていないので不明)

詳細は以下の記事をご覧ください。



この記事が気に入ったらサポートをしてみませんか?