Home

Monday, 6 January 2025

sfdc-learn #15 : Pass parameter to apex batch Class

If we have requirements like pass Case ids  and  status to apex batch class and update all case record with that status in batch class. Also send email and In that email send how many record are updated count.

Apex Batch Class:
global class UpdateCaseBatch  implements Database.Batchable<sObject>, Database.Stateful {
    global set<Id> caseIdSet;
    global string caseStatus;
    global integer recordProcessed = 0;

    public UpdateCaseBatch( set<Id> caseId, string strStatus) {
      this.caseIdSet = caseId;
      this.caseStatus = strStatus;
    }

    global Database.querylocator start(Database.BatchableContext bc){
        string squery= 'SELECT Id,status from case where Id In:caseIdSet';
        return Database.getQueryLocator(squery);
    }

    global void execute(Database.BatchableContext bc , List<Case> scope){
     
        for(Case cse: scope){
            cse.status = caseStatus;
            recordProcessed = recordProcessed +1;
        }
        update scope;
    }

    global void finish(Database.BatchableContext bc){
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
            mail.setToAddresses(new String[] {'dineshsamudre94@gmail.com'});
            mail.setSenderDisplayName('Batch Process');
            mail.setSubject('Case Statuses updated successfully');
            mail.setPlainTextBody(recordProcessed + ': case record updated successfully');
            Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
     }


}


Execute above batch class:
//Anonymous apex

Map<Id,Case> caseMap = new Map<Id,Case>([SELECT ID,status from case ]);
 
if(!caseMap.isEmpty()){
     UpdateCaseBatch obj =  new UpdateCaseBatch(caseMap.keySet(),'Closed');
     string jobId = Database.executeBatch(obj,20);
     System.debug('jobId:'+jobId);
}


Case status updated successfully


Email Sent


No comments:

Post a Comment