Batch Apex Implementation Using Custom Iterables for External APIs

Batch Apex Implementation Using Custom Iterables for External APIs

A Step-by-Step Guide to Implementing Custom Iterables in Batch Apex for External API Integration


Batch Apex allows developers to process large amounts of data in Salesforce. One way to use Batch Apex is by implementing custom Iterables. This is useful when working with external APIs, as it allows for more flexibility and control over the data being processed.

Start blogging with Hashnode


To implement a custom Iterable in Batch Apex, the first step is to create a class that implements the Iterable interface. This class should have a method called iterator that returns an instance of a class that implements the Iterator interface. The Iterator class should have methods for hasNext and next, which allows for iteration over the data being processed.

Here is an example of a simple Batch Apex class that uses a custom Iterable:

global class MyBatchApex implements Database.Batchable<SObject> {

  global Iterable<SObject> start(Database.BatchableContext bc) {
    return new MyCustomIterable();

  global void execute(Database.BatchableContext bc, List<SObject> scope) {
    // process the data in scope

  global void finish(Database.BatchableContext bc) {
    // do any post-processing tasks


The MyCustomIterable class would then look something like this:

public class MyCustomIterable implements Iterable<SObject> {

  public Iterator<SObject> iterator() {
    return new MyCustomIterator();


Custom Iterator

The MyCustomIterator class would have the hasNext and next methods, which would be responsible for retrieving the data to be processed. In the case of working with an external API, this is where the API calls would be made.

Here is an example of the MyCustomIterator class that retrieves data from an external API:

public class MyCustomIterator implements Iterator<SObject> {

  // the current position in the iteration
  private Integer index = 0;

  // the list of data to be processed
  private List<SObject> data;

  public MyCustomIterator() {
    // call the external API and populate the data list

  public Boolean hasNext() {
    return index < data.size();

  public SObject next() {
    return data[index++];


In this example, the MyCustomIterator class makes a call to an external API and populates a list of SObject records to be processed. The hasNext method checks if there is more data to be processed, and the next method returns the next item in the list.


Using custom Iterables in Batch Apex allows for more control over the data being processed and is a useful tool when working with external APIs.

Did you find this article valuable?

Support Christian Pelayo by becoming a sponsor. Any amount is appreciated!