Skip to content

Abstract away which async framework is being used within Salesforce in favor of dynamically using the most appropriate solution for the problem at hand.

License

Notifications You must be signed in to change notification settings

jamessimone/apex-async-processor

Repository files navigation

Apex Async Processor

This repository showcases how to use the AsyncProcessor pattern to avoid having to create batch classes and/or queueable classes.

Using this pattern greatly simplifies how asynchronous code is defined and run on platform. Simply:

  • clone the repository or copy/paste the AsyncProcessor and AsyncProcessorTests files to your org

  • extend the AsyncProcessor, defining code you'd like to have processed asynchronously:

    • also add any additional interfaces you need, like Database.Stateful (as is appropriate)
    public class AsyncContactProcessorExample extends AsyncProcessor {
      protected override void innerExecute(List<SObject> records) {
        List<Contact> contacts = (List<Contact>) records;
        // do whatever processing here
      }
    }
    • and then in usage:
    // within some other class:
    new AsyncContactProcessorExample().get('SELECT Id, Account.Name FROM Contact').kickoff();
    // or, alternatively, if you have the records already:
    new AsyncContactProcessorExample().get(contacts).kickoff();

For query-based usages, AsyncProcessor will automatically choose whether to batch or enqueue based on the default returned by Limits.getLimitQueryRows() - this can also be overridden by providing an alternative implementation of protected virtual Integer getLimitToBatch() for subclasses of AsyncProcessor.

Further Examples

Here's an example lowering the getLimitToBatch() amount from 50k to 10k records. This could be really useful if the data you're passing in might otherwise blow up the heap size limit.

public without sharing class LowerLimitAsyncProcessor {

  public override Integer getLimitToBatch() {
    return Limits.getLimitDmlRows();
  }
}

You can also look at ContactAsyncProcessor for a short, complete example.

About

Abstract away which async framework is being used within Salesforce in favor of dynamically using the most appropriate solution for the problem at hand.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Languages