4

Salesforce limits all account types to 200 future method invocations per full paid license every 24 hours. Are there any known options to increase this limit? If you start to run in to this is your only real option to find a new approach or buy more licenses (just for the limit increase)?

Does SFDC let you buy higher limits or provide any other way for orgs to be able to bypass this limitation?

Edit: I've been asked for more details, but really I'm really just trying to get this question answered - often people will try to give alternate solutions to whatever example you throw out. There are a myriad of reasons or scenarios where future calls might be the best solution but there is a risk of running over the limits.

For the sake of an example though, how about this: You need to make a callout in a trigger which then necessitates a future call. You have a relatively small number of actual accounts (say, 50) and a much larger number of partner accounts (which don't add to the limit, let's say, 1,000). The partner accounts fire the trigger and make the callout but now we are looking at about 10 futures per partner account per 24 hours, which may not be enough.

Another example: You have multiple managed packages installed that all make some number of future calls and you start to go over your limit.

Really, the why in this case isn't that important, I'm just wondering what, if any, the options are.

4

According to the documentation this is a hard limit, though perhaps there's hope in what ca-peterson mentioned about his discussion with people in the partner program. But assuming for now that you're hard-limited, here's the direction I have gone numerous times.

Instead of making callouts from @future methods in triggers, which has other negative consequences around being fired from another future method or from a batch Apex method (it's forbidden), make your callouts from batch Apex.

The current limit is 10 callouts per execute method, but even making a single callout per execute is a huge benefit. Have your trigger insert records to process into a queue rather than going straight to future methods. Then, once per hour, a scheduled Apex process wakes up and processes items in your queue - or have your trigger launch the batch apex after it's done appending to your queue. Make sure your executeBatch call processes only 1 row to allow only 1 callout per execute pass, like this:

BatchApexClass bac = new BatchApexClass();
Database.executeBatch(bac, 1);

With this design pattern, you could literally have millions of callouts queued for processing and they will definitely get processed over time, at the rate of 1-10 callouts per row returned in your batch Apex class's query.

  • +1 this, you have to choke your batches down to 1 record but you can run a lot more futures than you otherwise could. I have implemented thousands of callout's per day by using this method. – ebt Aug 15 '12 at 7:21
3

What are you trying to do? More info would help. IME it's pretty unusual to run into the 200 futures/day limit although I can see that it would be more likely in a small userbase. Haven't heard of this getting blacktabbed, but I've never heard of someone needing it to be. It never hurts to ask, although as with anything like this it will likely be hard to get approved and will be helped by a good relationship with your salesperson. Options for a workaround could be some combination of:

  • directly reducing future method invocations (sounds obvious but I have had a client who was making dozens of unneeded future calls per user per day)
  • batching (either via Apex scheduler, Apex batches, or more functional batching)
  • API integration (instead of a future call, make an external WS call to somewhere that knows what to do via API)

More info on your exact problem would help though.

  • 1
    I've talked to people in the partner program at salesforce that have led me to believe this can be increased, but I'm not sure if it requires more approvals than most soft limits. There is not currently an item on the salesforce price list for this, so your AE can't sell additional calls like they would be able to for API calls. – ca_peterson Aug 15 '12 at 1:36
1

Are you using @Future inside a Trigger? Per the above comment, if you can put that logic into scheduled apex batch classes it will make your life much easier.

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.