2016-06-23 7 views
1

Я новичок в Apex, и я должен вызвать веб-сервис для каждой учетной записи (для нескольких тысяч учетных записей).Расписание/пакет для большого количества выносок webservice?

Обычно один запрос webservice занимает от 500 до 5000 мс.

Насколько мне известно, для этой задачи требуются планируемые и пакетные классы.

Моя идея состояла в том, чтобы группировать счета по кодам стран (только в Европе) и начинать партию для каждой группы.

Первая партия запускается планируемым класса, следующие из них начинаются в пакетном способе отделки:

global class AccValidator implements Database.Batchable<sObject>, Database.AllowsCallouts { 

    private List<String> countryCodes; 
    private countryIndex; 

    global AccValidator(List<String> countryCodes, Integer countryIndex) { 
     this.countryCodes = countryCodes; 
     this.countryIndex = countryIndex; 
     ... 
    } 

    // Get Accounts for current country code 
    global Database.QueryLocator start(Database.BatchableContext bc) {...} 

    global void execute(Database.BatchableContext bc, list<Account> myAccounts) { 
     for (Integer i = 0; i < this.AccAccounts.size(); i++) { 
      // Callout for every Account 
      HttpRequest request ... 
      Http http = new Http(); 
      HttpResponse response = http.send(request); 
      ... 
     } 
    } 

    global void finish(Database.BatchableContext BC) { 
     if (this.countryIndex < this.countryCodes.size() - 1) { 
      // start next batch 
      Database.executeBatch(new AccValidator(this.countryCodes, this.countryIndex + 1), 200); 
     } 
    } 

    global static List<String> getCountryCodes() {...} 
} 

И мой график класс:

global class AccValidatorSchedule implements Schedulable { 
    global void execute(SchedulableContext sc) { 
     List<String> countryCodes = AccValidator.getCountryCodes(); 
     Id AccAddressID = Database.executeBatch(new AccValidator(countryCodes, 0), 200); 
    } 
} 

Теперь I'am застрял с губернаторами исполнения Salesforces и лимиты: Для почти всех выносок я получаю исключения «Прочитанный тайм-аут» или «Превышено максимальное время, выделенное для выноски (120000 мс)».

Я также пробовал асинхронные выноски, но они не работают с партиями.

Итак, есть ли способ запланировать большое количество выносок?

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^