+ Start a Discussion
Alexandre Santos 8Alexandre Santos 8 

Apex trigger - a.__r__c == NULL

My trigger dont get "a.Reserva__r.Data_de_inicio__c" and "a.Reserva__r.Data_de_terminio__c" !





--------------------------------------------------------------------


trigger RegraDeInscricao on Contactos_inscritos__c (before insert) {

    

    
    List<Reserva__c> lista1=new List<reserva__c>([Select ID,Orador__c,Data_De_inicio__c,Data_De_terminio__c from Reserva__c LIMIT 25000]);

    List<Contactos_inscritos__c> lista2=new List<Contactos_inscritos__c>([Select ID,Colaborador__c,reserva__c,reserva__r.Data_De_Inicio__c,reserva__r.Orador__c,Reserva__r.Data_de_terminio__c from Contactos_inscritos__c WHERE Reserva__c IN :lista1 LIMIT 25000]);
    
    
        
        for(Contactos_inscritos__c  a:Trigger.new){
            
            
            
            
    
     for(Contactos_inscritos__c O:lista2){
         
         
       
         
     
         }
             
             if(a.Colaborador__c == O.reserva__r.Orador__c && a.Reserva__r.Data_de_inicio__c >= O.Reserva__r.Data_De_Inicio__c &&

               a.Reserva__r.Data_de_terminio__c <= O.Reserva__r.Data_de_terminio__c) {

                a.adderror('teste');

            }

             

            if(a.Colaborador__c == O.reserva__r.Orador__c && a.Reserva__r.Data_de_inicio__c <= O.Reserva__r.Data_De_Inicio__c &&

               a.Reserva__r.Data_de_terminio__c <= O.Reserva__r.Data_de_terminio__c && a.Reserva__r.Data_de_terminio__c >= O.Reserva__r.Data_De_Inicio__c ) {

                a.adderror('teste');

            }

 

            if(a.Colaborador__c == O.reserva__r.Orador__c && a.Reserva__r.Data_de_inicio__c >= O.Reserva__r.Data_De_Inicio__c &&

               a.Reserva__r.Data_de_terminio__c >= O.Reserva__r.Data_de_terminio__c && a.Reserva__r.Data_de_inicio__c <= O.Reserva__r.Data_de_terminio__c) {

                a.adderror('teste');

            }

            

            if(a.Colaborador__c == O.reserva__r.Orador__c && a.Reserva__r.Data_de_inicio__c <= O.Reserva__r.Data_De_Inicio__c &&

               a.Reserva__r.Data_de_terminio__c >= O.Reserva__r.Data_de_terminio__c ) {

                a.adderror('teste');


            }
         
   
}
    
}
}
Deepali KulshresthaDeepali Kulshrestha
Hi Alexandre, 

You want to access the fields of the related record of an object. but you can't access the related object fields without a query on that object.
If you want to access those fields you have to query on that record.

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
Ajay K DubediAjay K Dubedi
Hi Alexandre,
Try this code:
Trigger:
trigger RegraDeInscricao on Contactos_inscritos__c (after insert) {
    if(trigger.IsAfter && trigger.IsInsert) {
        RegraDeInscricao_handler.addErrorMethod(trigger.newMap);
    }    
}
Handler Class:
public class RegraDeInscricao_handler {
    public static void addErrorMethod(Map<Id, Contactos_inscritos__c> ciMap) {
        try {
            List<Contactos_inscritos__c> lista2 = new List<Contactos_inscritos__c>();
            List<Contactos_inscritos__c> listaNew = new List<Contactos_inscritos__c>();
            listaNew = [Select ID,
                        Colaborador__c,
                        reserva__c, 
                        reserva__r.Data_De_Inicio__c, 
                        reserva__r.Orador__c,
                        Reserva__r.Data_de_terminio__c 
                        from Contactos_inscritos__c 
                        WHERE Id IN : ciMap.keyset() 
                        LIMIT 25000];
            
            Map<Id, Reserva__c> mapa1 = new Map<Id, Reserva__c>([Select ID,
                                                                 Orador__c,
                                                                 Data_De_inicio__c,
                                                                 Data_De_terminio__c
                                                                 from Reserva__c 
                                                                 WHERE Orador__c != null AND Data_De_inicio__c != null AND Data_De_terminio__c != null
                                                                 LIMIT 25000]);
            if(!mapa1.IsEmpty()) {
                lista2 = [Select ID,
                          Colaborador__c,
                          reserva__c, 
                          reserva__r.Data_De_Inicio__c, 
                          reserva__r.Orador__c,
                          Reserva__r.Data_de_terminio__c 
                          from Contactos_inscritos__c 
                          WHERE Reserva__c IN : mapa1.keyset() 
                          LIMIT 25000];
            }
            if(lista2.size() > 0) {
                for(Contactos_inscritos__c  a : listaNew) {
                    for(Contactos_inscritos__c O : lista2) { 
                        if(a.Colaborador__c != null && a.Reserva__r.Data_de_inicio__c != null && a.Reserva__r.Data_de_terminio__c != null) {
                            if(a.Colaborador__c == O.reserva__r.Orador__c) {
                                if(ciMap.containsKey(a.Id)) {
                                    ciMap.get(a.Id).addError('teste');
                                }
                            }
                            
                            if(a.Colaborador__c == O.reserva__r.Orador__c && a.Reserva__r.Data_de_inicio__c <= O.Reserva__r.Data_De_Inicio__c &&
                               a.Reserva__r.Data_de_terminio__c <= O.Reserva__r.Data_de_terminio__c && a.Reserva__r.Data_de_terminio__c >= O.Reserva__r.Data_De_Inicio__c ) {
                                   if(ciMap.containsKey(a.Id)) {
                                       ciMap.get(a.Id).addError('teste');
                                   }
                               }
                            
                            if(a.Colaborador__c == O.reserva__r.Orador__c && a.Reserva__r.Data_de_inicio__c >= O.Reserva__r.Data_De_Inicio__c &&
                               a.Reserva__r.Data_de_terminio__c >= O.Reserva__r.Data_de_terminio__c && a.Reserva__r.Data_de_inicio__c <= O.Reserva__r.Data_de_terminio__c) {
                                   if(ciMap.containsKey(a.Id)) {
                                       ciMap.get(a.Id).addError('teste');
                                   }
                               }
                            
                            if(a.Colaborador__c == O.reserva__r.Orador__c && a.Reserva__r.Data_de_inicio__c <= O.Reserva__r.Data_De_Inicio__c &&
                               a.Reserva__r.Data_de_terminio__c >= O.Reserva__r.Data_de_terminio__c ) {
                                   if(ciMap.containsKey(a.Id)) {
                                       ciMap.get(a.Id).addError('teste');
                                   }
                               }
                        }
                    }
                }
            }
        } catch (Exception ex) {
            system.debug('Exception---ofLine--->' + ex.getLineNumber());
            system.debug('Exception---Message--->' + ex.getMessage());
        }
    }
}

I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.

Thanks,
Ajay Dubedi