Skip to main content
Peter Davids a posé une question dans #Integration

Hi all,

We need to implement the following pattern at my org:

  • callout to external data source
  • if that callout takes too long (according to some configurable threshold), log an error (ie do some DML)
  • if that callout timed out on the remote server, try it again

Recognizing the potential for the dreaded "You have uncommitted work pending. Please commit or rollback before calling out." error, I put the error logging code in a future method, thus isolating the DML from the callouts. However, the error is still being thrown. I reduced the issue down to this pattern:

public static void foo() {

Http http = new Http();

HttpRequest req = new Httprequest();

req.setEndpoint('https://test.salesforce.com'); //whatever endpoint

req.setMethod('GET');

http.send(req); //works fine

bar();

http.send(req); //throws calloutexception

}

@future public static void bar() {

}

Am I correct to assume that calling a future method counts as a DML operation? Is there any documentation I'm missing somewhere?

 
437 réponses
0/9000