Http-вызов возвращает ноль для запроса и ответа в цикле для Salesforce - PullRequest
0 голосов
/ 05 ноября 2018

Поскольку у salesforce нет спящего метода, я создаю вспомогательную функцию для использования веб-службы для ожидания определенного времени ожидания

public class SalesforceHelper {
    public static void waitCall(String timeout){
        System_Settings__c lnpSetting = System_Settings__c.getValues('System Properties');
            String endpoint=lnpSetting.Base_Endpoint_URL__c + 'salesforceHelper/wait?timeout=' + timeout;
        system.debug('====endpoint======'+endpoint);
        HttpRequest httpReq=new HttpRequest();  
        HttpResponse httpResp = new HttpResponse(); 
        Http http = new Http();
        httpReq.setMethod('GET'); 
        httpReq.setEndpoint(endpoint);
        String username=lnpSetting.Endpoint_Username__c;
        String password=lnpSetting.Endpoint_Password__c;    
        Blob headerValue = Blob.valueOf(username + ':' + password);
        String authorizationHeader = 'Basic ' + EncodingUtil.base64Encode(headerValue); 
        httpReq.setHeader('Authorization', authorizationHeader); 
        httpReq.setHeader('content-type','application/json; charset=utf-8');
        httpReq.setTimeout(120000);
        try{
            httpResp = http.send(httpReq);
            System.debug('Wait response' + httpResp);
        } catch (Exception e) {
            system.debug(LoggingLevel.Error, 'Error HTTP response code = ' + httpResp.getStatusCode() + '; calling '+endpoint );
        }
    }
}

Затем в анонимных окнах я запускаю следующий код:

System.debug('Staring call wait call: ' + System.now().format('HH:mm:ss.SSS'));
SalesforceHelper.waitCall('50000'); 
System.debug('Finish call wait call: ' + System.now().format('HH:mm:ss.SSS'));
Custom_Record__c[] record =  new List<Custom_Record__C>();
Integer counter = 0;
while (record.size() == 0 && counter < 10){
            System.debug('Staring call wait call for counter + ' + counter + ': ' + System.now().format('HH:mm:ss.SSS'));
            SalesforceHelper.waitCall('60000');
            System.debug('Finish call wait call for counter + ' + counter + ': ' + System.now().format('HH:mm:ss.SSS'));
            counter++;
            rec = new List<Custom_Record__C>();
}

Приведенный выше код предполагает выполнение следующих действий: сначала нужно подождать 50 секунд, затем «запросить» запись, но она возвращает пустое значение, затем выполнить цикл со счетчиком и попытаться 10 раз «запросить» запись назад.

Но когда я запускаю код, я понимаю, что только 50-секундный цикл ожидания и первые два 60-секундного ожидания успешно выполнены, остальные 8 вызовов в цикле даже не попадают в веб-службу, и когда я проверяю журнал отладки Я нашел System.HttpRequest[Endpoint=null, Method=null] и System.HttpResponse[Status=null, StatusCode=0], почему это произошло? И как я могу решить эту проблему?

PS: оригинальный способ, который я хочу, потому что Custom_Record__c может быть еще не создан в будущем методе вызова, когда время его запуска, поэтому мне нужен способ ждать, пока внешняя библиотека создаст его для использования. Я не могу ждать это вечно, поэтому я использую счетчик, чтобы контролировать это, и я получил эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...