You need to sign in to do that
Don't have an account?
Thanigai Kumaran Balaji
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)
{
}
}
Refer the below links will help you to proceed further on your test class.
https://www.infallibletechie.com/2018/12/code-coverage-for-custom-metadata-type.html
https://developer.salesforce.com/forums/?id=906F0000000kD8eIAE
Thanks!!