针对Salesforce

时间:2018-11-05 19:38:14

标签: salesforce

由于salesforce没有睡眠方法,因此我创建了一个辅助函数来使用Web服务等待特定的超时时间

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个调用甚至没有命中Web服务,并且当我检查调试日志时我发现了System.HttpRequest[Endpoint=null, Method=null]System.HttpResponse[Status=null, StatusCode=0],为什么会这样?以及如何解决此问题?

PS:我想要的原始方法是因为Custom_Record__c可能在以后的调用方法运行时尚未创建,所以我需要一种方法来等待外部库创建它以供使用。我不能永远等待,所以我使用计数器来控制它,而我遇到了这个问题。

0 个答案:

没有答案