• CCGN
  • NEWBIE
  • 10 Points
  • Member since 2017

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 1
    Questions
  • 1
    Replies
I have this trigger and it is marking the following error, I can not find the fault System.LimitException: Too many SOQL queries: 101

trigger SFDC_Trigger_Edificio on SFDC_Edificio__c (after insert, after update) {
    if(trigger.isAfter) {
        if(trigger.isInsert || trigger.isUpdate) {
            if(trigger.new[0].RecordTypeId == Schema.SObjectType.SFDC_Edificio__c.getRecordTypeInfosByName().get('Edificio Venta').getRecordTypeId()) {
                map<Id, decimal> edificio_DeGracia = new map<Id, decimal>();
                map<Id,map<Id,Date>> idContrato_idEdificio_Fecha = new map<Id,map<Id,Date>>();
                
                for(SFDC_Edificio__c forData : trigger.new) {
                    if(trigger.isUpdate && (forData.Dias_de_gracia__c != trigger.oldMap.get(forData.Id).Dias_de_gracia__c)) {
                        if(!edificio_DeGracia.containsKey(forData.Id)) {
                            edificio_DeGracia.put(forData.Id, forData.Dias_de_gracia__c);
                        }                                                                               
                    }
                }
    
                list<OrderItem> consultaGlobal = [select Id, Fecha_de_entrega_Departamento__c, OrderId, Order.ContractId, Order.Contract.Oportunidad__c, Order.Contract.Oportunidad__r.Edificio__c, Order.Contract.Oportunidad__r.Edificio__r.Dias_de_gracia__c from OrderItem where Order.Contract.Oportunidad__r.Edificio__c IN : edificio_DeGracia.keySet() and Fecha_de_entrega_Departamento__c <> null and Order.Contract.Bloquear_DDGracia__c = false and Order.Contract.Status = 'Borrador'];
                if(!consultaGlobal.isEmpty()) {
                    for(OrderItem forData : consultaGlobal) {
                        if(!edificio_DeGracia.containsKey(forData.Order.Contract.Oportunidad__r.Edificio__c)) { edificio_DeGracia.put(forData.Order.Contract.Oportunidad__r.Edificio__c, forData.Order.Contract.Oportunidad__r.Edificio__r.Dias_de_gracia__c); }
                        if(!idContrato_idEdificio_Fecha.containsKey(forData.Order.ContractId)) {
                            map<Id,Date> tmp = new map<Id,Date>();
                            tmp.put(forData.Order.Contract.Oportunidad__r.Edificio__c,forData.Fecha_de_entrega_Departamento__c);
                            idContrato_idEdificio_Fecha.put(forData.Order.ContractId, new map<Id,Date>());
                            idContrato_idEdificio_Fecha.put(forData.Order.ContractId, tmp);
                        }
                    }
                    list<Contract> contratosInvolucrados = [select Id, Dias_de_gracia__c, Oportunidad__r.Edificio__c from Contract where Id IN : idContrato_idEdificio_Fecha.keySet()];
                    if(!contratosInvolucrados.isEmpty()) {
                        for(Contract forData : contratosInvolucrados) {
                            forData.Dias_de_gracia__c = idContrato_idEdificio_Fecha.get(forData.Id).get(forData.Oportunidad__r.Edificio__c).addDays((Integer)edificio_DeGracia.get(forData.Oportunidad__r.Edificio__c));
                        }
                        update contratosInvolucrados;                   
                    }
                }
            }
        }
    }
}
  • June 12, 2019
  • Like
  • 0
Hi,

  I wrote a trigger which is working fine when deployed to production am getting below eror Please suggest me how to fix this issue

Error: System.LimitException: Too many SOQL queries: 101 Trigger.logosince: line 28, column 1
 
trigger logosince on Account (before  update) 
{
  Try
 {
   Set<Id> accountId = new Set<Id>();
   List<Id> chkoneprt = new List<Id>();
   List<Id> chkoneid = new List<Id>();
   for (Account a : Trigger.New) 
   {     
      accountId.add(a.id);
      chkoneid.add(a.id);
      chkoneprt.add(a.parentid);
      
      } 
       
      /* not required for ( account actone : [select id,parentid from account 
                                where id in :accountId 
                               ])
        {
          chkoneid.add(actone.id);  
          chkoneprt.add(actone.parentid);  
        }  */
        
          system.debug('ID' + chkoneid);
         system.debug('Parent ID' + chkoneprt);
 
        List<Id> finalid = new List<Id>();
        for ( account actpar : [select id,parentid from account 
                                where 
                                     ( parentid != '' and
                                       parentid in :chkoneprt ) or 
                                     ( parentid != '' and
                                       parentid in :chkoneid ) or
                                      id in :chkoneid 
                               ])
        {
          finalid.add(actpar.id);  
            
        }
        system.debug('ID' + chkoneid); 
        system.debug('Final ID' + finalid);        
             
     List<AggregateResult> gr = [ 
     SELECT min(closedate) from opportunity 
     WHERE accountid IN :chkoneid or accountid in :finalid];
   
       
     for (AggregateResult ar : gr)  {
        system.debug('Min Opp date' + (Datetime)ar.get('expr0'));
        for(Account act : trigger.new) 
              {
              act.Logo_Since__c = (Datetime)ar.get('expr0') + 1;
              
              }
         }     
     
 }
  catch (System.NullPointerException e) {
    system.debug('Null Exception');
  }    
             
         
}