はじめに
プラットフォームが50000以上のレコードを処理する必要があるビジネスシナリオでは、Apexのバッチが救助されます。 バッチApexは、複数のバッチまたはチャンクでのレコードの非同期処理を容易にし、開発者向けに実装するのは簡単です。
Apexバッチの実装
Apexバッチでデータベースが実装されます。バッチ可能なインターフェイス。 インターフェイスにはStart()、Execute()、およびFinish()メソッドがあり、バッチApexクラスに実装する必要があります。
- Startmethod:Startメソッドは、バッチapex
- Executeメソッドのexecuteメソッドで処理されるレコードの収集ポイントです:レコードの実際の処理はexecuteメソッドで行われます。
- 仕上げ方法: Finishメソッドは、電子メールの送信などのジョブ後の処理アクションを持つことができ、別のバッチクラスをチェーンするためにも使用できます。
バッチApexのスケジュール設定
方法1:OOTBスケジュールApex機能を使用する
ステップ:
- [設定]をクリックし、[クイック検索]ボックスでApexクラスを検索します。
- トップパネルのスケジュールApexボタンをクリックします。
3. スケジュールApexレコードページの情報を入力して保存します。 Apexクラスは、executebatch(batch)メソッドを実装するSchedulerクラスである必要があります。
Schedulerクラスのコードスニペット:
global class AccBatchScheduleClass implements Schedulable { global void execute(SchedulableContext ctx) { AccBatchApex batch = new AccBatchApex(); database.executebatch(batch); }}
方法2:Schedulable Apex経由でバッチクラスを呼び出す:
Schedulable apexを実装するApexクラスを作成する必要があります。 スケジュール可能なapexでは、システムを実装する必要があります。Schedule()バッチapexを実行キューにエンキューするメソッドです。 システム。Schedule()メソッドは、ジョブ名、バッチスケジュールのCron式、バッチクラス名の三つの引数を期待しています。
スケジュール可能なApexのサンプル:
Apiバージョン29が開始されたApexチェーンのバッチ
。0以降は、バッチクラスを別のバッチクラスに連鎖させることができます。 Apexバッチの連鎖ベースバッチクラスの実行が終了すると、連鎖バッチクラスの実行が開始されます。 最大で5つのバッチジョブのみを相互に連鎖させることができます。
Apexバッチの例
ユースケース:国がUSAで、請求状態情報がないすべての取引先の請求状態をCaliforniaとして設定します。
ソリューションデザイン: 組織には50K以上のレコードがあり、不足している請求状態情報をスキムする必要があるため、Apexバッチを書き込むことが最適なソリューションです。 また、トリガー、ワークフロー、プロセスビルダーなど。 これらのソリューションがビジネス要件を満たすために適合しないように、起動するにはDML操作が必要になります。
覚えておくべきこと
- 最大5つのバッチジョブを同時にキューに入れるか、アクティブにすることができます。
- 24時間あたりのapexバッチメソッド実行の最大数は、250,000、または組織内のユーザライセンス数に200を掛けた値のいずれか大きい方です。
- QueryLocatorオブジェクトでは、最大50万レコードを返すことができます。 5,000万件を超えるレコードが返された場合、バッチジョブは直ちに終了し、失敗とマークされます。
- batchクラスのstartmethodがQueryLocatorを返す場合、executeBatchのオプションのscopeパラメーターの最大値は2,000です。
- batchクラスのstartメソッドがiterableを返す場合、scopeパラメーター値には上限はありません。
- start、execute、およびfinishメソッドは、それぞれ最大100個のコールアウトを実装できます。 一括apexからコールアウトを有効にするためのAllowsCalloutsを実装します。
- futureとして宣言されたメソッドは、Apexバッチクラスから呼び出すことはできません。
- クラス内のすべてのメソッドは、globalまたはpublicとして定義する必要があります。
実装の最適化
- startmethodがサブクエリを介して関連レコードを含まないQueryLocatorオブジェクトを返すと、Apexバッチジョブが高速に実行されます。 QueryLocatorでリレーションシップサブクエリを回避すると、より高速でチャンク化された実装を使用してバッチジョブを実行できます。
- バッチジョブを高速に実行するには、Webサービスのコールアウト時間を最小限に抑え、バッチApexコードで使用されるクエリを調整します。
- 10,000AsyncApexJobrecordsごとに、Apexは内部使用のためにBatchApexWorker型のAsyncApexJobレコードを作成します。 すべてのAsyncApexJobレコードに対してクエリを実行する場合は、共有再計算のためにJobType
- を使用してbatchapexworkerタイプのレコードを除外することをお勧めします。 このプロセスにより、共有が正確かつ完全であることが保証されます。
- executeBatchメソッドの周りにテストメソッドstartTestとstopTestを使用して、テストを続行する前に完了していることを確認します。