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

too many soql queries error
I'm getting a too many soql queries erros on this line
oliMgr = new OppLineItemManager(triggerList);
in the following trigger:
Anyone see how I can modify this trigger code to avoid that error? Nothing I try seems to be working. Thanks a lot
oliMgr = new OppLineItemManager(triggerList);
in the following trigger:
trigger OpportunityLineItemTrigger on OpportunityLineItem ( before insert, before update, before delete, after insert, after update, after delete ) { if (!RecursionControl.getSuppressionFlag(RecursionControl.SuppressionFlag.OPPORTUNITY_LINE_ITEM_TRIGGER)) { // Declare trigger variables DeletionValidator oliDeletionValidator; OppLineItemManager oliMgr; OpportunityLineItem oliOld; List<OpportunityLineItem> oliListForRenewedFromInfo = new List<OpportunityLineItem>(); List<OpportunityLineItem> triggerList; Set<Id> contractIdSet = new Set<Id>(); Set<Id> oppIdSet = new Set<Id>(); // Aggregate trigger list into single variable if (Trigger.isInsert || Trigger.isUpdate) { triggerList = Trigger.new; } else { // Trigger.isDelete triggerList = Trigger.old; } // Perform evaluation for (OpportunityLineItem oliNew : triggerList) { // Reset record-level variables oliOld = Trigger.isUpdate ? Trigger.oldMap.get(oliNew.Id) : null; if (Trigger.isBefore) { if ((Trigger.isInsert && oliNew.Renewed_From_Line_Item_Record_Id__c != null) || (Trigger.isUpdate && oliNew.Renewed_From_Line_Item_Record_Id__c != oliOld.Renewed_From_Line_Item_Record_Id__c) ) { oliListForRenewedFromInfo.add(oliNew); } } else { // Trigger.isAfter if (Trigger.isUpdate) { if (oliOld.Contract__c != oliNew.Contract__c || oliOld.Quantity != oliNew.Quantity) { if (oliNew.Contract__c != null) { contractIdSet.add(oliNew.Contract__c); } if (oliOld.Contract__c != null) { contractIdSet.add(oliOld.Contract__c); } } } else { // Trigger.isInsert || Trigger.isDelete if (oliNew.Contract__c != null) { contractIdSet.add(oliNew.Contract__c); } } } } // Perform processing oliMgr = new OppLineItemManager(triggerList); if (Trigger.isBefore) { if (Trigger.isInsert) { oliMgr.setContractField(); } oliMgr.setGeneralLineItemFields(); if (!oliListForRenewedFromInfo.isEmpty()) { OppLineItemManager.setRenewedFromProductCode(oliListForRenewedFromInfo); } if (Trigger.isDelete) { oliDeletionValidator = new DeletionValidator(triggerList,DeletionValidator.ValidationType.LINE_ITEM); oliDeletionValidator.validateDeletion(); } } else if (Trigger.isAfter) { oliMgr.setParentOppRollupFields(); } if (!contractIdSet.isEmpty()) { OppLineItemManager.setSKPFieldOnContract(contractIdSet); } /* Code from Apex Trigger "CeligoTrigger_OpportunityLineItem", which was deactivated * in order to be consolidated here */ //context check if(Trigger.size<0)return; if(Trigger.isBefore && Trigger.isInsert){ new CeligoTrigger_OpportunityLineItem(Trigger.new,Trigger.old, CeligoTrigger.TriggerType.BeforeInsert).doTrigger(); //context check }else if(Trigger.isAfter && Trigger.isInsert){ new CeligoTrigger_OpportunityLineItem(Trigger.new,Trigger.old, CeligoTrigger.TriggerType.AfterInsert).doTrigger(); }else if(Trigger.isAfter && Trigger.isUpdate){ new CeligoTrigger_OpportunityLineItem(Trigger.new,Trigger.old, CeligoTrigger.TriggerType.AfterUpdate).doTrigger(); }else if(Trigger.isAfter && Trigger.isDelete){ new CeligoTrigger_OpportunityLineItem(Trigger.new,Trigger.old, CeligoTrigger.TriggerType.AfterDelete).doTrigger(); } } }
Anyone see how I can modify this trigger code to avoid that error? Nothing I try seems to be working. Thanks a lot
The thing is...all this code is in prod and it works. But when I go in the sandbox and try to add a simple workflow rule with field update on opportunity product object, it throws the too many soql query error on this trigger and utility class. Do you see anything wrong with the utility class here as far as soql queries in for loops, because I don't see any:
If you are getting SOQL limit error it means there is SOQL which is calling numerious time. You need to check your and SOQL and DML should not be in for loop.