我的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多个标注?
答案 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个标注的新限制......仍然批处理听起来更好。