You need to sign in to do that
Don't have an account?

Trigger -Too many SOQL queries: 101
Hello,
I have trigger before insert, et before update d'un objet
When I deploy in Prod environnement, I have this error:
Too many SOQL queries: 101
Stack Trace: Trigger.CampaignMemberupdate: line 13, column 1
Can someone help me.
I have trigger before insert, et before update d'un objet
trigger CampaignMemberupdate on CampaignMember (before insert,before update) { List <campaignmember> Cmember = new List<campaignmember>(); for(campaignmember cmb:Trigger.new){ { Cmember.add(cmb); } if(!Cmember.isEmpty()){ id cmsourceid; for (campaignmember cmemb:Cmember ) { if (cmemb.CampaignId != null) { for (campaignmember cmemberold :[Select id, name,ContactId, Registation_Date2__c,RegistrationDate__c, type__c, appel_telephonique_orga__c, Discount_Code__c, Type_d_inscription__c from CampaignMember where CampaignId in (select CampagneSource__c from Campaign where id =: cmemb.CampaignId) ]) { if(cmemb.ContactId == cmemberold.ContactId) { cmemb.Discountcodeold__c = cmemberold.Discount_Code__c; cmemb.AppelTelephoniqueorgold__c = cmemberold.appel_telephonique_orga__c; cmemb.Registrationdateold__c = cmemberold.RegistrationDate__c; cmemb.TypeInscriptionOld__c = cmemberold.type__c; } } } } } } }
When I deploy in Prod environnement, I have this error:
Too many SOQL queries: 101
Stack Trace: Trigger.CampaignMemberupdate: line 13, column 1
Can someone help me.
You have an query and subquery inside fore loop.
Unless you have heap issue dont use soql inside for query
In your current case ,even if you inserted or updated just around 200 campaign member too..(scenerio may be even more campaignMember records be inserted or updated ,that infact worsen the state further)
if CampaignMember records returned from the query is around than 10000 @line 13 ,then you will face the soql query limit exception.
since soql foreach will return only 200records and then for next 200 records another soql query will be made and so on and in your case ,since you have subquery as well,each soql execution counts for 2 soql query limit.
run this query and then do the processing
Hope this helps
Thanks,
Shiva RV
In your code For loop inside For loop, Where in Inner For loop your are doing SOQL (Line no: 13). That is causing of "Too many SOQL queries: 101". Means your outer for loop is running more than 100 times which not a good practice.
You have to keep all related records in a list before 1st loop and use that List in inner loop to iterate over records. I have tried to simplify your code plz try it and let me know if it has work for you and mark it of ur answer for other references.
Refer : https://developer.salesforce.com/page/Apex_Code_Best_Practices for apex best practices.
Thanks
Niraj