You need to sign in to do that
Don't have an account?
Varun Teja
How to write test class for Batch Apex job
global class AccountContactCaseOpporBatch implements Database.Batchable<sObject> {
global Database.QueryLocator start(Database.BatchableContext bc) {
return Database.getQueryLocator(
'SELECT ID, Name, Archival_Number_Of_Cases_Count__c, Archival_Number_Of_Contacts_Count__c, Archival_Number_Of_Oppt_Count__c,'+
'(SELECT ID, Name, CreatedDate FROM Contacts Where CreatedDate <= LAST_N_DAYS:5),'+
'(SELECT ID, Name, CreatedDate FROM Opportunities Where CreatedDate <= LAST_N_DAYS:5 ),'+
'(SELECT ID, CaseNumber, CreatedDate FROM Cases Where CreatedDate <= LAST_N_DAYS:5) FROM Account'
);
}
global void execute(Database.BatchableContext bc, List<Account> scope){
List<Account> accounts = new List<Account>();
List<Contact> contacts = new List<Contact>();
List<Opportunity> opportunities = new List<Opportunity>();
List<Case> cases = new List<Case>();
List<ArchivalTable__c> archivTableList = new List<ArchivalTable__c>();
for (Account accou : scope) {
Integer contactProcessed = 0;
Integer opportunityProcessed = 0;
Integer caseProcessed = 0;
for (Contact contct : accou.contacts) {
//System.debug(' List of Contact Records ---'+contct);
contacts.add(contct);
contactProcessed = contactProcessed + 1;
}
for (Opportunity opport : accou.opportunities) {
//System.debug(' List of Opportunity Records ---'+opport);
opportunities.add(opport);
opportunityProcessed = opportunityProcessed + 1;
}
for (Case cas : accou.cases) {
//System.debug(' List of Case Records ---'+cas);
cases.add(cas);
caseProcessed = caseProcessed + 1;
}
if (accou.Archival_Number_Of_Cases_Count__c==null || accou.Archival_Number_Of_Cases_Count__c==0) {
accou.Archival_Number_Of_Cases_Count__c = caseProcessed;
}else {
accou.Archival_Number_Of_Cases_Count__c = accou.Archival_Number_Of_Cases_Count__c + caseProcessed;
}
if (accou.Archival_Number_Of_Contacts_Count__c==null || accou.Archival_Number_Of_Contacts_Count__c==0) {
accou.Archival_Number_Of_Contacts_Count__c = contactProcessed;
}else {
accou.Archival_Number_Of_Contacts_Count__c = accou.Archival_Number_Of_Contacts_Count__c + contactProcessed;
}
if (accou.Archival_Number_Of_Oppt_Count__c==null || accou.Archival_Number_Of_Oppt_Count__c==0) {
accou.Archival_Number_Of_Oppt_Count__c = opportunityProcessed;
}else {
accou.Archival_Number_Of_Oppt_Count__c = accou.Archival_Number_Of_Oppt_Count__c + opportunityProcessed;
}
accounts.add(accou);
//System.debug(' List of Accounts Records ---'+accounts);
System.debug('Account Name '+accou.Name);
ArchivalTable__c archieveData = new ArchivalTable__c();
archieveData.ArchivalAccount__c = String.valueOf(accou.Id);
System.debug('archieveData.ArchivalAccount__c-- '+archieveData.ArchivalAccount__c);
archieveData.Number_Of_Contacts_Count__c = contactProcessed;
//System.debug('archieveData.Number_Of_Contacts_Count__c-- '+archieveData.Number_Of_Contacts_Count__c);
archieveData.Number_Of_Oppt_Count__c = opportunityProcessed;
//System.debug('archieveData.Number_Of_Oppt_Count__c-- '+archieveData.Number_Of_Oppt_Count__c);
archieveData.Number_Of_Cases_Count__c = caseProcessed;
//System.debug('archieveData.Number_Of_Cases_Count__c-- '+archieveData.Number_Of_Cases_Count__c);
archieveData.Date__c = Date.today();
archivTableList.add(archieveData);
//System.debug('------archivTableList-- '+archivTableList);
}
if(cases.size()>0){
delete cases;
}
if(contacts.size()>0){
delete contacts;
}
if(opportunities.size()>0){
delete opportunities;
}
if(archivTableList.size()>0){
insert archivTableList;
}
if(accounts.size()>0){
update accounts;
}
}
global void finish(Database.BatchableContext bc){
System.debug(' Records processed --- '+bc.getJobId());
AsyncApexJob result = [SELECT Id, Status, NumberOfErrors,
JobItemsProcessed,
TotalJobItems, CreatedBy.Email
FROM AsyncApexJob
WHERE Id = :bc.getJobId()];
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[] {result.CreatedBy.Email};
mail.setToAddresses(toAddresses);
mail.setSubject('Status of Contacts,opportunities and cases batch job -- ' + result.Status);
mail.setPlainTextBody
('The batch Apex job processed ' + result.TotalJobItems +
' batches with '+ result.NumberOfErrors + ' failures.');
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
}
Thanks in Advance
global Database.QueryLocator start(Database.BatchableContext bc) {
return Database.getQueryLocator(
'SELECT ID, Name, Archival_Number_Of_Cases_Count__c, Archival_Number_Of_Contacts_Count__c, Archival_Number_Of_Oppt_Count__c,'+
'(SELECT ID, Name, CreatedDate FROM Contacts Where CreatedDate <= LAST_N_DAYS:5),'+
'(SELECT ID, Name, CreatedDate FROM Opportunities Where CreatedDate <= LAST_N_DAYS:5 ),'+
'(SELECT ID, CaseNumber, CreatedDate FROM Cases Where CreatedDate <= LAST_N_DAYS:5) FROM Account'
);
}
global void execute(Database.BatchableContext bc, List<Account> scope){
List<Account> accounts = new List<Account>();
List<Contact> contacts = new List<Contact>();
List<Opportunity> opportunities = new List<Opportunity>();
List<Case> cases = new List<Case>();
List<ArchivalTable__c> archivTableList = new List<ArchivalTable__c>();
for (Account accou : scope) {
Integer contactProcessed = 0;
Integer opportunityProcessed = 0;
Integer caseProcessed = 0;
for (Contact contct : accou.contacts) {
//System.debug(' List of Contact Records ---'+contct);
contacts.add(contct);
contactProcessed = contactProcessed + 1;
}
for (Opportunity opport : accou.opportunities) {
//System.debug(' List of Opportunity Records ---'+opport);
opportunities.add(opport);
opportunityProcessed = opportunityProcessed + 1;
}
for (Case cas : accou.cases) {
//System.debug(' List of Case Records ---'+cas);
cases.add(cas);
caseProcessed = caseProcessed + 1;
}
if (accou.Archival_Number_Of_Cases_Count__c==null || accou.Archival_Number_Of_Cases_Count__c==0) {
accou.Archival_Number_Of_Cases_Count__c = caseProcessed;
}else {
accou.Archival_Number_Of_Cases_Count__c = accou.Archival_Number_Of_Cases_Count__c + caseProcessed;
}
if (accou.Archival_Number_Of_Contacts_Count__c==null || accou.Archival_Number_Of_Contacts_Count__c==0) {
accou.Archival_Number_Of_Contacts_Count__c = contactProcessed;
}else {
accou.Archival_Number_Of_Contacts_Count__c = accou.Archival_Number_Of_Contacts_Count__c + contactProcessed;
}
if (accou.Archival_Number_Of_Oppt_Count__c==null || accou.Archival_Number_Of_Oppt_Count__c==0) {
accou.Archival_Number_Of_Oppt_Count__c = opportunityProcessed;
}else {
accou.Archival_Number_Of_Oppt_Count__c = accou.Archival_Number_Of_Oppt_Count__c + opportunityProcessed;
}
accounts.add(accou);
//System.debug(' List of Accounts Records ---'+accounts);
System.debug('Account Name '+accou.Name);
ArchivalTable__c archieveData = new ArchivalTable__c();
archieveData.ArchivalAccount__c = String.valueOf(accou.Id);
System.debug('archieveData.ArchivalAccount__c-- '+archieveData.ArchivalAccount__c);
archieveData.Number_Of_Contacts_Count__c = contactProcessed;
//System.debug('archieveData.Number_Of_Contacts_Count__c-- '+archieveData.Number_Of_Contacts_Count__c);
archieveData.Number_Of_Oppt_Count__c = opportunityProcessed;
//System.debug('archieveData.Number_Of_Oppt_Count__c-- '+archieveData.Number_Of_Oppt_Count__c);
archieveData.Number_Of_Cases_Count__c = caseProcessed;
//System.debug('archieveData.Number_Of_Cases_Count__c-- '+archieveData.Number_Of_Cases_Count__c);
archieveData.Date__c = Date.today();
archivTableList.add(archieveData);
//System.debug('------archivTableList-- '+archivTableList);
}
if(cases.size()>0){
delete cases;
}
if(contacts.size()>0){
delete contacts;
}
if(opportunities.size()>0){
delete opportunities;
}
if(archivTableList.size()>0){
insert archivTableList;
}
if(accounts.size()>0){
update accounts;
}
}
global void finish(Database.BatchableContext bc){
System.debug(' Records processed --- '+bc.getJobId());
AsyncApexJob result = [SELECT Id, Status, NumberOfErrors,
JobItemsProcessed,
TotalJobItems, CreatedBy.Email
FROM AsyncApexJob
WHERE Id = :bc.getJobId()];
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[] {result.CreatedBy.Email};
mail.setToAddresses(toAddresses);
mail.setSubject('Status of Contacts,opportunities and cases batch job -- ' + result.Status);
mail.setPlainTextBody
('The batch Apex job processed ' + result.TotalJobItems +
' batches with '+ result.NumberOfErrors + ' failures.');
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
}
}
Thanks in Advance
you can make changes according to your code and then execute it.
Mark this as BEST ANSWER, if it solves your problem
I'm new to salesforce, Can you please give me complete code.Help me on this
Thank, let us know if it helps you