You need to sign in to do that
Don't have an account?
Thanigai Kumaran Balaji
For some reason my Batch class is not working but it is working when trying with normal apex class
Batch class which is not working :
global class exportobjectascsvbatch implements Database.Batchable <SObject>{
global Database.QueryLocator start (Database.BatchableContext bc)
{
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
{
query += fieldname+',';
}
query = query.removeEnd(',');
query += ' from Opportunity where lastmodifieddate = today limit 200';
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext bc, List<Opportunity> OppList)
{
try{
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String generatedCSVFile = '';
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += fieldName +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(Opportunity company: OppList){
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += company.get(fieldName)+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
//send email with generated csv file
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunitybackup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
}
catch(exception e)
{
system.debug('Exception Caught:'+e.getmessage());
}
}
global void finish(Database.BatchableContext bc)
{
}
}
Apex class which works as expected:
public class exportopp {
public static void exportopp() {
List<Opportunity> extractOpplist = new List<Opportunity>();
List<Opportunity> OpportunityList = new List<Opportunity>();
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
{
query += fieldname+',';
}
query = query.removeEnd(',');
query += ' from Opportunity where lastmodifieddate = yesterday';
system.debug(query);
List<Opportunity> OppList = database.query(query);
system.debug(opplist);
String generatedCSVFile = '';
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += fieldName +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(Opportunity company: OppList){
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += company.get(fieldName)+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunity backup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
}
}
can anyone able to check what causing the issue and also if possible please share test class for apex class
global class exportobjectascsvbatch implements Database.Batchable <SObject>{
global Database.QueryLocator start (Database.BatchableContext bc)
{
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
{
query += fieldname+',';
}
query = query.removeEnd(',');
query += ' from Opportunity where lastmodifieddate = today limit 200';
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext bc, List<Opportunity> OppList)
{
try{
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String generatedCSVFile = '';
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += fieldName +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(Opportunity company: OppList){
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += company.get(fieldName)+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
//send email with generated csv file
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunitybackup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
}
catch(exception e)
{
system.debug('Exception Caught:'+e.getmessage());
}
}
global void finish(Database.BatchableContext bc)
{
}
}
Apex class which works as expected:
public class exportopp {
public static void exportopp() {
List<Opportunity> extractOpplist = new List<Opportunity>();
List<Opportunity> OpportunityList = new List<Opportunity>();
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
{
query += fieldname+',';
}
query = query.removeEnd(',');
query += ' from Opportunity where lastmodifieddate = yesterday';
system.debug(query);
List<Opportunity> OppList = database.query(query);
system.debug(opplist);
String generatedCSVFile = '';
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += fieldName +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(Opportunity company: OppList){
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += company.get(fieldName)+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunity backup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
}
}
can anyone able to check what causing the issue and also if possible please share test class for apex class
I tried with both the logics and got the emails with the attachment which contains the records. Did you check thet your batch had Last modified date as today and normal apex had Yesterday. Do you have any opportunities modified today?
If this solution helps, Please mark it as best answer.
Thanks,