function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Thanigai Kumaran BalajiThanigai 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 apexUser-added image
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 BalajiThanigai Kumaran Balaji
I want to use the input from Flow as if condition to run the methods in start and execute method