2013-03-24 35 views
2

我打電話給一個批處理類實例,完成批處理後,我打電話給另外兩個批處理類實例。對於第一批類面漆()方法是批處理類Apex中的執行混亂

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將被調用兩次,但它被稱爲只有一個時間問題。該循環運行兩次(我分析了調試日誌)。爲什麼只被稱爲一次?

回答

3

鏈接批處理作業被引入作爲一個功能在冬季13.從發行說明:

起價另一個批處理作業批處理作業

現在,您可以從另一批啓動一批 工作通過調用Database.executeBatch從批處理類的 finish方法。這使您可以鏈接批次 作業並創建一系列作業。請注意, 批量作業的管理員限制仍然適用。此更改適用於使用 Salesforce.com API版本26.0及更高版本保存的批量Apex。以前,Apex使用Salesforce.com API版本25.0及更早版本保存 ,因此您無法在任何批量Apex方法內調用 Database.executeBatch。使用的 版本是正在運行的批次類的版本,該批次類可以啓動另一個 批處理作業。如果正在運行的批次類中的finish方法在幫助程序類中調用 方法以啓動批處理作業,則幫助程序類的Salesforce.com API版本無關緊要。 Source

所以使用API​​版本26.0的Apex類和以後你可以鏈一個批處理作業到剛剛完成一個結束。完成後,您不能分支並啓動多個批處理作業。