Salesforce Stateful Batch Apex
Biswajeet
January 13, 2017 No Comments on Salesforce Stateful Batch Apex
Batch Apex is stateless by default. That means for each execution of your execute method, you receive a fresh copy of your object. All fields of the class are initialized, static and instance. If your batch process needs information that is shared across transactions, one approach is to make the Batch Apex class itself
stateful by implementing the Database.Stateful
interface. Here is an example of stateful batch apex. In below example I want to count the “Customer – Direct” account records processed by the batch class.
Batch Apex:
global class AccountBatchApex implements Database.Batchable<sObject>, Database.Stateful{ global integer numberofDirectCustomers = 0; global Database.QueryLocator start(Database.BatchableContext bc){ String soqlQuery = 'SELECT Name, AccountNumber, Type From Account'; return Database.getQueryLocator(soqlQuery); } global void execute(Database.BatchableContext bc, List<Account> scope){ for (Account acc : scope){ if(acc.Type.equals('Customer - Direct')){ numberofDirectCustomers++; } } } global void finish(Database.BatchableContext bc){ } }