You need to sign in to do that
Don't have an account?
krishnag
too many SOQL queries 101
hi i have a Asynchronous class with future method when i load data using dataloader.I am geting an exception saying
Apex script unhandled exception by user/organization: 005800000036bA4/00D80000000cSrC
Failed to invoke future method 'public static void updateRelationMethod(LIST<String>)' on class 'updateRelation' for job id '70780000003Dn62'
caused by: System.LimitException: Too many SOQL queries: 101
Class.updateRelation.updateRelationMethod: line 66, column 38
External entry point
public class updateRelation {
@future
public static void updateRelationMethod(list<String> AccountIds){
List<Account> acc = [select id,Company_Relationship__c,Direct_Markets_Customer__c,Z_Programs_Customer__c from Account where Company_Relationship__c != 'Broker' and Company_Relationship__c !='Employee' and Id IN :AccountIds];
for(Account temp :acc)
{
System.debug('In if loop');
list<Policy__c> NonActivePolicy1 = [select Id,Policy_Status__c from Policy__c where
Company_Name__c =:temp.Id limit 1];
// start of condition 2
if(!NonActivePolicy1.isEmpty()){
temp.Company_Relationship__c = 'Customer';
list<Policy__c> ActivePolicy = [select Id,Policy_Status__c from Policy__c where Policy_Status__c ='Active'
and Company_Name__c =:temp.Id limit 1];
//Start of condition 3
if(!ActivePolicy.isEmpty()){
temp.Relationship_Type__c = 'Current';
}
//END of if 3
//Start of condition4 1
else{
Date tempd = System.today()+180;
list<Policy__c> NonActivePolicy = [select Id,Policy_Status__c,Policy_Expiration_Date__c from Policy__c where
Company_Name__c =:temp.Id
and Policy_Expiration_Date__c >:tempd limit 1];
if(!NonActivePolicy.isEmpty()){
temp.Relationship_Type__c = 'Current';
}
else{
list<Submission__c> subBondType = [SELECT Id,Submission_Status__c,Policy_Status__c FROM Submission__c where
Account_Name__c =:temp.Id and Submission_Status__c ='Bound' limit 1];
//start of condition7 5
if(!subBondType.isEmpty()){
temp.Company_Relationship__c = 'Customer';
if(subBondType[0].Policy_Status__c == 'Active')
{
temp.Relationship_Type__c = 'Current';
}
else
{
temp.Relationship_Type__c = 'Former';
}}
else{
temp.Relationship_Type__c ='Former';
}
//end of if 5
// Start of condition8 3
} }
//End of else 1
}
//end of if 2
//Start of condition5 2
else{
list<Submission__c> subType = [SELECT Id,Submission_Status__c,Policy_Status__c FROM Submission__c where
Account_Name__c =:temp.Id limit 1];
//start of condition6 4
if(!subType.isEmpty()){
list<Submission__c> subBondType = [SELECT Id,Submission_Status__c,Policy_Status__c FROM Submission__c where
Account_Name__c =:temp.Id and Submission_Status__c ='Bound' limit 1];
//start of condition7 5
if(!subBondType.isEmpty()){
temp.Company_Relationship__c = 'Customer';
if(subBondType[0].Policy_Status__c == 'Active')
temp.Relationship_Type__c = 'Current';
else
temp.Relationship_Type__c = 'Former';
}
//end of if 5
// Start of condition8 3
else {
temp.Company_Relationship__c = 'Prospect';
temp.Relationship_Type__c = 'Activity';
}
//END of else 3
}
//end of if 4
// START of condition9 4
else {
System.debug('In last if loop');
if(temp.Direct_Markets_Customer__c==True || temp.Z_Programs_Customer__c ==True)
{
temp.Company_Relationship__c = 'Programs';
}
else{
temp.Company_Relationship__c = 'Prospect';
temp.Relationship_Type__c = 'No Activity';
}
}
// End of else 4
}
//END of else 2
}
//END of if 1
ProcessorControl.inFutureContext = true;
update acc;
}
}
may be this causes because i put the queries in for loop I took them out of the loop and put them outside need to say what goes on now.
All Answers
may be this causes because i put the queries in for loop I took them out of the loop and put them outside need to say what goes on now.
success got rid of that error.It worked after taking the queries from for loop.