function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Irene ShureIrene Shure 

Too many SOQL queries: 101 Error in trigger

Hello,

I've been getting the "System.LimitException: Too many SOQL queries: 101" error. Please help.

Here is my trigger. Error is on the highlighted line.

trigger SetRepTrackableTask on Task (before insert, before update) {

    Set<Id> contactIds = new Set<Id>();
    for(Integer a = 0; a < Trigger.new.size(); a++) {
        contactIds.add(Trigger.new[a].WhoId);
    }
    
    Map<Id,Contact> contacts = new Map<id, Contact>([Select Email from Contact Where Id in :contactIds]);
    Map<Id,RecordType> recordTypes = new Map<id, RecordType>([Select Name from RecordType Where Name in ('Log a Call','Task')]);
    
    Set<Id> ownerIds = new Set<Id>();
    for(Integer a = 0; a < Trigger.new.size(); a++) {
        ownerIds.add(Trigger.new[a].OwnerId);
    }
    
    for(Integer a = 0; a < Trigger.new.size(); a++) {
        try {
            if(
                (Trigger.new[a].WhoId != NULL
                    && contacts.get(Trigger.new[a].WhoId).Email != NULL
                    && Trigger.new[a].Subject.contains('Email:')
                    && Trigger.new[a].Description.left(Trigger.new[a].Description.indexOf('Subject:', 0)).containsIgnoreCase(contacts.get(Trigger.new[a].WhoId).Email)
                    && ! Trigger.new[a].Description.left(Trigger.new[a].Description.indexOf('Subject:', 0)).contains('From:'))
                || (Trigger.new[a].Subject.contains('Mass Email'))
                || (recordTypes.get(Trigger.new[a].RecordTypeId).Name == 'Log a Call' && Trigger.new[a].Type != '')
                || (recordTypes.get(Trigger.new[a].RecordTypeId).Name == 'Task' && Trigger.new[a].Type.contains('Bid Opening'))
                || (recordTypes.get(Trigger.new[a].RecordTypeId).Name == 'Task' && Trigger.new[a].Type.contains('Conference'))
                || (recordTypes.get(Trigger.new[a].RecordTypeId).Name == 'Task' && Trigger.new[a].Type.contains('Other'))
                || (recordTypes.get(Trigger.new[a].RecordTypeId).Name == 'Task' && Trigger.new[a].Type.contains('VIP'))
            )
                Trigger.new[a].Credited_Task__c = true;
            else
                Trigger.new[a].Credited_Task__c = false;
                
        } catch (Exception e) {Trigger.new[a].Credited_Task__c = false;}

        if(Trigger.new[a].Type != NULL)
            Trigger.new[a].Activity_Type__c = Trigger.new[a].Type;
    }
}

Thank you.
Raj VakatiRaj Vakati
I guess other trigger might causing this error .. can you check other triggers in contat is bulked or not
Deepali KulshresthaDeepali Kulshrestha
Hi Irene, 

The following error appears when you exceed the Execution Governors Limit (you can run up to a total 100 SOQL queries in a single call or context). 

All the SOQL queries in triggers fired from one call or context will be counted against the limit of 100.
Salesforce cannot disable or raise the Governors Limit.
Resolution    

Resolve the "Too many SOQL queries: 101" error
To fix the issue, change your code so that the number of SOQL fired is less than 100.

If you need to change the context, you can use @future annotation which will run the code asynchronously.
I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.

Thanks and Regards,
Deepali Kulshrestha.