批处理类Apex中的执行混淆

时间:2013-03-24 05:07:00

标签: salesforce apex-code batch-processing soql

我正在调用批处理类实例,在完成批处理后,我正在调用另外两个批处理类实例。第一个批次类的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);
    }

}

我面临的问题是我希望批次类BatchPublicCampaignsToGoogle将被调用两次,但它只被调用一次。循环运行了两次(我分析了调试日志)。为什么只召唤一次?

1 个答案:

答案 0 :(得分:3)

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

  

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

     

您现在可以开始批处理了   从另一个批处理作业中调用Database.executeBatch的作业   批次类的finish方法。这允许您链接批次   工作并创造一系列就业机会。请注意,州长的限制   批量工作仍然适用。此更改适用于使用保存的批次Apex   Salesforce.com API版本26.0及更高版本。以前,随着Apex的保存   使用Salesforce.com API版本25.0及更早版本,您无法调用   来自任何批次Apex方法的Database.executeBatch。版本   used是启动另一个的运行批处理类的版本   批量工作。如果正在运行的批处理类中的finish方法调用了   帮助程序类中的方法,用于启动批处理作业Salesforce.com   辅助类的API版本无关紧要。 Source

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