【问题标题】:Execution Confusion in Batch class Apex批处理类 Apex 中的执行混淆
【发布时间】:2013-03-24 05:06:59
【问题描述】:

我正在调用一个批处理类实例,在完成批处理后,我正在调用另外两个批处理类实例。第一个批处理类的 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 将被调用两次,但它只被调用一次。循环运行了两次(我分析了调试日志)。为什么只调用一次?

【问题讨论】:

    标签: salesforce apex-code batch-processing soql


    【解决方案1】:

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

    从另一个批处理作业开始一个批处理作业

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      相关资源
      最近更新 更多