You need to sign in to do that
Don't have an account?
Thanigai Kumaran Balaji
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)
{
}
}
Best Answer chosen by Thanigai Kumaran Balaji
Thanigai Kumaran Balaji
I want to use the input from Flow as if condition to run the methods in start and execute method