You need to sign in to do that
Don't have an account?
Irene 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.
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.
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.