【Salesforce】バッチ処理のスケジュールクラス

【Salesforce】バッチ処理のスケジュールクラス

Salesforceのバッチ処理を、スケジューリングしたい場合がよくあると思います。

バッチ処理について記述したので、ついでにメモです。

バッチ処理のスケジューリングを行うためには、「schedulable」を継承したクラスが必要です。

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_scheduler.htm

動作のイメージとしては、スケジュールされたクラスからバッチ処理を呼び出す形でしょうか。

global class BatchScheduler implements Schedulable {

    /**
     * 実行する処理
     */
    global void execute(SchedulableContext SC) {
      
        // バッチクラスを作成する
        TestBatch batch = new TestBatch();
        // バッチ処理を設定する
        Database.executeBatch(batch, 5); 
    }
}

ちなみに、implementsを使用しているのでこのような書き方もできるようです。

global class TestBatch implements Schedulable, Database.Batchable<sObject>{

    /**
     * バッチ呼び出し処理
     */
    global void execute(SchedulableContext SC) {
      
        // バッチクラスを作成する
        TestBatch batch = new TestBatch();
        // バッチ処理を設定する
        Database.executeBatch(batch, 5); 
    }

    /**
     * 開始処理
     */
    global Database.QueryLocator start(Database.BatchableContext BC){
        return Database.getQueryLocator('select Id from Account');
    }

    /**
     * 実行処理
     */
    global void execute(Database.BatchableContext BC, List<Account> accountList){
    }

    /**
     * 終了処理
     */
    global void finish(Database.BatchableContext BC){
    }
}

週ごとや月ごとのスケジュールであれば、

[設定]>[開発]>[Apexクラス]のクラス一覧の上にある[Apexをスケジュール]で設定することができます。

細かく設定したい場合は、開発者コンソール等でスケジュールする必要があります。

No comments.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です