function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
sfdcjoeysfdcjoey 

batch apex class

why do we write batch class. Can some one give a real time example ?
Amit Chaudhary 8Amit Chaudhary 8
Please check below post for batch job
1) http://amitsalesforce.blogspot.com/2016/02/batch-apex-in-salesforce-test-class-for.html

Batch Apex
A Batch class allows you to define a single job that can be broken up into manageable chunks that will be processed separately.

When to use Batch Apex
One example is if you need to make a field update to every Account in your organization. If you have 10,001 Account records in your org, this is impossible without some way of breaking it up. So in the start() method, you define the query you're going to use in this batch context: 'select Id from Account'. Then the execute() method runs, but only receives a relatively short list of records (default 200). Within the execute(), everything runs in its own transactional context, which means almost all of the governor limits only apply to that block. Thus each time execute() is run, you are allowed 150 queries and 50,000 DML rows and so on. When that execute() is complete, a new one is instantiated with the next group of 200 Accounts, with a brand new set of governor limits. Finally the finish() method wraps up any loose ends as necessary, like sending a status email.

Sample Batch Apex
1) Start method is automatically called at the beginning of the apex job. This method will collect record or objects on which the operation should be performed. These record are divided into subtasks & passes those to execute method.

2) Execute Method performs operation which we want to perform on the records fetched from start method.

3) Finish method executes after all batches are processed. Use this method to send confirmation email notifications.
global class AccountUpdateBatchJob implements Database.Batchable<sObject>
{
    global Database.QueryLocator start(Database.BatchableContext BC)
    {
        String query = 'SELECT Id,Name FROM Account';
       
        return Database.getQueryLocator(query);
    }
    global void execute(Database.BatchableContext BC, List<Account> scope)
    {
        for(Account a : scope)
        {
            a.Name = a.Name + 'Updated by Batch job';
        }
        update scope;
    }
    global void finish(Database.BatchableContext BC) {
    }
}
Calling on Batch Apex
            AccountUpdateBatchJob obj = new AccountUpdateBatchJob();
            DataBase.executeBatch(obj);


Let us know if this will help you or you need more help



 
Arp@SArp@S
Hi Amit,

Thanks for the post.

I need to create batch class that anonymises account and other object data.

To start with that, I referred to this example. At first it worked fine for me. It appended 'Updated by Batch Job' in account name, but after that it has stopped working. Below the batch and test class that I have used. Can you please assist me with it.
-----------------------------------------------------------------------------------------------------------------------
global class AccountDataMask implements Database.Batchable<sObject> 
{
    global Database.QueryLocator start(Database.BatchableContext BC) 
    {
        String query = 'SELECT AccountNumber, Name FROM Account';
        
        return Database.getQueryLocator(query);
    }
    global void execute(Database.BatchableContext BC, List<Account> scope) 
    {
        for(Account a : scope)
        {
            a.Name = a.Name + '2';
        }
        update scope;
    }
    global void finish(Database.BatchableContext BC) {
    }
}
-----------------------------------------------------------------------------------------------------------------------
@isTest 
public class AccountDataMaskTest 
{
    static testMethod void testMethod1() 
    {
        List<Account> lstAccount= new List<Account>();
        for(Integer i=0 ;i <200;i++)
        {
            Account acc = new Account();
            acc.Name ='Name'+i;
            lstAccount.add(acc);
        }
        
        insert lstAccount;
        
        Test.startTest();

            AccountDataMask obj = new AccountDataMask();
            DataBase.executeBatch(obj); 
            
        Test.stopTest();
    }
}
-----------------------------------------------------------------------------------------------------------------------
Thanks in advance!
NILESH RAJ 20NILESH RAJ 20

Batch apex helps to execute millions of records without hitting the governor limits.
A developer can Schedule a batch class to run at different time and frequency.
If one of the batches fails to process the records, other batches will not rollback.
For complete detail, on Batch Apex  you can check https://sfdcwisdom.com/batch-apex-in-salesforce/ (https://sfdcwisdom.com/batch-apex-in-salesforce)