1

我的 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 多个标注?

4

1 回答 1

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()方法中您再次检查是否还有更多工作要做,并且您可以再次触发批处理。

PS 不要使用硬编码的“10”。使用Limits.getCallouts()Limits.getLimitCallouts()因此如果 Salesforce 增加限制,它将自动更新。


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

于 2013-02-18T11:41:19.957 回答