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クラスをもう1つ作成するオプションがありますそれらを 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()andを使用するとLimits.getLimitCallouts()、Salesforce が制限を引き上げた場合に自動的に更新されます。


トリガーでは、たとえば、10 個の @future メソッドを設定し、それぞれに 10 個のコールアウトの新しい制限を設定できます... それでも、バッチはより良いアイデアのように聞こえます。

于 2013-02-18T11:41:19.957 に答える