- Thanigai Kumaran Balaji
- NEWBIE
- 30 Points
- Member since 2022
-
ChatterFeed
-
0Best Answers
-
0Likes Received
-
0Likes Given
-
9Questions
-
8Replies
Unable to cover more than 45% of test coverage, test doesn't cover for loop even after condition is met
my apex class:
@RestResource(urlMapping = '/v1/UpdateFWAReferralCode/*')
global class FWAReferralCode {
@HttpPost
global static Void Updatecode(Integer updatelimit) {
RestResponse res = RestContext.response;
if (res == null) {
res = new RestResponse();
RestContext.response = res;
}
List < Account > accid = [SELECT Id, (Select id, name from assets where name = : label.BasePlanName or name = : label.PlusPlanName) FROM Account WHERE Network__c = 'CORE'
AND vlocity_cmt__Status__c = 'Active'
AND Customer_Group__c != 'Free Trial'
AND ID IN(Select Accountid from asset where name = : label.BasePlanName or name = : label.PlusPlanName) AND Id NOT IN(SELECT Account__c FROM FWA_Referral_Code__c WHERE Account__c != null) LIMIT: updatelimit];
//List<FWA_Referral_Code__c> FWAcode = [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit :updatelimit];
if (accid.size() > 0) {
system.debug(accid.size());
}
List < FWA_Referral_Code__c > FWAupdate = new List < FWA_Referral_Code__c > ();
List < ID > Responselist = new List < ID > ();
List < FWA_Referral_Code__c > FWAResponse = new List < FWA_Referral_Code__c > ();
try {
for (Account ac: accid) {
FWA_Referral_Code__c fwa = [select ID, Plan__c, Mapped_Timestamp__c, Account__c from FWA_Referral_Code__c where Account__c = NULL limit 1];
Responselist.add(fwa.id);
fwa.account__c = ac.id;
fwa.Mapped_Timestamp__c = DateTime.Now();
if (ac.assets[0].name == label.BasePlanName) {
fwa.Plan__c = label.BasePlanName;
system.debug(fwa.Plan__c);
} else if (ac.assets[0].name == label.PlusPlanName) {
fwa.Plan__c = label.PlusPlanName;
system.debug(fwa.Plan__c);
}
FWAupdate.add(fwa);
update FWAupdate;
system.debug(FWAupdate);
}
for (FWA_Referral_Code__c resp: [select ID, Account__c from FWA_Referral_Code__c where Id = : Responselist]) {
FWAResponse.add(resp);
}
if (FWAResponse.size() > 0) {
res.responseBody = Blob.valueOf(Json.serialize(FWAResponse));
system.debug(res.responseBody);
res.addHeader(Label.label_Content_Type, Label.label_application_json);
res.statusCode = 200;
system.debug(res.statusCode);
return;
}
} catch (Exception e) {
System.debug('Error: ' + e.getMessage());
}
}
}
Test class:
@isTest
Public class FWAReferralCodeTest {
Public static testMethod void FWAReferralTest() {
FWA_Referral_Code__c fwa = new FWA_Referral_Code__c(name = 'testing');
Account ac = new Account(Name = 'Thanigai testfwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE', ServiceSharingType__c = 'Group', Customer_Group__c = 'Test');
Asset ass = new asset(name = 'visible+ plan', Accountid = ac.Id);
insert fwa;
insert ass;
insert ac;
FWA_Referral_Code__c fwa1 = new FWA_Referral_Code__c(name = 'testing1');
Account ac1 = new Account(Name = 'Thanigai fwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE', ServiceSharingType__c = 'Group', Customer_Group__c = 'Test');
Asset ass1 = new asset(name = 'visible plan', Accountid = ac.Id);
insert ass1;
insert fwa1;
insert ac1;
FWA_Referral_Code__c fw = new FWA_Referral_Code__c(Account__c = ac1.id, Mapped_Timestamp__c = DateTime.Now(), Plan__c = label.BasePlanName);
FWA_Referral_Code__c fw1 = new FWA_Referral_Code__c(Account__c = ac.id, Mapped_Timestamp__c = DateTime.Now(), Plan__c = label.PlusPlanName);
insert fw;
insert fw1;
Test.startTest();
FWAReferralCode.Updatecode(1);
Test.stopTest();
}
}
@RestResource(urlMapping = '/v1/UpdateFWAReferralCode/*')
global class FWAReferralCode {
@HttpPost
global static Void Updatecode(Integer updatelimit) {
RestResponse res = RestContext.response;
if (res == null) {
res = new RestResponse();
RestContext.response = res;
}
List < Account > accid = [SELECT Id, (Select id, name from assets where name = : label.BasePlanName or name = : label.PlusPlanName) FROM Account WHERE Network__c = 'CORE'
AND vlocity_cmt__Status__c = 'Active'
AND Customer_Group__c != 'Free Trial'
AND ID IN(Select Accountid from asset where name = : label.BasePlanName or name = : label.PlusPlanName) AND Id NOT IN(SELECT Account__c FROM FWA_Referral_Code__c WHERE Account__c != null) LIMIT: updatelimit];
//List<FWA_Referral_Code__c> FWAcode = [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit :updatelimit];
if (accid.size() > 0) {
system.debug(accid.size());
}
List < FWA_Referral_Code__c > FWAupdate = new List < FWA_Referral_Code__c > ();
List < ID > Responselist = new List < ID > ();
List < FWA_Referral_Code__c > FWAResponse = new List < FWA_Referral_Code__c > ();
try {
for (Account ac: accid) {
FWA_Referral_Code__c fwa = [select ID, Plan__c, Mapped_Timestamp__c, Account__c from FWA_Referral_Code__c where Account__c = NULL limit 1];
Responselist.add(fwa.id);
fwa.account__c = ac.id;
fwa.Mapped_Timestamp__c = DateTime.Now();
if (ac.assets[0].name == label.BasePlanName) {
fwa.Plan__c = label.BasePlanName;
system.debug(fwa.Plan__c);
} else if (ac.assets[0].name == label.PlusPlanName) {
fwa.Plan__c = label.PlusPlanName;
system.debug(fwa.Plan__c);
}
FWAupdate.add(fwa);
update FWAupdate;
system.debug(FWAupdate);
}
for (FWA_Referral_Code__c resp: [select ID, Account__c from FWA_Referral_Code__c where Id = : Responselist]) {
FWAResponse.add(resp);
}
if (FWAResponse.size() > 0) {
res.responseBody = Blob.valueOf(Json.serialize(FWAResponse));
system.debug(res.responseBody);
res.addHeader(Label.label_Content_Type, Label.label_application_json);
res.statusCode = 200;
system.debug(res.statusCode);
return;
}
} catch (Exception e) {
System.debug('Error: ' + e.getMessage());
}
}
}
Test class:
@isTest
Public class FWAReferralCodeTest {
Public static testMethod void FWAReferralTest() {
FWA_Referral_Code__c fwa = new FWA_Referral_Code__c(name = 'testing');
Account ac = new Account(Name = 'Thanigai testfwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE', ServiceSharingType__c = 'Group', Customer_Group__c = 'Test');
Asset ass = new asset(name = 'visible+ plan', Accountid = ac.Id);
insert fwa;
insert ass;
insert ac;
FWA_Referral_Code__c fwa1 = new FWA_Referral_Code__c(name = 'testing1');
Account ac1 = new Account(Name = 'Thanigai fwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE', ServiceSharingType__c = 'Group', Customer_Group__c = 'Test');
Asset ass1 = new asset(name = 'visible plan', Accountid = ac.Id);
insert ass1;
insert fwa1;
insert ac1;
FWA_Referral_Code__c fw = new FWA_Referral_Code__c(Account__c = ac1.id, Mapped_Timestamp__c = DateTime.Now(), Plan__c = label.BasePlanName);
FWA_Referral_Code__c fw1 = new FWA_Referral_Code__c(Account__c = ac.id, Mapped_Timestamp__c = DateTime.Now(), Plan__c = label.PlusPlanName);
insert fw;
insert fw1;
Test.startTest();
FWAReferralCode.Updatecode(1);
Test.stopTest();
}
}
- Thanigai Kumaran Balaji
- September 28, 2022
- Like
- 0
Test coverage is only 45% even when the conditions are satisfied for the below class
Below is my apex class even after trying to cover all the conditions i am getting only 45% of test coverage.
@RestResource(urlMapping='/v1/UpdateFWAReferralCode/*') global class FWAReferralCode { @HttpPost global static Void Updatecode(Integer updatelimit){ RestResponse res = RestContext.response; if (res == null) { res = new RestResponse(); RestContext.response = res; } List<Account> accid = [SELECT Id, (Select id,name from assets where name = :label.BasePlanName or name =:label.PlusPlanName) FROM Account WHERE Network__c = 'CORE' AND vlocity_cmt__Status__c = 'Active' AND Customer_Group__c != 'Free Trial' AND ID IN (Select Accountid from asset where name = :label.BasePlanName or name =:label.PlusPlanName) AND Id NOT IN (SELECT Account__c FROM FWA_Referral_Code__c WHERE Account__c != null) LIMIT :updatelimit]; //List<FWA_Referral_Code__c> FWAcode = [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit :updatelimit]; if(accid.size() >0) { system.debug(accid.size()); } List<FWA_Referral_Code__c> FWAupdate = new List<FWA_Referral_Code__c>(); List<ID> Responselist = new List<ID>(); List<FWA_Referral_Code__c> FWAResponse = new List<FWA_Referral_Code__c>(); try{ for(Account ac: accid) { FWA_Referral_Code__c fwa= [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit 1] ; Responselist.add(fwa.id); fwa.account__c = ac.id; fwa.Mapped_Timestamp__c = DateTime.Now(); if(ac.assets[0].name == label.BasePlanName) { fwa.Plan__c = label.BasePlanName; system.debug(fwa.Plan__c); } else if (ac.assets[0].name == label.PlusPlanName) { fwa.Plan__c = label.PlusPlanName; system.debug(fwa.Plan__c); } FWAupdate.add(fwa); update FWAupdate; system.debug(FWAupdate); } for(FWA_Referral_Code__c resp: [select ID,Account__c from FWA_Referral_Code__c where Id =:Responselist]) { FWAResponse.add(resp); } if(FWAResponse.size()>0){ res.responseBody = Blob.valueOf(Json.serialize(FWAResponse)); system.debug(res.responseBody); res.addHeader(Label.label_Content_Type, Label.label_application_json); res.statusCode = 200; system.debug(res.statusCode); return; } } catch (Exception e) { System.debug('Error: ' + e.getMessage()); } } }
my test class:
@isTest Public class FWAReferralCodeTest{ Public static testMethod void FWAReferralTest(){ FWA_Referral_Code__c fwa = new FWA_Referral_Code__c(name = 'testing' ); Account ac= new Account(Name= 'Thanigai testfwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE',ServiceSharingType__c = 'Group',Customer_Group__c = 'Test' ); Asset ass = new asset(name = 'visible+ plan', Accountid = ac.Id); insert fwa; insert ass; insert ac; FWA_Referral_Code__c fwa1 = new FWA_Referral_Code__c(name = 'testing1' ); Account ac1= new Account(Name= 'Thanigai fwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE',ServiceSharingType__c = 'Group',Customer_Group__c = 'Test' ); Asset ass1 = new asset(name = 'visible plan', Accountid = ac.Id); insert ass1; insert fwa1; insert ac1; FWA_Referral_Code__c fw = new FWA_Referral_Code__c(Account__c = ac1.id,Mapped_Timestamp__c = DateTime.Now(),Plan__c =label.BasePlanName ); FWA_Referral_Code__c fw1 = new FWA_Referral_Code__c(Account__c = ac.id,Mapped_Timestamp__c = DateTime.Now(),Plan__c =label.PlusPlanName ); insert fw; insert fw1; Test.startTest(); FWAReferralCode.Updatecode(1); Test.stopTest(); } }
@RestResource(urlMapping='/v1/UpdateFWAReferralCode/*') global class FWAReferralCode { @HttpPost global static Void Updatecode(Integer updatelimit){ RestResponse res = RestContext.response; if (res == null) { res = new RestResponse(); RestContext.response = res; } List<Account> accid = [SELECT Id, (Select id,name from assets where name = :label.BasePlanName or name =:label.PlusPlanName) FROM Account WHERE Network__c = 'CORE' AND vlocity_cmt__Status__c = 'Active' AND Customer_Group__c != 'Free Trial' AND ID IN (Select Accountid from asset where name = :label.BasePlanName or name =:label.PlusPlanName) AND Id NOT IN (SELECT Account__c FROM FWA_Referral_Code__c WHERE Account__c != null) LIMIT :updatelimit]; //List<FWA_Referral_Code__c> FWAcode = [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit :updatelimit]; if(accid.size() >0) { system.debug(accid.size()); } List<FWA_Referral_Code__c> FWAupdate = new List<FWA_Referral_Code__c>(); List<ID> Responselist = new List<ID>(); List<FWA_Referral_Code__c> FWAResponse = new List<FWA_Referral_Code__c>(); try{ for(Account ac: accid) { FWA_Referral_Code__c fwa= [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit 1] ; Responselist.add(fwa.id); fwa.account__c = ac.id; fwa.Mapped_Timestamp__c = DateTime.Now(); if(ac.assets[0].name == label.BasePlanName) { fwa.Plan__c = label.BasePlanName; system.debug(fwa.Plan__c); } else if (ac.assets[0].name == label.PlusPlanName) { fwa.Plan__c = label.PlusPlanName; system.debug(fwa.Plan__c); } FWAupdate.add(fwa); update FWAupdate; system.debug(FWAupdate); } for(FWA_Referral_Code__c resp: [select ID,Account__c from FWA_Referral_Code__c where Id =:Responselist]) { FWAResponse.add(resp); } if(FWAResponse.size()>0){ res.responseBody = Blob.valueOf(Json.serialize(FWAResponse)); system.debug(res.responseBody); res.addHeader(Label.label_Content_Type, Label.label_application_json); res.statusCode = 200; system.debug(res.statusCode); return; } } catch (Exception e) { System.debug('Error: ' + e.getMessage()); } } }
my test class:
@isTest Public class FWAReferralCodeTest{ Public static testMethod void FWAReferralTest(){ FWA_Referral_Code__c fwa = new FWA_Referral_Code__c(name = 'testing' ); Account ac= new Account(Name= 'Thanigai testfwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE',ServiceSharingType__c = 'Group',Customer_Group__c = 'Test' ); Asset ass = new asset(name = 'visible+ plan', Accountid = ac.Id); insert fwa; insert ass; insert ac; FWA_Referral_Code__c fwa1 = new FWA_Referral_Code__c(name = 'testing1' ); Account ac1= new Account(Name= 'Thanigai fwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE',ServiceSharingType__c = 'Group',Customer_Group__c = 'Test' ); Asset ass1 = new asset(name = 'visible plan', Accountid = ac.Id); insert ass1; insert fwa1; insert ac1; FWA_Referral_Code__c fw = new FWA_Referral_Code__c(Account__c = ac1.id,Mapped_Timestamp__c = DateTime.Now(),Plan__c =label.BasePlanName ); FWA_Referral_Code__c fw1 = new FWA_Referral_Code__c(Account__c = ac.id,Mapped_Timestamp__c = DateTime.Now(),Plan__c =label.PlusPlanName ); insert fw; insert fw1; Test.startTest(); FWAReferralCode.Updatecode(1); Test.stopTest(); } }
- Thanigai Kumaran Balaji
- September 28, 2022
- Like
- 0
Please help me with test class for updating custom metadata and batch apex
My Apex helper class:
public class ExportObjectHelperclass implements Metadata.DeployCallback {
public void handleResult(Metadata.DeployResult result, Metadata.DeployCallbackContext context) {
if (result.status == Metadata.DeployStatus.Succeeded) {
//Success
System.debug('Success Result-' + result);
} else {
//Failed
System.debug('Failed Result-' + result);
}
}
//Update Custom Metadata record
public static void updateCustomMetadata(String metdataName, String recordDevName, String label, Map<String, Object> metadataFieldValueMap){
Metadata.CustomMetadata cMetadata = new Metadata.CustomMetadata();
cMetadata.fullName = metdataName + '.' + recordDevName;
cMetadata.label = label;
for(String key : metadataFieldValueMap.keySet()){
Metadata.CustomMetadataValue cMetadataValue = new Metadata.CustomMetadataValue();
cMetadataValue.Field = key;
cMetadataValue.Value = metadataFieldValueMap.get(key);
cMetadata.values.add(cMetadataValue);
}
Metadata.DeployContainer mdContainer = new Metadata.DeployContainer();
mdContainer.addMetadata(cMetadata);
ExportObjectHelperclass callback = new ExportObjectHelperclass();
Id jobId = Metadata.Operations.enqueueDeployment(mdContainer, callback);
}
public static String Feildnamefromuser;
public static Boolean fullbackup;
public static Boolean partialbackup;
public Static String Objectname;
public Static String Email;
public Static Boolean Backupbetweenintervals;
public Static Datetime Backupstartingfrom;
public Static Datetime BackupEnddatetime;
@InvocableMethod (Label ='call batch apex with metadata')
public static void callbatch(List<FlowInputs> request) {
Map<String, Object> metadataFieldValueMap = new Map<String, Object>();
fullbackup = request[0].Full_Object_Backup;
Feildnamefromuser = request[0].Enter_Feild_API_name_with_inbetween;
partialbackup = request[0].Partial;
Objectname = request[0].Objectname;
Email = request[0].Email;
Backupbetweenintervals = request[0].Backupbetweenintervals;
Backupstartingfrom = request[0].Backupstartingfrom;
BackupEnddatetime = request[0].BackupEnddatetime;
metadataFieldValueMap.put('Backup_between_interval__c', Backupbetweenintervals);
metadataFieldValueMap.put('Full_backup__c', fullbackup);
metadataFieldValueMap.put('Backup_from__c', Backupstartingfrom);
metadataFieldValueMap.put('Backup_till__c', BackupEnddatetime);
metadataFieldValueMap.put('Object_Name__c', Objectname);
metadataFieldValueMap.put('Email_ID__c', Email);
metadataFieldValueMap.put('Field_backup__c', partialbackup);
metadataFieldValueMap.put('Full_backup__c', Feildnamefromuser);
metadataFieldValueMap.put('Field_name_Separated_with__c', Feildnamefromuser); ExportObjectHelperclass.updateCustomMetadata('ExportCSV__mdt','Export_Object_as_CSV', 'Export Object as CSV',metadataFieldValueMap);
//Id batchInstanceId = Database.executeBatch(new exportobascsv());
ExportObjasCSV objbatch = new ExportObjasCSV();
Database.executeBatch(objbatch, 200);
}
public class FlowInputs{
@InvocableVariable
public Boolean Full_Object_Backup;
@InvocableVariable
public Boolean Partial;
@InvocableVariable
public String Enter_Feild_API_name_with_inbetween;
@InvocableVariable
public String Objectname;
@InvocableVariable
public String Email;
@InvocableVariable
public Boolean Backupbetweenintervals;
@InvocableVariable
public Datetime Backupstartingfrom;
@InvocableVariable
public Datetime BackupEnddatetime;
}
}
Batch class:
global class ExportObjAsCSV implements Database.Batchable <SObject>, Database.Stateful {
global Database.QueryLocator start (Database.BatchableContext bc)
{
ExportCSV__mdt eo = [Select Object_Name__c,Backup_between_interval__c,Field_backup__c,Full_backup__c,Field_name_Separated_with__c,Backup_from__c,Backup_till__c from ExportCSV__mdt where label = 'Export Object as CSV'];
Datetime backupfrom = eo.Backup_from__c;
Datetime backuptill = eo.Backup_till__c;
String Objectname = eo.Object_Name__c;
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
// query to return Object
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
{
query += fieldname+',';
}
query = query.removeEnd(',');
if(eo.Backup_between_interval__c == true)
{
String newbackupfrom = backupfrom.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
String newbackuptill = backuptill.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
if(!test.isRunningTest()){
query += ' from ' +Objectname+ ' where lastmodifieddate >= ' +newbackupfrom+ ' and lastmodifieddate <= ' +newbackuptill+ '';
}else{
query += ' from ' +Objectname+ '';
} }
else {
if(!test.isRunningTest()){
query += ' from ' +Objectname+ ' where lastmodifieddate = yesterday';
}else{
query += ' from ' +Objectname+ '';
}
}
return Database.getQueryLocator(query);
}
global static void execute(Database.BatchableContext bc, List<sobject> OppList)
{
// Implementing Try catch for error handling
try{
ExportCSV__mdt eo = [Select Object_Name__c,Field_backup__c,Email_ID__c,Full_backup__c,Field_name_Separated_with__c,Backup_from__c,Backup_till__c from ExportCSV__mdt where label = 'Export Object as CSV'];
String Objectname = eo.Object_Name__c;
String ObjectID = eo.ID;
String EmailID = eo.Email_ID__c;
String generatedCSVFile = '';
if(eo.Full_backup__c == true)
{
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += Fieldname +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(sObject company: OppList){
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += company.get(fieldName)+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
}else if(eo.Field_backup__c == true )
{
//Split the text in Feild name as separate lines
String Fieldfromuser = (string) eo.Field_name_Separated_with__c;
list<String> eachline = Fieldfromuser.split(' ');
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += eachline[i] +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(sobject company: OppList){
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += company.get(eachline[i])+ ',';
}
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 = '' +Objectname+ ' backup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{EmailID};
String subject = '' +Objectname+ ' backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Please find the Object backup file attached to the mail');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
//Attach the CSV to ExportObject attachments
Attachment attachment = new attachment();
attachment.Body = blob.valueOf(generatedCSVFile);
attachment.Name = '' +Objectname+ ' backup.csv';
attachment.ParentId = ObjectID;
insert attachment;
}
catch(exception e)
{
system.debug('Exception Caught:'+e.getmessage());
}
}
global void finish(Database.BatchableContext bc)
{
}
}
public class ExportObjectHelperclass implements Metadata.DeployCallback {
public void handleResult(Metadata.DeployResult result, Metadata.DeployCallbackContext context) {
if (result.status == Metadata.DeployStatus.Succeeded) {
//Success
System.debug('Success Result-' + result);
} else {
//Failed
System.debug('Failed Result-' + result);
}
}
//Update Custom Metadata record
public static void updateCustomMetadata(String metdataName, String recordDevName, String label, Map<String, Object> metadataFieldValueMap){
Metadata.CustomMetadata cMetadata = new Metadata.CustomMetadata();
cMetadata.fullName = metdataName + '.' + recordDevName;
cMetadata.label = label;
for(String key : metadataFieldValueMap.keySet()){
Metadata.CustomMetadataValue cMetadataValue = new Metadata.CustomMetadataValue();
cMetadataValue.Field = key;
cMetadataValue.Value = metadataFieldValueMap.get(key);
cMetadata.values.add(cMetadataValue);
}
Metadata.DeployContainer mdContainer = new Metadata.DeployContainer();
mdContainer.addMetadata(cMetadata);
ExportObjectHelperclass callback = new ExportObjectHelperclass();
Id jobId = Metadata.Operations.enqueueDeployment(mdContainer, callback);
}
public static String Feildnamefromuser;
public static Boolean fullbackup;
public static Boolean partialbackup;
public Static String Objectname;
public Static String Email;
public Static Boolean Backupbetweenintervals;
public Static Datetime Backupstartingfrom;
public Static Datetime BackupEnddatetime;
@InvocableMethod (Label ='call batch apex with metadata')
public static void callbatch(List<FlowInputs> request) {
Map<String, Object> metadataFieldValueMap = new Map<String, Object>();
fullbackup = request[0].Full_Object_Backup;
Feildnamefromuser = request[0].Enter_Feild_API_name_with_inbetween;
partialbackup = request[0].Partial;
Objectname = request[0].Objectname;
Email = request[0].Email;
Backupbetweenintervals = request[0].Backupbetweenintervals;
Backupstartingfrom = request[0].Backupstartingfrom;
BackupEnddatetime = request[0].BackupEnddatetime;
metadataFieldValueMap.put('Backup_between_interval__c', Backupbetweenintervals);
metadataFieldValueMap.put('Full_backup__c', fullbackup);
metadataFieldValueMap.put('Backup_from__c', Backupstartingfrom);
metadataFieldValueMap.put('Backup_till__c', BackupEnddatetime);
metadataFieldValueMap.put('Object_Name__c', Objectname);
metadataFieldValueMap.put('Email_ID__c', Email);
metadataFieldValueMap.put('Field_backup__c', partialbackup);
metadataFieldValueMap.put('Full_backup__c', Feildnamefromuser);
metadataFieldValueMap.put('Field_name_Separated_with__c', Feildnamefromuser); ExportObjectHelperclass.updateCustomMetadata('ExportCSV__mdt','Export_Object_as_CSV', 'Export Object as CSV',metadataFieldValueMap);
//Id batchInstanceId = Database.executeBatch(new exportobascsv());
ExportObjasCSV objbatch = new ExportObjasCSV();
Database.executeBatch(objbatch, 200);
}
public class FlowInputs{
@InvocableVariable
public Boolean Full_Object_Backup;
@InvocableVariable
public Boolean Partial;
@InvocableVariable
public String Enter_Feild_API_name_with_inbetween;
@InvocableVariable
public String Objectname;
@InvocableVariable
public String Email;
@InvocableVariable
public Boolean Backupbetweenintervals;
@InvocableVariable
public Datetime Backupstartingfrom;
@InvocableVariable
public Datetime BackupEnddatetime;
}
}
Batch class:
global class ExportObjAsCSV implements Database.Batchable <SObject>, Database.Stateful {
global Database.QueryLocator start (Database.BatchableContext bc)
{
ExportCSV__mdt eo = [Select Object_Name__c,Backup_between_interval__c,Field_backup__c,Full_backup__c,Field_name_Separated_with__c,Backup_from__c,Backup_till__c from ExportCSV__mdt where label = 'Export Object as CSV'];
Datetime backupfrom = eo.Backup_from__c;
Datetime backuptill = eo.Backup_till__c;
String Objectname = eo.Object_Name__c;
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
// query to return Object
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
{
query += fieldname+',';
}
query = query.removeEnd(',');
if(eo.Backup_between_interval__c == true)
{
String newbackupfrom = backupfrom.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
String newbackuptill = backuptill.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
if(!test.isRunningTest()){
query += ' from ' +Objectname+ ' where lastmodifieddate >= ' +newbackupfrom+ ' and lastmodifieddate <= ' +newbackuptill+ '';
}else{
query += ' from ' +Objectname+ '';
} }
else {
if(!test.isRunningTest()){
query += ' from ' +Objectname+ ' where lastmodifieddate = yesterday';
}else{
query += ' from ' +Objectname+ '';
}
}
return Database.getQueryLocator(query);
}
global static void execute(Database.BatchableContext bc, List<sobject> OppList)
{
// Implementing Try catch for error handling
try{
ExportCSV__mdt eo = [Select Object_Name__c,Field_backup__c,Email_ID__c,Full_backup__c,Field_name_Separated_with__c,Backup_from__c,Backup_till__c from ExportCSV__mdt where label = 'Export Object as CSV'];
String Objectname = eo.Object_Name__c;
String ObjectID = eo.ID;
String EmailID = eo.Email_ID__c;
String generatedCSVFile = '';
if(eo.Full_backup__c == true)
{
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += Fieldname +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(sObject company: OppList){
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += company.get(fieldName)+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
}else if(eo.Field_backup__c == true )
{
//Split the text in Feild name as separate lines
String Fieldfromuser = (string) eo.Field_name_Separated_with__c;
list<String> eachline = Fieldfromuser.split(' ');
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += eachline[i] +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(sobject company: OppList){
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += company.get(eachline[i])+ ',';
}
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 = '' +Objectname+ ' backup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{EmailID};
String subject = '' +Objectname+ ' backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Please find the Object backup file attached to the mail');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
//Attach the CSV to ExportObject attachments
Attachment attachment = new attachment();
attachment.Body = blob.valueOf(generatedCSVFile);
attachment.Name = '' +Objectname+ ' backup.csv';
attachment.ParentId = ObjectID;
insert attachment;
}
catch(exception e)
{
system.debug('Exception Caught:'+e.getmessage());
}
}
global void finish(Database.BatchableContext bc)
{
}
}
- Thanigai Kumaran Balaji
- April 14, 2022
- Like
- 0
I am stuck with test class for below batch apex that use input from flow
My Batch apex:
public class exportobascsv implements Database.Batchable <SObject>, Database.Stateful {
public Final String Feildnamefromuser;
public Final Boolean fullbackup;
public Final Boolean partialbackup;
public Final String Objectname;
public Final String Email;
public Final Boolean Backupbetweenintervals;
public Final Datetime Backupstartingfrom;
public Final Datetime BackupEnddatetime;
public exportobascsv(Boolean full,String Feildname,Boolean partial,String obj, String Emailid, Boolean intervals, Datetime start, Datetime endtime)
{
fullbackup = full;
Feildnamefromuser = Feildname;
partialbackup = partial;
Objectname = obj;
Email = Emailid;
Backupbetweenintervals = intervals;
Backupstartingfrom = start;
BackupEnddatetime = endtime;
}
public Database.QueryLocator start (Database.BatchableContext bc)
{
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
// query to return Object
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
{
query += fieldname+',';
}
query = query.removeEnd(',');
if(Backupbetweenintervals == true)
{
String newbackupfrom = Backupstartingfrom.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
String newbackuptill = BackupEnddatetime.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
if(!test.isRunningTest()){
query += ' from ' +Objectname+ ' where lastmodifieddate >= ' +newbackupfrom+ ' and lastmodifieddate <= ' +newbackuptill+ '';
}else{
query += ' from ' +Objectname+ '';
} }
else {
if(!test.isRunningTest()){
query += ' from ' +Objectname+ ' where lastmodifieddate = yesterday';
}else{
query += ' from ' +Objectname+ '';
}
}
return Database.getQueryLocator(query);
}
public void execute(Database.BatchableContext bc, List<sobject> OppList)
{
try{
String generatedCSVFile = '';
if(fullbackup == true)
{
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += Fieldname +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(sObject company: OppList){
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += company.get(fieldName)+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
}else if(partialbackup == true )
{
//Split the text in Feild name as separate lines
list<String> eachline = Feildnamefromuser.split(' ');
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += eachline[i] +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(sobject company: OppList){
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += company.get(eachline[i])+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
}
//send email with generated csv file
String Email1= Email;
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = '' +Objectname+ ' backup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{Email1};
String subject = '' +Objectname+ ' backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Please find the Object backup file attached to the mail');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
}
catch(exception e)
{
system.debug('Exception Caught:'+e.getmessage());
}
}
public void finish(Database.BatchableContext bc)
{
}
}
My Helper Apex class:
public class ExportObjectHelperclass {
public static String Feildnamefromuser;
public static Boolean fullbackup;
public static Boolean partialbackup;
public Static String Objectname;
public Static String Email;
public Static Boolean Backupbetweenintervals;
public Static Datetime Backupstartingfrom;
public Static Datetime BackupEnddatetime;
@InvocableMethod (Label ='call batch apex')
public static void callbatch(List<FlowInputs> request) {
fullbackup = request[0].Full_Object_Backup;
Feildnamefromuser = request[0].Enter_Feild_API_name_with_inbetween;
partialbackup = request[0].Partial;
Objectname = request[0].Objectname;
Email = request[0].Email;
Backupbetweenintervals = request[0].Backupbetweenintervals;
Backupstartingfrom = request[0].Backupstartingfrom;
BackupEnddatetime = request[0].BackupEnddatetime;
Id batchInstanceId = Database.executeBatch(new exportobascsv(fullbackup, Feildnamefromuser, partialbackup,Objectname,Email,Backupbetweenintervals,Backupstartingfrom,BackupEnddatetime));
//exportobascsv objbatch = new exportobascsv();
//Database.executeBatch(objbatch, 200);
}
public class FlowInputs{
@InvocableVariable
public Boolean Full_Object_Backup;
@InvocableVariable
public Boolean Partial;
@InvocableVariable
public String Enter_Feild_API_name_with_inbetween;
@InvocableVariable
public String Objectname;
@InvocableVariable
public String Email;
@InvocableVariable
public Boolean Backupbetweenintervals;
@InvocableVariable
public Datetime Backupstartingfrom;
@InvocableVariable
public Datetime BackupEnddatetime;
}
}
My Test class which my helper class has 100% and batch class has 16%
@isTest
public Static Void unitTest1(){
Account Acc = New Account();
Acc.Name = 'Test Account';
acc.Region__c = 'EMEA';
Insert Acc;
Opportunity Opp = new Opportunity();
Opp.Name = 'Test Opportunity';
Opp.AccountId = Acc.Id;
Opp.CloseDate =System.today();
Opp.StageName = 'Closed Won';
Insert Opp;
Export_Object_as_CSV__c csv= new Export_Object_as_CSV__c();
//csv.name='sample';
csv.Field_backup__c=true;
csv.Field_name_Separated_with__c='Name';
csv.Backup_between_interval__c = true;
csv.Backup_from__c = System.today();
csv.Backup_till__c = System.today() + 5;
csv.Name = 'Account';
csv.Email_ID__c = 'thanigai.k.balaji@apisero.com';
insert csv;
ExportObjectHelperclass.FlowInputs fi = new ExportObjectHelperclass.FlowInputs();
fi.Enter_Feild_API_name_with_inbetween = 'name';
fi.Full_Object_Backup = true;
fi.Partial = false;
test.startTest();
ExportObjectHelperclass.callbatch(new List<ExportObjectHelperclass.FlowInputs>{fi});
exportobascsv cs=new exportobascsv(true, 'name', false, 'Account', 'thanigai.k.balaji@apisero.com', false, System.today(), System.today()+5);
Id batchId = Database.executeBatch(cs);
test.stopTest();
}
}
public class exportobascsv implements Database.Batchable <SObject>, Database.Stateful {
public Final String Feildnamefromuser;
public Final Boolean fullbackup;
public Final Boolean partialbackup;
public Final String Objectname;
public Final String Email;
public Final Boolean Backupbetweenintervals;
public Final Datetime Backupstartingfrom;
public Final Datetime BackupEnddatetime;
public exportobascsv(Boolean full,String Feildname,Boolean partial,String obj, String Emailid, Boolean intervals, Datetime start, Datetime endtime)
{
fullbackup = full;
Feildnamefromuser = Feildname;
partialbackup = partial;
Objectname = obj;
Email = Emailid;
Backupbetweenintervals = intervals;
Backupstartingfrom = start;
BackupEnddatetime = endtime;
}
public Database.QueryLocator start (Database.BatchableContext bc)
{
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
// query to return Object
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
{
query += fieldname+',';
}
query = query.removeEnd(',');
if(Backupbetweenintervals == true)
{
String newbackupfrom = Backupstartingfrom.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
String newbackuptill = BackupEnddatetime.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
if(!test.isRunningTest()){
query += ' from ' +Objectname+ ' where lastmodifieddate >= ' +newbackupfrom+ ' and lastmodifieddate <= ' +newbackuptill+ '';
}else{
query += ' from ' +Objectname+ '';
} }
else {
if(!test.isRunningTest()){
query += ' from ' +Objectname+ ' where lastmodifieddate = yesterday';
}else{
query += ' from ' +Objectname+ '';
}
}
return Database.getQueryLocator(query);
}
public void execute(Database.BatchableContext bc, List<sobject> OppList)
{
try{
String generatedCSVFile = '';
if(fullbackup == true)
{
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += Fieldname +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(sObject company: OppList){
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += company.get(fieldName)+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
}else if(partialbackup == true )
{
//Split the text in Feild name as separate lines
list<String> eachline = Feildnamefromuser.split(' ');
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += eachline[i] +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(sobject company: OppList){
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += company.get(eachline[i])+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
}
//send email with generated csv file
String Email1= Email;
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = '' +Objectname+ ' backup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{Email1};
String subject = '' +Objectname+ ' backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Please find the Object backup file attached to the mail');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
}
catch(exception e)
{
system.debug('Exception Caught:'+e.getmessage());
}
}
public void finish(Database.BatchableContext bc)
{
}
}
My Helper Apex class:
public class ExportObjectHelperclass {
public static String Feildnamefromuser;
public static Boolean fullbackup;
public static Boolean partialbackup;
public Static String Objectname;
public Static String Email;
public Static Boolean Backupbetweenintervals;
public Static Datetime Backupstartingfrom;
public Static Datetime BackupEnddatetime;
@InvocableMethod (Label ='call batch apex')
public static void callbatch(List<FlowInputs> request) {
fullbackup = request[0].Full_Object_Backup;
Feildnamefromuser = request[0].Enter_Feild_API_name_with_inbetween;
partialbackup = request[0].Partial;
Objectname = request[0].Objectname;
Email = request[0].Email;
Backupbetweenintervals = request[0].Backupbetweenintervals;
Backupstartingfrom = request[0].Backupstartingfrom;
BackupEnddatetime = request[0].BackupEnddatetime;
Id batchInstanceId = Database.executeBatch(new exportobascsv(fullbackup, Feildnamefromuser, partialbackup,Objectname,Email,Backupbetweenintervals,Backupstartingfrom,BackupEnddatetime));
//exportobascsv objbatch = new exportobascsv();
//Database.executeBatch(objbatch, 200);
}
public class FlowInputs{
@InvocableVariable
public Boolean Full_Object_Backup;
@InvocableVariable
public Boolean Partial;
@InvocableVariable
public String Enter_Feild_API_name_with_inbetween;
@InvocableVariable
public String Objectname;
@InvocableVariable
public String Email;
@InvocableVariable
public Boolean Backupbetweenintervals;
@InvocableVariable
public Datetime Backupstartingfrom;
@InvocableVariable
public Datetime BackupEnddatetime;
}
}
My Test class which my helper class has 100% and batch class has 16%
@isTest
public Static Void unitTest1(){
Account Acc = New Account();
Acc.Name = 'Test Account';
acc.Region__c = 'EMEA';
Insert Acc;
Opportunity Opp = new Opportunity();
Opp.Name = 'Test Opportunity';
Opp.AccountId = Acc.Id;
Opp.CloseDate =System.today();
Opp.StageName = 'Closed Won';
Insert Opp;
Export_Object_as_CSV__c csv= new Export_Object_as_CSV__c();
//csv.name='sample';
csv.Field_backup__c=true;
csv.Field_name_Separated_with__c='Name';
csv.Backup_between_interval__c = true;
csv.Backup_from__c = System.today();
csv.Backup_till__c = System.today() + 5;
csv.Name = 'Account';
csv.Email_ID__c = 'thanigai.k.balaji@apisero.com';
insert csv;
ExportObjectHelperclass.FlowInputs fi = new ExportObjectHelperclass.FlowInputs();
fi.Enter_Feild_API_name_with_inbetween = 'name';
fi.Full_Object_Backup = true;
fi.Partial = false;
test.startTest();
ExportObjectHelperclass.callbatch(new List<ExportObjectHelperclass.FlowInputs>{fi});
exportobascsv cs=new exportobascsv(true, 'name', false, 'Account', 'thanigai.k.balaji@apisero.com', false, System.today(), System.today()+5);
Id batchId = Database.executeBatch(cs);
test.stopTest();
}
}
- Thanigai Kumaran Balaji
- April 13, 2022
- Like
- 0
Please help me with test class for below batch apex i am getting only 26%
global class ExportObjectAsCSV implements Database.Batchable <SObject>, Database.Stateful {
@InvocableMethod (Label ='call batch apex')
public static void callbatch()
{
ExportObjectAsCSV EC = new ExportObjectAsCSV();
Id batchId = Database.executeBatch(EC,200);
}
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(',');
if(!test.isRunningTest()){
query += ' from Opportunity where lastmodifieddate <= yesterday';
}else{
query += ' from Opportunity';
}
return Database.getQueryLocator(query);
}
global static void execute(Database.BatchableContext bc, List<Opportunity> OppList)
{
try{
Export_Object_as_CSV__c eo = [select name,Field_backup__c,Full_backup__c,Field_name_Separated_with__c from Export_Object_as_CSV__c order by createddate DESC limit 1];
String generatedCSVFile = '';
if(eo.Full_backup__c == true)
{
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
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';
}
}else if(eo.Field_backup__c == true )
{
String Fieldfromuser = (string) eo.Field_name_Separated_with__c;
list<String> eachline = Fieldfromuser.split(' ');
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += eachline[i] +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(Opportunity company: OppList){
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += company.get(eachline[i])+ ',';
}
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)
{
}
}
Test class i have used:
@isTest
public class OpportunityExportBatchTest {
@isTest
public Static Void unitTest(){
Account Acc = New Account();
Acc.Name = 'Test Account';
acc.Region__c = 'EMEA';
Insert Acc;
Opportunity Opp = new Opportunity();
Opp.Name = 'Test Opportunity';
Opp.AccountId = Acc.Id;
Opp.CloseDate =System.today();
Opp.StageName = 'Closed Won';
Insert Opp;
test.startTest();
ExportObjectAsCSV lp = new ExportObjectAsCSV();
Id batchId = Database.executeBatch(lp);
test.stopTest();
}
}
@InvocableMethod (Label ='call batch apex')
public static void callbatch()
{
ExportObjectAsCSV EC = new ExportObjectAsCSV();
Id batchId = Database.executeBatch(EC,200);
}
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(',');
if(!test.isRunningTest()){
query += ' from Opportunity where lastmodifieddate <= yesterday';
}else{
query += ' from Opportunity';
}
return Database.getQueryLocator(query);
}
global static void execute(Database.BatchableContext bc, List<Opportunity> OppList)
{
try{
Export_Object_as_CSV__c eo = [select name,Field_backup__c,Full_backup__c,Field_name_Separated_with__c from Export_Object_as_CSV__c order by createddate DESC limit 1];
String generatedCSVFile = '';
if(eo.Full_backup__c == true)
{
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
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';
}
}else if(eo.Field_backup__c == true )
{
String Fieldfromuser = (string) eo.Field_name_Separated_with__c;
list<String> eachline = Fieldfromuser.split(' ');
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += eachline[i] +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(Opportunity company: OppList){
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += company.get(eachline[i])+ ',';
}
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)
{
}
}
Test class i have used:
@isTest
public class OpportunityExportBatchTest {
@isTest
public Static Void unitTest(){
Account Acc = New Account();
Acc.Name = 'Test Account';
acc.Region__c = 'EMEA';
Insert Acc;
Opportunity Opp = new Opportunity();
Opp.Name = 'Test Opportunity';
Opp.AccountId = Acc.Id;
Opp.CloseDate =System.today();
Opp.StageName = 'Closed Won';
Insert Opp;
test.startTest();
ExportObjectAsCSV lp = new ExportObjectAsCSV();
Id batchId = Database.executeBatch(lp);
test.stopTest();
}
}
- Thanigai Kumaran Balaji
- April 12, 2022
- Like
- 0
trying to get input from screen flow to batch apex
I have been trying to get 3 input from Screen flow and pass the values from screenflow to batch apex
Below is my Batch apex:
Here i am unable to pass the 2 Boolean and one String from flow to my batch apex inside Execute method, Please suggest how i can acheive the same
global class ExportObjectAsCSV implements Database.Batchable <SObject>{
@InvocableMethod (Label ='call batch apex')
public static void callbatch() {
Id jobID = database.executeBatch(new ExportObjectAsCSV());
}
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(',');
if(!test.isRunningTest()){
query += ' from Opportunity where lastmodifieddate = yesterday';
}else{
query += ' from Opportunity';
}
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)
{
}
}
Below is my Batch apex:
Here i am unable to pass the 2 Boolean and one String from flow to my batch apex inside Execute method, Please suggest how i can acheive the same
global class ExportObjectAsCSV implements Database.Batchable <SObject>{
@InvocableMethod (Label ='call batch apex')
public static void callbatch() {
Id jobID = database.executeBatch(new ExportObjectAsCSV());
}
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(',');
if(!test.isRunningTest()){
query += ' from Opportunity where lastmodifieddate = yesterday';
}else{
query += ' from Opportunity';
}
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)
{
}
}
- Thanigai Kumaran Balaji
- April 12, 2022
- Like
- 0
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
- Thanigai Kumaran Balaji
- April 11, 2022
- Like
- 0
Help with test class for exporting object details as CSV file
Please help me with test case for below batch apex
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';
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)
{
}
}
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';
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)
{
}
}
- Thanigai Kumaran Balaji
- April 11, 2022
- Like
- 0
How to write a test class for exporting object details as CSV file
I have created a batch apex but unable to write test class for the same.
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 = yesterday';
system.debug(query);
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)
{
}
}
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 = yesterday';
system.debug(query);
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)
{
}
}
- Thanigai Kumaran Balaji
- April 11, 2022
- Like
- 0
Test coverage is only 45% even when the conditions are satisfied for the below class
Below is my apex class even after trying to cover all the conditions i am getting only 45% of test coverage.
@RestResource(urlMapping='/v1/UpdateFWAReferralCode/*') global class FWAReferralCode { @HttpPost global static Void Updatecode(Integer updatelimit){ RestResponse res = RestContext.response; if (res == null) { res = new RestResponse(); RestContext.response = res; } List<Account> accid = [SELECT Id, (Select id,name from assets where name = :label.BasePlanName or name =:label.PlusPlanName) FROM Account WHERE Network__c = 'CORE' AND vlocity_cmt__Status__c = 'Active' AND Customer_Group__c != 'Free Trial' AND ID IN (Select Accountid from asset where name = :label.BasePlanName or name =:label.PlusPlanName) AND Id NOT IN (SELECT Account__c FROM FWA_Referral_Code__c WHERE Account__c != null) LIMIT :updatelimit]; //List<FWA_Referral_Code__c> FWAcode = [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit :updatelimit]; if(accid.size() >0) { system.debug(accid.size()); } List<FWA_Referral_Code__c> FWAupdate = new List<FWA_Referral_Code__c>(); List<ID> Responselist = new List<ID>(); List<FWA_Referral_Code__c> FWAResponse = new List<FWA_Referral_Code__c>(); try{ for(Account ac: accid) { FWA_Referral_Code__c fwa= [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit 1] ; Responselist.add(fwa.id); fwa.account__c = ac.id; fwa.Mapped_Timestamp__c = DateTime.Now(); if(ac.assets[0].name == label.BasePlanName) { fwa.Plan__c = label.BasePlanName; system.debug(fwa.Plan__c); } else if (ac.assets[0].name == label.PlusPlanName) { fwa.Plan__c = label.PlusPlanName; system.debug(fwa.Plan__c); } FWAupdate.add(fwa); update FWAupdate; system.debug(FWAupdate); } for(FWA_Referral_Code__c resp: [select ID,Account__c from FWA_Referral_Code__c where Id =:Responselist]) { FWAResponse.add(resp); } if(FWAResponse.size()>0){ res.responseBody = Blob.valueOf(Json.serialize(FWAResponse)); system.debug(res.responseBody); res.addHeader(Label.label_Content_Type, Label.label_application_json); res.statusCode = 200; system.debug(res.statusCode); return; } } catch (Exception e) { System.debug('Error: ' + e.getMessage()); } } }
my test class:
@isTest Public class FWAReferralCodeTest{ Public static testMethod void FWAReferralTest(){ FWA_Referral_Code__c fwa = new FWA_Referral_Code__c(name = 'testing' ); Account ac= new Account(Name= 'Thanigai testfwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE',ServiceSharingType__c = 'Group',Customer_Group__c = 'Test' ); Asset ass = new asset(name = 'visible+ plan', Accountid = ac.Id); insert fwa; insert ass; insert ac; FWA_Referral_Code__c fwa1 = new FWA_Referral_Code__c(name = 'testing1' ); Account ac1= new Account(Name= 'Thanigai fwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE',ServiceSharingType__c = 'Group',Customer_Group__c = 'Test' ); Asset ass1 = new asset(name = 'visible plan', Accountid = ac.Id); insert ass1; insert fwa1; insert ac1; FWA_Referral_Code__c fw = new FWA_Referral_Code__c(Account__c = ac1.id,Mapped_Timestamp__c = DateTime.Now(),Plan__c =label.BasePlanName ); FWA_Referral_Code__c fw1 = new FWA_Referral_Code__c(Account__c = ac.id,Mapped_Timestamp__c = DateTime.Now(),Plan__c =label.PlusPlanName ); insert fw; insert fw1; Test.startTest(); FWAReferralCode.Updatecode(1); Test.stopTest(); } }
@RestResource(urlMapping='/v1/UpdateFWAReferralCode/*') global class FWAReferralCode { @HttpPost global static Void Updatecode(Integer updatelimit){ RestResponse res = RestContext.response; if (res == null) { res = new RestResponse(); RestContext.response = res; } List<Account> accid = [SELECT Id, (Select id,name from assets where name = :label.BasePlanName or name =:label.PlusPlanName) FROM Account WHERE Network__c = 'CORE' AND vlocity_cmt__Status__c = 'Active' AND Customer_Group__c != 'Free Trial' AND ID IN (Select Accountid from asset where name = :label.BasePlanName or name =:label.PlusPlanName) AND Id NOT IN (SELECT Account__c FROM FWA_Referral_Code__c WHERE Account__c != null) LIMIT :updatelimit]; //List<FWA_Referral_Code__c> FWAcode = [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit :updatelimit]; if(accid.size() >0) { system.debug(accid.size()); } List<FWA_Referral_Code__c> FWAupdate = new List<FWA_Referral_Code__c>(); List<ID> Responselist = new List<ID>(); List<FWA_Referral_Code__c> FWAResponse = new List<FWA_Referral_Code__c>(); try{ for(Account ac: accid) { FWA_Referral_Code__c fwa= [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit 1] ; Responselist.add(fwa.id); fwa.account__c = ac.id; fwa.Mapped_Timestamp__c = DateTime.Now(); if(ac.assets[0].name == label.BasePlanName) { fwa.Plan__c = label.BasePlanName; system.debug(fwa.Plan__c); } else if (ac.assets[0].name == label.PlusPlanName) { fwa.Plan__c = label.PlusPlanName; system.debug(fwa.Plan__c); } FWAupdate.add(fwa); update FWAupdate; system.debug(FWAupdate); } for(FWA_Referral_Code__c resp: [select ID,Account__c from FWA_Referral_Code__c where Id =:Responselist]) { FWAResponse.add(resp); } if(FWAResponse.size()>0){ res.responseBody = Blob.valueOf(Json.serialize(FWAResponse)); system.debug(res.responseBody); res.addHeader(Label.label_Content_Type, Label.label_application_json); res.statusCode = 200; system.debug(res.statusCode); return; } } catch (Exception e) { System.debug('Error: ' + e.getMessage()); } } }
my test class:
@isTest Public class FWAReferralCodeTest{ Public static testMethod void FWAReferralTest(){ FWA_Referral_Code__c fwa = new FWA_Referral_Code__c(name = 'testing' ); Account ac= new Account(Name= 'Thanigai testfwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE',ServiceSharingType__c = 'Group',Customer_Group__c = 'Test' ); Asset ass = new asset(name = 'visible+ plan', Accountid = ac.Id); insert fwa; insert ass; insert ac; FWA_Referral_Code__c fwa1 = new FWA_Referral_Code__c(name = 'testing1' ); Account ac1= new Account(Name= 'Thanigai fwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE',ServiceSharingType__c = 'Group',Customer_Group__c = 'Test' ); Asset ass1 = new asset(name = 'visible plan', Accountid = ac.Id); insert ass1; insert fwa1; insert ac1; FWA_Referral_Code__c fw = new FWA_Referral_Code__c(Account__c = ac1.id,Mapped_Timestamp__c = DateTime.Now(),Plan__c =label.BasePlanName ); FWA_Referral_Code__c fw1 = new FWA_Referral_Code__c(Account__c = ac.id,Mapped_Timestamp__c = DateTime.Now(),Plan__c =label.PlusPlanName ); insert fw; insert fw1; Test.startTest(); FWAReferralCode.Updatecode(1); Test.stopTest(); } }
- Thanigai Kumaran Balaji
- September 28, 2022
- Like
- 0
I am stuck with test class for below batch apex that use input from flow
My Batch apex:
public class exportobascsv implements Database.Batchable <SObject>, Database.Stateful {
public Final String Feildnamefromuser;
public Final Boolean fullbackup;
public Final Boolean partialbackup;
public Final String Objectname;
public Final String Email;
public Final Boolean Backupbetweenintervals;
public Final Datetime Backupstartingfrom;
public Final Datetime BackupEnddatetime;
public exportobascsv(Boolean full,String Feildname,Boolean partial,String obj, String Emailid, Boolean intervals, Datetime start, Datetime endtime)
{
fullbackup = full;
Feildnamefromuser = Feildname;
partialbackup = partial;
Objectname = obj;
Email = Emailid;
Backupbetweenintervals = intervals;
Backupstartingfrom = start;
BackupEnddatetime = endtime;
}
public Database.QueryLocator start (Database.BatchableContext bc)
{
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
// query to return Object
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
{
query += fieldname+',';
}
query = query.removeEnd(',');
if(Backupbetweenintervals == true)
{
String newbackupfrom = Backupstartingfrom.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
String newbackuptill = BackupEnddatetime.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
if(!test.isRunningTest()){
query += ' from ' +Objectname+ ' where lastmodifieddate >= ' +newbackupfrom+ ' and lastmodifieddate <= ' +newbackuptill+ '';
}else{
query += ' from ' +Objectname+ '';
} }
else {
if(!test.isRunningTest()){
query += ' from ' +Objectname+ ' where lastmodifieddate = yesterday';
}else{
query += ' from ' +Objectname+ '';
}
}
return Database.getQueryLocator(query);
}
public void execute(Database.BatchableContext bc, List<sobject> OppList)
{
try{
String generatedCSVFile = '';
if(fullbackup == true)
{
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += Fieldname +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(sObject company: OppList){
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += company.get(fieldName)+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
}else if(partialbackup == true )
{
//Split the text in Feild name as separate lines
list<String> eachline = Feildnamefromuser.split(' ');
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += eachline[i] +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(sobject company: OppList){
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += company.get(eachline[i])+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
}
//send email with generated csv file
String Email1= Email;
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = '' +Objectname+ ' backup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{Email1};
String subject = '' +Objectname+ ' backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Please find the Object backup file attached to the mail');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
}
catch(exception e)
{
system.debug('Exception Caught:'+e.getmessage());
}
}
public void finish(Database.BatchableContext bc)
{
}
}
My Helper Apex class:
public class ExportObjectHelperclass {
public static String Feildnamefromuser;
public static Boolean fullbackup;
public static Boolean partialbackup;
public Static String Objectname;
public Static String Email;
public Static Boolean Backupbetweenintervals;
public Static Datetime Backupstartingfrom;
public Static Datetime BackupEnddatetime;
@InvocableMethod (Label ='call batch apex')
public static void callbatch(List<FlowInputs> request) {
fullbackup = request[0].Full_Object_Backup;
Feildnamefromuser = request[0].Enter_Feild_API_name_with_inbetween;
partialbackup = request[0].Partial;
Objectname = request[0].Objectname;
Email = request[0].Email;
Backupbetweenintervals = request[0].Backupbetweenintervals;
Backupstartingfrom = request[0].Backupstartingfrom;
BackupEnddatetime = request[0].BackupEnddatetime;
Id batchInstanceId = Database.executeBatch(new exportobascsv(fullbackup, Feildnamefromuser, partialbackup,Objectname,Email,Backupbetweenintervals,Backupstartingfrom,BackupEnddatetime));
//exportobascsv objbatch = new exportobascsv();
//Database.executeBatch(objbatch, 200);
}
public class FlowInputs{
@InvocableVariable
public Boolean Full_Object_Backup;
@InvocableVariable
public Boolean Partial;
@InvocableVariable
public String Enter_Feild_API_name_with_inbetween;
@InvocableVariable
public String Objectname;
@InvocableVariable
public String Email;
@InvocableVariable
public Boolean Backupbetweenintervals;
@InvocableVariable
public Datetime Backupstartingfrom;
@InvocableVariable
public Datetime BackupEnddatetime;
}
}
My Test class which my helper class has 100% and batch class has 16%
@isTest
public Static Void unitTest1(){
Account Acc = New Account();
Acc.Name = 'Test Account';
acc.Region__c = 'EMEA';
Insert Acc;
Opportunity Opp = new Opportunity();
Opp.Name = 'Test Opportunity';
Opp.AccountId = Acc.Id;
Opp.CloseDate =System.today();
Opp.StageName = 'Closed Won';
Insert Opp;
Export_Object_as_CSV__c csv= new Export_Object_as_CSV__c();
//csv.name='sample';
csv.Field_backup__c=true;
csv.Field_name_Separated_with__c='Name';
csv.Backup_between_interval__c = true;
csv.Backup_from__c = System.today();
csv.Backup_till__c = System.today() + 5;
csv.Name = 'Account';
csv.Email_ID__c = 'thanigai.k.balaji@apisero.com';
insert csv;
ExportObjectHelperclass.FlowInputs fi = new ExportObjectHelperclass.FlowInputs();
fi.Enter_Feild_API_name_with_inbetween = 'name';
fi.Full_Object_Backup = true;
fi.Partial = false;
test.startTest();
ExportObjectHelperclass.callbatch(new List<ExportObjectHelperclass.FlowInputs>{fi});
exportobascsv cs=new exportobascsv(true, 'name', false, 'Account', 'thanigai.k.balaji@apisero.com', false, System.today(), System.today()+5);
Id batchId = Database.executeBatch(cs);
test.stopTest();
}
}
public class exportobascsv implements Database.Batchable <SObject>, Database.Stateful {
public Final String Feildnamefromuser;
public Final Boolean fullbackup;
public Final Boolean partialbackup;
public Final String Objectname;
public Final String Email;
public Final Boolean Backupbetweenintervals;
public Final Datetime Backupstartingfrom;
public Final Datetime BackupEnddatetime;
public exportobascsv(Boolean full,String Feildname,Boolean partial,String obj, String Emailid, Boolean intervals, Datetime start, Datetime endtime)
{
fullbackup = full;
Feildnamefromuser = Feildname;
partialbackup = partial;
Objectname = obj;
Email = Emailid;
Backupbetweenintervals = intervals;
Backupstartingfrom = start;
BackupEnddatetime = endtime;
}
public Database.QueryLocator start (Database.BatchableContext bc)
{
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
// query to return Object
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
{
query += fieldname+',';
}
query = query.removeEnd(',');
if(Backupbetweenintervals == true)
{
String newbackupfrom = Backupstartingfrom.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
String newbackuptill = BackupEnddatetime.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
if(!test.isRunningTest()){
query += ' from ' +Objectname+ ' where lastmodifieddate >= ' +newbackupfrom+ ' and lastmodifieddate <= ' +newbackuptill+ '';
}else{
query += ' from ' +Objectname+ '';
} }
else {
if(!test.isRunningTest()){
query += ' from ' +Objectname+ ' where lastmodifieddate = yesterday';
}else{
query += ' from ' +Objectname+ '';
}
}
return Database.getQueryLocator(query);
}
public void execute(Database.BatchableContext bc, List<sobject> OppList)
{
try{
String generatedCSVFile = '';
if(fullbackup == true)
{
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += Fieldname +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(sObject company: OppList){
for(String fieldName : fieldMap.keyset() )
{
generatedCSVFile += company.get(fieldName)+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
}else if(partialbackup == true )
{
//Split the text in Feild name as separate lines
list<String> eachline = Feildnamefromuser.split(' ');
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += eachline[i] +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(sobject company: OppList){
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += company.get(eachline[i])+ ',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
}
}
//send email with generated csv file
String Email1= Email;
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = '' +Objectname+ ' backup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{Email1};
String subject = '' +Objectname+ ' backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Please find the Object backup file attached to the mail');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
}
catch(exception e)
{
system.debug('Exception Caught:'+e.getmessage());
}
}
public void finish(Database.BatchableContext bc)
{
}
}
My Helper Apex class:
public class ExportObjectHelperclass {
public static String Feildnamefromuser;
public static Boolean fullbackup;
public static Boolean partialbackup;
public Static String Objectname;
public Static String Email;
public Static Boolean Backupbetweenintervals;
public Static Datetime Backupstartingfrom;
public Static Datetime BackupEnddatetime;
@InvocableMethod (Label ='call batch apex')
public static void callbatch(List<FlowInputs> request) {
fullbackup = request[0].Full_Object_Backup;
Feildnamefromuser = request[0].Enter_Feild_API_name_with_inbetween;
partialbackup = request[0].Partial;
Objectname = request[0].Objectname;
Email = request[0].Email;
Backupbetweenintervals = request[0].Backupbetweenintervals;
Backupstartingfrom = request[0].Backupstartingfrom;
BackupEnddatetime = request[0].BackupEnddatetime;
Id batchInstanceId = Database.executeBatch(new exportobascsv(fullbackup, Feildnamefromuser, partialbackup,Objectname,Email,Backupbetweenintervals,Backupstartingfrom,BackupEnddatetime));
//exportobascsv objbatch = new exportobascsv();
//Database.executeBatch(objbatch, 200);
}
public class FlowInputs{
@InvocableVariable
public Boolean Full_Object_Backup;
@InvocableVariable
public Boolean Partial;
@InvocableVariable
public String Enter_Feild_API_name_with_inbetween;
@InvocableVariable
public String Objectname;
@InvocableVariable
public String Email;
@InvocableVariable
public Boolean Backupbetweenintervals;
@InvocableVariable
public Datetime Backupstartingfrom;
@InvocableVariable
public Datetime BackupEnddatetime;
}
}
My Test class which my helper class has 100% and batch class has 16%
@isTest
public Static Void unitTest1(){
Account Acc = New Account();
Acc.Name = 'Test Account';
acc.Region__c = 'EMEA';
Insert Acc;
Opportunity Opp = new Opportunity();
Opp.Name = 'Test Opportunity';
Opp.AccountId = Acc.Id;
Opp.CloseDate =System.today();
Opp.StageName = 'Closed Won';
Insert Opp;
Export_Object_as_CSV__c csv= new Export_Object_as_CSV__c();
//csv.name='sample';
csv.Field_backup__c=true;
csv.Field_name_Separated_with__c='Name';
csv.Backup_between_interval__c = true;
csv.Backup_from__c = System.today();
csv.Backup_till__c = System.today() + 5;
csv.Name = 'Account';
csv.Email_ID__c = 'thanigai.k.balaji@apisero.com';
insert csv;
ExportObjectHelperclass.FlowInputs fi = new ExportObjectHelperclass.FlowInputs();
fi.Enter_Feild_API_name_with_inbetween = 'name';
fi.Full_Object_Backup = true;
fi.Partial = false;
test.startTest();
ExportObjectHelperclass.callbatch(new List<ExportObjectHelperclass.FlowInputs>{fi});
exportobascsv cs=new exportobascsv(true, 'name', false, 'Account', 'thanigai.k.balaji@apisero.com', false, System.today(), System.today()+5);
Id batchId = Database.executeBatch(cs);
test.stopTest();
}
}
- Thanigai Kumaran Balaji
- April 13, 2022
- Like
- 0
Please help me with test class for below batch apex i am getting only 26%
global class ExportObjectAsCSV implements Database.Batchable <SObject>, Database.Stateful {
@InvocableMethod (Label ='call batch apex')
public static void callbatch()
{
ExportObjectAsCSV EC = new ExportObjectAsCSV();
Id batchId = Database.executeBatch(EC,200);
}
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(',');
if(!test.isRunningTest()){
query += ' from Opportunity where lastmodifieddate <= yesterday';
}else{
query += ' from Opportunity';
}
return Database.getQueryLocator(query);
}
global static void execute(Database.BatchableContext bc, List<Opportunity> OppList)
{
try{
Export_Object_as_CSV__c eo = [select name,Field_backup__c,Full_backup__c,Field_name_Separated_with__c from Export_Object_as_CSV__c order by createddate DESC limit 1];
String generatedCSVFile = '';
if(eo.Full_backup__c == true)
{
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
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';
}
}else if(eo.Field_backup__c == true )
{
String Fieldfromuser = (string) eo.Field_name_Separated_with__c;
list<String> eachline = Fieldfromuser.split(' ');
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += eachline[i] +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(Opportunity company: OppList){
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += company.get(eachline[i])+ ',';
}
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)
{
}
}
Test class i have used:
@isTest
public class OpportunityExportBatchTest {
@isTest
public Static Void unitTest(){
Account Acc = New Account();
Acc.Name = 'Test Account';
acc.Region__c = 'EMEA';
Insert Acc;
Opportunity Opp = new Opportunity();
Opp.Name = 'Test Opportunity';
Opp.AccountId = Acc.Id;
Opp.CloseDate =System.today();
Opp.StageName = 'Closed Won';
Insert Opp;
test.startTest();
ExportObjectAsCSV lp = new ExportObjectAsCSV();
Id batchId = Database.executeBatch(lp);
test.stopTest();
}
}
@InvocableMethod (Label ='call batch apex')
public static void callbatch()
{
ExportObjectAsCSV EC = new ExportObjectAsCSV();
Id batchId = Database.executeBatch(EC,200);
}
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(',');
if(!test.isRunningTest()){
query += ' from Opportunity where lastmodifieddate <= yesterday';
}else{
query += ' from Opportunity';
}
return Database.getQueryLocator(query);
}
global static void execute(Database.BatchableContext bc, List<Opportunity> OppList)
{
try{
Export_Object_as_CSV__c eo = [select name,Field_backup__c,Full_backup__c,Field_name_Separated_with__c from Export_Object_as_CSV__c order by createddate DESC limit 1];
String generatedCSVFile = '';
if(eo.Full_backup__c == true)
{
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
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';
}
}else if(eo.Field_backup__c == true )
{
String Fieldfromuser = (string) eo.Field_name_Separated_with__c;
list<String> eachline = Fieldfromuser.split(' ');
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += eachline[i] +',';
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n';
for(Opportunity company: OppList){
for(Integer i = 0; i < eachline.size(); i++)
{
generatedCSVFile += company.get(eachline[i])+ ',';
}
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)
{
}
}
Test class i have used:
@isTest
public class OpportunityExportBatchTest {
@isTest
public Static Void unitTest(){
Account Acc = New Account();
Acc.Name = 'Test Account';
acc.Region__c = 'EMEA';
Insert Acc;
Opportunity Opp = new Opportunity();
Opp.Name = 'Test Opportunity';
Opp.AccountId = Acc.Id;
Opp.CloseDate =System.today();
Opp.StageName = 'Closed Won';
Insert Opp;
test.startTest();
ExportObjectAsCSV lp = new ExportObjectAsCSV();
Id batchId = Database.executeBatch(lp);
test.stopTest();
}
}
- Thanigai Kumaran Balaji
- April 12, 2022
- Like
- 0
trying to get input from screen flow to batch apex
I have been trying to get 3 input from Screen flow and pass the values from screenflow to batch apex
Below is my Batch apex:
Here i am unable to pass the 2 Boolean and one String from flow to my batch apex inside Execute method, Please suggest how i can acheive the same
global class ExportObjectAsCSV implements Database.Batchable <SObject>{
@InvocableMethod (Label ='call batch apex')
public static void callbatch() {
Id jobID = database.executeBatch(new ExportObjectAsCSV());
}
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(',');
if(!test.isRunningTest()){
query += ' from Opportunity where lastmodifieddate = yesterday';
}else{
query += ' from Opportunity';
}
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)
{
}
}
Below is my Batch apex:
Here i am unable to pass the 2 Boolean and one String from flow to my batch apex inside Execute method, Please suggest how i can acheive the same
global class ExportObjectAsCSV implements Database.Batchable <SObject>{
@InvocableMethod (Label ='call batch apex')
public static void callbatch() {
Id jobID = database.executeBatch(new ExportObjectAsCSV());
}
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(',');
if(!test.isRunningTest()){
query += ' from Opportunity where lastmodifieddate = yesterday';
}else{
query += ' from Opportunity';
}
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)
{
}
}
- Thanigai Kumaran Balaji
- April 12, 2022
- Like
- 0
Help with test class for exporting object details as CSV file
Please help me with test case for below batch apex
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';
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)
{
}
}
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';
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)
{
}
}
- Thanigai Kumaran Balaji
- April 11, 2022
- Like
- 0
How to write a test class for exporting object details as CSV file
I have created a batch apex but unable to write test class for the same.
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 = yesterday';
system.debug(query);
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)
{
}
}
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 = yesterday';
system.debug(query);
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)
{
}
}
- Thanigai Kumaran Balaji
- April 11, 2022
- Like
- 0