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将被调用两次,但它只被调用一次。循环运行了两次(我分析了调试日志)。为什么只调用一次?

4

1 回答 1

3

Chaining Batch Jobs 是 Winter 13 中引入的一项功能。来自发行说明:

从另一个批处理作业启动批处理作业

您现在可以通过调用批处理类Database.executeBatch的 方法从另一个批处理作业启动批处理作业。finish这允许您链接批处理作业并创建作业链。请注意,批处理作业的调控器限制仍然适用。此更改适用于使用 Salesforce.com API 版本 26.0 和更高版本保存的批量 Apex。以前,使用 Salesforce.com API 版本 25.0 和更早版本保存 Apex,您无法 Database.executeBatch从任何批处理 Apex 方法中调用。使用的版本是启动另一个批处理作业的正在运行的批处理类的版本。如果finish正在运行的批处理类中的方法调用帮助类中的方法来启动批处理作业,则帮助类的 Salesforce.com API 版本无关紧要。资源

因此,对于使用 API 版本 26.0 及更高版本的 Apex 类,您可以将一个批处理作业链接到刚刚完成的一个批处理作业的末尾。当一个完成时,您不能分支并启动多个批处理作业。

于 2013-03-25T02:26:42.933 回答