大量Web服务标注的计划/批处理?

时间:2016-06-23 13:57:00

标签: web-services batch-file salesforce limits callouts

我是Apex的新手,我必须为每个帐户(为数千个帐户)拨打网络服务。

通常,单个Web服务请求需要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);
    } 
}

现在我遇到了Salesforces执行调控器和限制: 对于几乎所有标注,我都会得到例外情况&#34;读取超时&#34;或者&#34;超过分配给标注的最长时间(120000毫秒)&#34;。

我也尝试过异步标注,但他们不能使用批次。

那么,有没有办法安排大量的标注?

1 个答案:

答案 0 :(得分:0)

您是否尝试将执行方法限制为100? Salesforce每个事务只允许100个标注。即。

Id AccAddressID = Database.executeBatch(new AccValidator(countryCodes, 0), 100);

也许这可能对您有所帮助: https://salesforce.stackexchange.com/questions/131448/fatal-errorsystem-limitexception-too-many-callouts-101