When I try to save my apex class with the following method in it, it is giving me an error "Error: Compile Error: Variable does not exist: Helper.prod_field1_api_name__c at line 37 column 41" (line 37 in my class is the highlighted line below)
global List<Related_Prods_Firms__c> start(Database.BatchableContext BC)
{
try
{
Helper__c Helper = [Select firm_api_name__c,firm_field_api_name__c,
Org_ID__c,Username__c,Password__c,prod_api_name__c,
prod_field1_api_name__c,prod_field2_api_name__c
from Helper__c];
}
catch(System.QueryException q)
{
String errMsg = q.getMessage();
if(errMsg.contains('List has no rows for assignment to SObject'))
{
//add logic to be executed when there is no Helper__c record
}
if(errMsg.contains('List has more than 1 row for assignment to SObject'))
{
//add logic to be executed when there is more than one Helper__c record
}
return null;
}
List<Related_Prods_Firms__c> currRelatedProdFirmsList = new List<Related_Prods_Firms__c>();
String query = 'Select Firm__c,Prod__c';
if(Helper!=null)
{
if(Helper.prod_field1_api_name__c!=null&&Helper.prod_field1_api_name__c!='')
{
**query += ','+'Prod__r.'+Helper.prod_field1_api_name__c;**
}
if(Helper.prod_field2_api_name__c!=null&&Helper.prod_field2_api_name__c!='')
{
query += ','+'Prod__r.'+Helper.prod_field2_api_name__c;
}
if(Helper.firm_field_api_name__c!=null&&Helper.firm_field_api_name__c!='')
{
query += ','+'Firm__r.'+Helper.firm_field_api_name__c;
}
}
query += ' from Related_Prods_Firms__c';
if(Helper!=null)
{
query = String.escapeSingleQuotes(query);
currRelatedProdFirmsList = Database.query(query);
}
return currRelatedProdFirmsList;
}
If I repeat the "Helper" query part (as below), then it is saving the class!
global List<Related_Prods_Firms__c> start(Database.BatchableContext BC)
{
try
{
**Helper__c Helper = [Select firm_api_name__c,firm_field_api_name__c,
Org_ID__c,Username__c,Password__c,prod_api_name__c,
prod_field1_api_name__c,prod_field2_api_name__c
from Helper__c];**
}
catch(System.QueryException q)
{
String errMsg = q.getMessage();
if(errMsg.contains('List has no rows for assignment to SObject'))
{
//add logic to be executed when there is no Helper__c record
}
if(errMsg.contains('List has more than 1 row for assignment to SObject'))
{
//add logic to be executed when there is more than one Helper__c record
}
return null;
}
**Helper__c Helper = [Select firm_api_name__c,firm_field_api_name__c,
Org_ID__c,Username__c,Password__c,prod_api_name__c,
prod_field1_api_name__c,prod_field2_api_name__c
from Helper__c];**
List<Related_Prods_Firms__c> currRelatedProdFirmsList = new List<Related_Prods_Firms__c>();
String query = 'Select Firm__c,Prod__c';
if(Helper!=null)
{
if(Helper.prod_field1_api_name__c!=null&&Helper.prod_field1_api_name__c!='')
{
query += ','+'Prod__r.'+Helper.prod_field1_api_name__c;
}
if(Helper.prod_field2_api_name__c!=null&&Helper.prod_field2_api_name__c!='')
{
query += ','+'Prod__r.'+Helper.prod_field2_api_name__c;
}
if(Helper.firm_field_api_name__c!=null&&Helper.firm_field_api_name__c!='')
{
query += ','+'Firm__r.'+Helper.firm_field_api_name__c;
}
}
query += ' from Related_Prods_Firms__c';
if(Helper!=null)
{
query = String.escapeSingleQuotes(query);
currRelatedProdFirmsList = Database.query(query);
}
return currRelatedProdFirmsList;
}
I don't understand why I have to define the "Helper" part twice! Can anyone please explain me this? Thanks in advance.