You need to sign in to do that
Don't have an account?
Take SOQL out of FOR loop in Apex Trigger---Please Help!!!
Can anyone please help me take the SOQL outside the for loop?
The code is given below:
if(Trigger.isAfter && Trigger.isInsert){
List<Timeline_Entries__c> TimeLineList = new List<Timeline_Entries__c> ();
List<Moratorium__c> MoratoriumList = new List<Moratorium__c>();
for(Case cs:Trigger.new){
MoratoriumList=[Select Name,Cert_No__c,Start_Date__c,Stop_Date__c from Moratorium__c where Cert_No__c=:cs.Cert_Number__c] ;
system.debug('MoratoriumListkasize'+MoratoriumList.size());
for (integer x=0;x<MoratoriumList.size();x++){
TimeLineList.add(new Timeline_Entries__c(Type__c='Test',Case__c=cs.id,Call_In_Out__c='In',Activity__c='TestingMoratoriums',Curtailment_Calc__c='Start',Activity_Date__c=MoratoriumList[x].Start_Date__c));
TimeLineList.add(new Timeline_Entries__c(Type__c='Test',Case__c=cs.id,Call_In_Out__c='In',Activity__c='TestingMoratoriums',Curtailment_Calc__c='Stop',Activity_Date__c=MoratoriumList[x].Stop_Date__c));
}
}
if(TimeLineList.size()>0){
insert TimeLineList;
}
}
if(Trigger.isAfter && Trigger.isInsert){
List<Timeline_Entries__c> TimeLineList = new List<Timeline_Entries__c> ();
List<Moratorium__c> MoratoriumList = new List<Moratorium__c>();
List<Moratorium__c> MList = new List<Moratorium__c>();
MList=[Select Name,Cert_No__c,Start_Date__c,Stop_Date__c from Moratorium__c ] ;
for(Case cs:Trigger.new){
for(Moratorium__c mrl:MList){
if(mrl.Cert_No__c=:cs.Cert_Number__c){
MoratoriumList.add(mrl);
}
system.debug('MoratoriumListkasize'+MoratoriumList.size());
for (integer x=0;x<MoratoriumList.size();x++){
TimeLineList.add(new Timeline_Entries__c(Type__c='Test',Case__c=cs.id,Call_In_Out__c='In',Activity__c='TestingMoratoriums',Curtailment_Calc__c='Start',Activity_Date__c=MoratoriumList[x].Start_Date__c));
TimeLineList.add(new Timeline_Entries__c(Type__c='Test',Case__c=cs.id,Call_In_Out__c='In',Activity__c='TestingMoratoriums',Curtailment_Calc__c='Stop',Activity_Date__c=MoratoriumList[x].Stop_Date__c));
}
}
if(TimeLineList.size()>0){
insert TimeLineList;
}
}
In this case you are trying to fetch all records from Moratorium__c object which may cause performance issue if Moratorium__c has too many records.