[Salesforce]Apexジョブの開始から終了まで変数を引き継ぐ
最近フローが便利になってきておりスケジュール実行もできるようになったため、Apexの出番は減ってきていますがフローのみでは対応できないこともあるのでメモ。
Apexジョブは以下の順で実行される、定期的なバッチ処理や大量データを処理する際に際にガバナ制限回避に利用するApexです。
start:対象データを取得
execute:1で取得したデータを、スケジュールクラスで指定した件数で分割して全データ処理するまで分割して実行
finish:終了処理(何もしなくても良い)
ケースによっては、finish処理で処理件数やエラー件数を取得してログ用のオブジェクトに書き込みたい!というケースもあります。
通常はApexジョブクラスで変数を用意してexecute内でカウントしてもfinishメソッドで参照した際には値が保持されていません。
変数の値を保持したい場合は、Apexクラスの宣言にDatabase.Statefulを追加することで変数の値を保持することが可能となります。
execute内でも変数の値を参照できるようです。
ジョブなので、夜間処理であれば問題ないかもしれませんが、もしかしたら処理が並列にならずに、通常よりも時間がかかるなどのデメリットがあるかも?(詳細は調べていないので不明)
詳細は以下の記事をご覧ください。
この記事が気に入ったらサポートをしてみませんか?