2

バッチ クラス インスタンスを呼び出しており、バッチの完了後、別の 2 つのバッチ クラス インスタンスを呼び出しています。最初のバッチ クラスの finish() メソッドは次のとおりです。

public void finish(Database.BatchableContext BC)
{
    List<Event__c> events = [SELECT Id FROM Event__c];
    delete events;

    System.debug('Executing finish');
    for (CalendarSettings__c c: [SELECT Id, Name, CalendarId__c,
                                       CalendarQuery__c, FieldToDisplay__c
                                FROM CalendarSettings__c])
    {
        System.debug('Calendar Id is' + c.CalendarId__c);
        BatchPublicCampaignsToGoogle bjob = new BatchPublicCampaignsToGoogle(
                c.CalendarQuery__c, c.CalendarId__c, c.FieldToDisplay__c);
        Database.executeBatch(bjob,9);
    }

}

私が直面している問題は、Batch クラスBatchPublicCampaignsToGoogleが 2 回呼び出されることを期待していますが、1 回しか呼び出されないことです。ループは 2 回実行されています (デバッグ ログを分析しました)。なぜ一度だけ呼び出されるのですか?

4

1 に答える 1

3

チェーン バッチ ジョブは、Winter 13 の機能として導入されました。リリース ノートから:

別のバッチ ジョブからのバッチ ジョブの開始

バッチ クラスDatabase.executeBatchのメソッドから 呼び出して、別のバッチ ジョブからバッチ ジョブを開始できるようになりました。finishこれにより、バッチ ジョブをリンクし、一連のジョブを作成できます。バッチ ジョブのガバナ制限は引き続き適用されることに注意してください。この変更は、Salesforce.com API バージョン 26.0 以降を使用して保存されたバッチ Apex に適用されます。Database.executeBatch以前は、Salesforce.com API バージョン 25.0 以前を使用して保存された Apex では、バッチ Apex メソッド内から呼び出すことができませんでし た。使用されるバージョンは、別のバッチ ジョブを開始する実行中のバッチ クラスのバージョンです。実行中のバッチ クラスのfinishメソッドがヘルパー クラスのメソッドを呼び出してバッチ ジョブを開始する場合、ヘルパー クラスの Salesforce.com API バージョンは関係ありません。ソース

そのため、API バージョン 26.0 以降を使用する Apex クラスでは、 1 つのバッチジョブを、終了したばかりのバッチジョブの最後に連鎖させることができます。1 つのバッチ ジョブが終了したときに、複数のバッチ ジョブを分岐して開始することはできません。

于 2013-03-25T02:26:42.933 に答える