我正在调用批处理类实例,在完成批处理后,我正在调用另外两个批处理类实例。第一个批次类的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
将被调用两次,但它只被调用一次。循环运行了两次(我分析了调试日志)。为什么只召唤一次?
答案 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类,您可以将一个批处理作业链接到刚刚完成的作业的末尾。完成后,您无法分支并启动多个批处理作业。