Batch Apex in Salesforce is a powerful tool for efficiently processing large sets of data. It allows developers to break down data processing tasks into manageable chunks, ensuring optimal performance and avoiding governor limits. In this blog post, we’ll explore the syntax, provide examples, discuss best practices, and highlight the advantages of using Batch Apex over other asynchronous Apex options.

Understanding Batch Apex: Syntax and Structure

Batch Apex follows a specific syntax and structure to handle large datasets. A batch class in Salesforce must implement the Database.Batchable interface. Let’s break down the syntax:

  • start: This method is responsible for providing a query locator, defining the scope of records to be processed.
  • execute: This method contains the logic to be executed on each batch of records.
  • finish: This method handles any post-processing tasks after all batches are executed.

Example of Batch Apex

Let’s consider an example where we want to update the ‘Status’ field of all Opportunities with a certain condition:

Writing Test Classes for Batch Apex

Test classes are crucial to ensure the reliability and functionality of your Batch Apex. Here’s a simple test class for our example:

Can we call Batch Apex in Flow?

As of the last update in January 2024, Salesforce Flow does not directly support the invocation of Batch Apex classes out-of-the-box. However, there are workarounds and strategies that developers can employ to achieve the desired functionality:

  1. Invoking Batch Apex from a Flow Trigger: Although Flows cannot directly call Batch Apex classes, you can initiate Batch Apex processing indirectly by invoking it from a Flow trigger. This approach involves using Process Builder or Apex triggers to detect specific conditions within a Flow and then kick off a Batch Apex job accordingly. While this method adds complexity, it provides a way to integrate Batch Apex functionality within the Flow automation.
  2. Using Invocable Methods: Another approach is to create an invocable method in an Apex class that wraps the Batch Apex logic. This invocable method can then be called from within a Flow using the “Apex” action element. While this method requires custom development, it offers a more seamless integration between Flow and Batch Apex processing.

Stateful Syntax and Usage

Adding the Database.Stateful interface to your batch class allows you to maintain state across multiple batches. Here’s a brief example:

Adding Database.Stateful allows totalRecordsProcessed to retain its value between batch executions.

limitations of batch apex class

  • Maximum Number of Records per Batch: Salesforce allows processing up to 50 million records in a batch. Each batch can process a maximum of 200 records by default, but this can be increased up to 2,000 records per batch using the Database.executeBatch method.
  • Total Number of Batch Jobs: A maximum of 100 batch jobs can be queued or active simultaneously in a production organization.
  • Maximum Execution Time: Each batch execution is subject to a maximum execution time of 10 minutes. If a batch execution exceeds this limit, it’s terminated, and any remaining records are processed in the subsequent batch execution.
  • Heap Size Limit: Batch Apex jobs share the same heap size limit as synchronous Apex transactions, which is currently set at 6 MB for synchronous transactions.
  • Governor Limits: Batch Apex is subject to various governor limits, including limits on database queries, DML operations, CPU time, heap size, and others. Developers must ensure their batch classes comply with these limits to prevent runtime exceptions.
  • Chaining Limits: Salesforce allows chaining batch jobs together for sequential processing or processing larger datasets. However, there are limits on the number of batch jobs that can be chained together in a single transaction.
  • Asynchronous Processing: Batch Apex executes asynchronously, running in the background without real-time user feedback. Developers should consider this asynchronous nature when designing batch processes.
  • Testing and Debugging Complexity: Testing and debugging batch classes may be more complex due to their asynchronous nature and the need to handle large datasets. Comprehensive testing strategies are essential to ensure the reliability and efficiency of batch processes.

Source: Salesforce Apex Developer Guide – Batch Apex Limits and Considerations (


Batch Apex is a crucial feature in Salesforce for handling large-scale data operations. By understanding its syntax, creating effective examples, following best practices, and leveraging its advantages, developers can build robust and efficient data processing solutions. Whether updating records, cleaning data, or migrating information, Batch Apex is a go-to tool for ensuring optimal performance in the Salesforce environment.

Related Post

Leave a Reply

Your email address will not be published. Required fields are marked *