I believe a motivation for the platform not allowing DML before a web service callout is to avoid a long-lived transaction (as the callout is allowed to wait up to 10 seconds for its response).

I have a query that I want to use a "for update" locking statement in to ensure some processing is only done once. But immediately following that query I want to make a web service callout. It occurs to me that this may also be disallowed by the platform (locking requiring a transaction?) or be potentially problematic but I haven't found any documentation on the subject.

Can a web service callout be made in code that has a "for update" lock applied?

  • 1
    Should be simple enough to mock up. Get account in a for update DML. Perform a callout immediately after to any random site. Did you give it a shot? – Eric Aug 20 '16 at 18:52
  • @Eric This came up in some refactoring so quite soon next week I'll find out. Taking the lazy approach by asking... – Keith C Aug 20 '16 at 20:14

Have now run the code and it is working fine - so the answer is yes.

  • I was just going in to mock this up. Glad you got the answer. Although, not sure why SF will not allow DML before a callout. Just provide us a method to commit before a callout so the decision is deliberate on the part of the developer – Eric Aug 20 '16 at 23:54
  • Of course, keep in mind that holding any lock longer than necessary can affect other users in the system. – sfdcfox Aug 22 '16 at 1:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.