标注太多:DataBase.Batchable中有11个

时间:2013-02-18 10:53:44

标签: salesforce apex-code

我的DataBase.Batchable

中有一段代码段
if(pageToken!=null)
           deleteEvents(accessToken , pageToken,c.CalendarId__c);

        }

并删除事件功能代码

public static void deleteEvents(String accessToken,String pageToken,String CalendarId){
    while(pageToken != null)
{   String re = GCalendarUtil.doApiCall(null,'GET','https://www.googleapis.com/calendar/v3/calendars/'+CalendarId+'/events?pageToken='+pageToken,accessToken);
                System.debug('next page response is'+ re);
                 re = re.replaceAll('"end":','"end1":');
re = re.replaceAll('"dateTime":','"dateTime1":');  
  JSON2Apex1 aa = JSON2Apex1.parse(re);
   List<JSON2Apex1.Items> ii = aa.items ;
  System.debug('size of ii'+ii.size());
  pageToken = aa.nextPageToken ;
 List<String> event_id =new List<String>();

           if(ii!= null){
           for(JSON2Apex1.Items i: ii){
           event_id.add(i.id);
           }
           }
  for(String ml: event_id)
  System.debug('Hello Worlds'+ml);
            for(String s:event_id)
       {
       GCalendarUtil.doApiCall(null,'DELETE','https://www.googleapis.com/calendar/v3/calendars/'+CalendarId+'/events/'+s,accessToken);

       }

 }   
    }

因为有大约180个事件,这就是为什么我收到此错误但是为了删除它们我有一个选项,我在其中创建自定义对象和文本字段(事件的id),然后再创建一个Database.Batchable删除它们的类,并将其作为一批9或任何其他方法传递给我,以便我能够在Database.Batchable界面中执行100多个标注?

1 个答案:

答案 0 :(得分:1)

10是最大值。并且Google的日历API似乎不支持批量删除。

您可以尝试分块批处理作业(传递给每个execute()调用的记录列表的大小)。例如:

global Database.QueryLocator start(Database.BatchableContext bc){
    return Database.getQueryLocator([SELECT Id FROM Event]); // anything that loops through Events and not say Accounts
}

global void execute(Database.BatchableContext BC, List<Account> scope){
    // your deletes here
}

Database.executeBatch(new MyBatchClass(), 10); // this will make sure to work on 10 events (or less) at a time

另一种选择是阅读有关批次的菊花链。在执行中,您将删除最多10个,使用finish()方法再次检查是否还有更多工作要做,您可以再次发起批处理。

P.S。不要使用硬编码的“10”。使用Limits.getCallouts()Limits.getLimitCallouts(),以便在Salesforce增加限制时自动更新。


在一个触发器中你可以设置10个@future方法,每个方法都有10个标注的新限制......仍然批处理听起来更好。