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
Vishnu_SFDCVishnu_SFDC 

System.LimitException: Too many SOQL queries: 101 on Trigger

trigger DEUpdateLeadOwner on Lead (before update) {
for(Lead Lead1:trigger.new)
  {
   if(Lead1.Is_Distributed__c==True)
    {
     Map<integer,String> UsersCA = new Map<integer,String>();
     Map<integer,String> UsersHI = new Map<integer,String>();
     Set<integer> User = new Set<integer>();
    
     for(Lead record : trigger.new)
      {       
       user.add(Integer.valueof(record.AssignToUserId_Hidden__c));
      }
     
      //get the users in team 1 and team2 who are in user list.
      List< Team1__c> user1 = [select UserId__c,UserId_hidden__c from Team1__c where UserId__c in : user];
    for(Team1__c userA : user1 )
      {
       UsersCA.put(Integer.valueof(userA.UserId__c),userA.UserId_hidden__c);
      }
      List<Team2__c> user2 = [select UserId__c,UserId_hidden__c from Team2__c where UserId__c in : user];
    for(Team2__c userB : user2 )
      {
       UsersHI.put(Integer.valueof(userb.UserId__c),userb.UserId_hidden__c);
      }
     
      //Change lead owner for CA Leads
    If(Lead1.Hawaii__c == false)
     {
      for(Lead le : trigger.new)
      {
       if(UsersCA.containsKey(Integer.valueof(le.AssignToUserId_Hidden__c)))
      {
       le.OwnerId=UsersCA.get(Integer.valueof(le.AssignToUserId_Hidden__c));
       le.AssignToUserId_Hidden__c =null;
      }
    }
    }
Error:
Trigger.DEUpdateLeadOwner: line 18, column 1
15:37:15.123 (3123786000)|FATAL_ERROR|System.LimitException: Too many SOQL queries: 101

Can someone help me with this.

Thanks in advance.
Best Answer chosen by Vishnu_SFDC
Ramu_SFDCRamu_SFDC
Try the below code

trigger DEUpdateLeadOwner on Lead (before update) {
Map<integer,String> UsersCA = new Map<integer,String>();
    Map<integer,String> UsersHI = new Map<integer,String>();
    Set<integer> User = new Set<integer>();
for(Lead record : trigger.new)
      {      
       user.add(Integer.valueof(record.AssignToUserId_Hidden__c));
      }
  
   List< Team1__c> user1 = [select UserId__c,UserId_hidden__c from Team1__c where UserId__c in : user];
    for(Team1__c userA : user1 )
      {
       UsersCA.put(Integer.valueof(userA.UserId__c),userA.UserId_hidden__c);
      }
      List<Team2__c> user2 = [select UserId__c,UserId_hidden__c from Team2__c where UserId__c in : user];
    for(Team2__c userB : user2 )
      {
       UsersHI.put(Integer.valueof(userb.UserId__c),userb.UserId_hidden__c);
      }
  
for(Lead Lead1:trigger.new)
{
  if(Lead1.Is_Distributed__c==True && Lead1.Hawaii__c == false)
   {   
     
       if(UsersCA.containsKey(Integer.valueof(Lead1.AssignToUserId_Hidden__c)))
      {
       Lead1.OwnerId=UsersCA.get(Integer.valueof(Lead1.AssignToUserId_Hidden__c));
       Lead1.AssignToUserId_Hidden__c =null;
      }
   }
}
}

All Answers

Subhash GarhwalSubhash Garhwal
Hi,
You quering on Team1 and Team2 object in for loop and in salesforce you can only hit 100 SOQL quey in single transaction. so if more than 50 records are updated in one time this error will be came.So you need to hit these queries outside to for loop.
For Salesforce Limits you can follow this link
www.salesforce.com/us/developer/docs/apexcode/Content/apex_gov_limits.htm


Thanks
Ramu_SFDCRamu_SFDC
Try the below code

trigger DEUpdateLeadOwner on Lead (before update) {
Map<integer,String> UsersCA = new Map<integer,String>();
    Map<integer,String> UsersHI = new Map<integer,String>();
    Set<integer> User = new Set<integer>();
for(Lead record : trigger.new)
      {      
       user.add(Integer.valueof(record.AssignToUserId_Hidden__c));
      }
  
   List< Team1__c> user1 = [select UserId__c,UserId_hidden__c from Team1__c where UserId__c in : user];
    for(Team1__c userA : user1 )
      {
       UsersCA.put(Integer.valueof(userA.UserId__c),userA.UserId_hidden__c);
      }
      List<Team2__c> user2 = [select UserId__c,UserId_hidden__c from Team2__c where UserId__c in : user];
    for(Team2__c userB : user2 )
      {
       UsersHI.put(Integer.valueof(userb.UserId__c),userb.UserId_hidden__c);
      }
  
for(Lead Lead1:trigger.new)
{
  if(Lead1.Is_Distributed__c==True && Lead1.Hawaii__c == false)
   {   
     
       if(UsersCA.containsKey(Integer.valueof(Lead1.AssignToUserId_Hidden__c)))
      {
       Lead1.OwnerId=UsersCA.get(Integer.valueof(Lead1.AssignToUserId_Hidden__c));
       Lead1.AssignToUserId_Hidden__c =null;
      }
   }
}
}
This was selected as the best answer