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
Josh GitogoJosh Gitogo 

Can I use two custom objects in an apex Trigger?

I have never made a trigger before and I am not sure where to start for this task. I have two custom objects. object A and object B. When the picklist value of a field in custom object B is selected it needs to change the checkbox field in object A to true. Does anyone know how to do this? I have tried to do this through a workflow and process builder but it cannot be done.
HARSHIL U PARIKHHARSHIL U PARIKH
If object A is Parent and Object B is child then it is possible to update Object A's checkbox field via workflow to true when object B has appropriate picklist value.
Can you provide the name of the objects + Relationships + Field names etc..
Thank You!
Josh GitogoJosh Gitogo
Object A is Sample_Request__c Object B is Sol_sence_Sample__c The field name with the picklist value is Sample_Request_Status__c and the field name with the checkbox value is Shipped__c. Thank you!
HARSHIL U PARIKHHARSHIL U PARIKH
Few questions..
1) Is field named Sample_Request_Status__c is on Object B ? And field named Shipped__c is on Object A
2) Who is master and who is detail? Or if its lookup relationship then which one is parent and which one is child?
3) What are the picklist values on Sample_Request_Status__c field and on which value should the checbox be updated as TRUE?
Thanks!
pradeep kumar yadavpradeep kumar yadav
Go to developer console and create new Apex Trigger on Object B.
As shown below....
 
trigger mytrigger on Object_B__c (after update) {
    
    boolean flag = false;
    
    for(Object_B__c xyz : Trigger.New){
        
        if(xyz.picklist__c != (Trigger.oldMap).get(xyz.ID).picklist___c){
            
            flag = true;
        }
    }
    
    if(flag == true){
        
        List<Object_A__c> newobjAList = new List<Object_A__c>();
        
        List<Object_A__c> objAList  = [Select ID, checkbox__c from Object_A__c];
        for(Object_A__c a : objAList){
            
            newobjAList.add(new Object_A__c(ID = a.ID, checkbox__c = true));
        }
        
        update newobjAList;
    }

}

you can make same as after Insert of before  insert any of this........​
Josh GitogoJosh Gitogo
Pradeep,
Thank you for this but the pick list is on object A and the checkbox is one object B. When I tried substitiuitng them in for one another it did not work. Does it need to be rewritten?
Josh GitogoJosh Gitogo
Govind,
1) The Sample_Request_Status is on Object A( Sample_Request) and the Shipped__c is on Object B (Solesence_Sample).
2) The Master is Sample_Request and the detail is Solesence_Sample
3) The picklist value that triggers the change is 'shipped' and the checkbox value needs to be updated as TRUE
 
HARSHIL U PARIKHHARSHIL U PARIKH
Try using following trigger,
 
Trigger CheckboxUpdate on Sample_Request__c (After Insert, After Update, After UnDelete) {
    
    List<Solesence_Sample__c> finalUpdateListOfChild = New List<Solesence_Sample__c>();
    
    If(Trigger.IsInsert || Trigger.IsUpdate || Trigger.IsUnDelete)
    {
        For(Sample_Request__c sampleReq : Trigger.New)
        {
            If(sampleReq.Sample_Request_Status__c == 'Shipped')
            {
                List<Solesence_Sample__c> gettingChildRecords = [Select Id, Shipped__c FROM Solesence_Sample__c WHERE Sample_Request__c =: sampleReq.Id];
                
                If(!gettingChildRecords.IsEmpty())
                {
                    For(Solesence_Sample__c EverySample : gettingChildRecords )
                    {
                        gettingChildRecords.Shipped__c = TRUE;
                        finalUpdateListOfChild.add(EverySample);
                    }
                }
                 Try
                {
                    If(!finalUpdateListOfChild.IsEmpty())
                    {
                        update finalUpdateListOfChild;
                    }
                }
                Catch(Exception e)
                {
                    System.debug('Thrown Exception for CheckboxUpdate Trigger Is:: ' + e.getMessage());
                }
            }
        }
    }

}
Hope this helps!
 
pradeep kumar yadavpradeep kumar yadav
Yes This will be rewritten   ........
 
trigger mytrigger on Object_B__c (after update) {
    
    triggerHelper.objBMethod(Trigger.new, Trigger.oldMap);
}
 
trigger mytrigger on Object_A__c (after update) {
    
    triggerHelper.objAMethod(Trigger.new, Trigger.oldMap);
}
 
public class triggerHelper{
    
    public boolean objAflag = true;
    public boolean objBflaf = true;
    
    public static void objAMethod(List<Object_A__c> newList, Map<ID, Object_A__c> oldMap{
        
        if(triggerHelper.objAflag){
            triggerHelper.objAflag = false;
            
                for(Object_A__c xyz : newList){
        
        			if(xyz.picklist__c != oldMap.get(xyz.ID).picklist___c){
            
            			flag = true;
        			}
    			}
    
        		if(flag == true){
        
        			List<Object_B__c> newobjBList = new List<Object_B__c>();
        
        			List<Object_B__c> objBList  = [Select ID, checkbox__c from Object_B__c];
        			
                    for(Object_B__c a : objBList){
            
            			newobjBList.add(new Object_B__c(ID = a.ID, checkbox__c = true));
        			}
        
                    
                    triggerHelper.objBflaf = false;
                    
        			update newobjBList;
    			}

        }
    }
                                  
                                  
   
        public static void objBMethod(List<Object_B__c> newList, Map<ID, Object_B__c> oldMap{
        
        if(triggerHelper.objBflag){
            triggerHelper.objBflag = false;
            
                for(Object_B__c xyz : newList){
        
        			if(xyz.checkbox__c != oldMap.get(xyz.ID).checkbox__c){
            
            			flag = true;
        			}
    			}
    
        		if(flag == true){
        
        			List<Object_A__c> newobjAList = new List<Object_A__c>();
        
        			List<Object_A__c> objAList  = [Select ID, pickList__c from Object_A__c];
        			
                    for(Object_A__c a : objAList){
            
            			newobjAList.add(new Object_A__c(ID = a.ID, pickList__c = 'ccnjsd'));
        			}
        
                    
                    triggerHelper.objAflaf = false;
                    
        			update newobjAList;
    			}

        }
    }
}



 
pradeep kumar yadavpradeep kumar yadav
You can control the flow of Triggers using flag............

please, check the spelling of Flags.....It written wrong......

In  objBMethod  
triggerHelper.objAflag = false;
Josh GitogoJosh Gitogo
Pradeep,
I entered the code and subsituted for my values but I am receving the following 'error unexpected token: trigger' on line 7
trigger mytrigger on Sol_sence_Sample__c (after update) {
    
    triggerHelper.objBMethod(Trigger.new, Trigger.oldMap);
}
  

trigger mytrigger on Sample_Request__c (after update) {
    
    triggerHelper.objAMethod(Trigger.new, Trigger.oldMap);
}
  

public class triggerHelper{
    
    public boolean objAflag = true;
    public boolean objBflag = true;
    
    public static void objAMethod(List<Sample_Request__c> newList, Map<ID, Sample_Request__c> oldMap{
        
        if(triggerHelper.objAflag){
            triggerHelper.objAflag = false;
            
                for(Sample_Request__c xyz : newList){
        
        			if(xyz.Sample_Request_Status__c != oldMap.get(xyz.ID).Sample_Request_Status__c){
            
            			flag = true;
        			}
    			}
    
        		if(flag == true){
        
        			List<Sol_sence_Sample__c> newobjBList = new List<Sol_sence_Sample__c>();
        
        			List<Sol_sence_Sample__c> objBList  = [Select ID, Shipped__c from Sol_sence_Sample__c];
        			
                    for(Sol_sence_Sample__c a : objBList){
            
            			newobjBList.add(new Sol_sence_Sample__c(ID = a.ID, Shipped__c = true));
        			}
        
                    
                    triggerHelper.objBflag = false;
                    
        			update newobjBList;
    			}

        }
    }
                                  
                                  
   
        public static void objBMethod(List<Sol_sence_Sample__c> newList, Map<ID, Sol_sence_Sample__c> oldMap{
        
        if(triggerHelper.objBflag){
            triggerHelper.objBflag = false;
            
                for(Sol_sence_Sample__c xyz : newList){
        
        			if(xyz.Shipped__c != oldMap.get(xyz.ID).Shipped__c){
            
            			flag = true;
        			}
    			}
    
        		if(flag == true){
        
        			List<Sample_Request__c> newobjAList = new List<Sample_Request__c>();
        
        			List<Sample_Request__c> objAList  = [Select ID, Sample_Request_Status__c from Sample_Request__c];
        			
                    for(Sample_Request__c a : objAList){
            
            			newobjAList.add(new Sample_Request__c(ID = a.ID, Sample_Request_Status__c = 'shipped'));
        			}
        
                    
                    triggerHelper.objAflag = false;
                    
        			update newobjAList;
    			}

        }
    }
}

 
pradeep kumar yadavpradeep kumar yadav
change the name of second trigger from 'mytrigger' to anything else
pradeep kumar yadavpradeep kumar yadav
And triggers are not written in this manner.....

In developer console...

click on new---> Apex Trigger----> then in Trigger name-- ' mytrigger' and object name-- 'Sol_sence_Sample__c'

and paste the code...
trigger mytrigger on Sol_sence_Sample__c (after update) {

     

    triggerHelper.objBMethod(Trigger.new, Trigger.oldMap);

}

And again...

click on new---> Apex Trigger----> then in Trigger name-- ' myanothertrigger' and object name-- 'Sample_Request__c'

and paste the code...
 
trigger mytrigger on Sample_Request__c (after update) {
     

    triggerHelper.objAMethod(Trigger.new, Trigger.oldMap);

}

And again new---> Apex Class----> class name ---'triggerHelper'

and paste the code...
 
public class triggerHelper{
    
    public boolean objAflag = true;
    public boolean objBflag = true;
    
    public static void objAMethod(List<Sample_Request__c> newList, Map<ID, Sample_Request__c> oldMap{
        
        if(triggerHelper.objAflag){
            triggerHelper.objAflag = false;
            
                for(Sample_Request__c xyz : newList){
        
        			if(xyz.Sample_Request_Status__c != oldMap.get(xyz.ID).Sample_Request_Status__c){
            
            			flag = true;
        			}
    			}
    
        		if(flag == true){
        
        			List<Sol_sence_Sample__c> newobjBList = new List<Sol_sence_Sample__c>();
        
        			List<Sol_sence_Sample__c> objBList  = [Select ID, Shipped__c from Sol_sence_Sample__c];
        			
                    for(Sol_sence_Sample__c a : objBList){
            
            			newobjBList.add(new Sol_sence_Sample__c(ID = a.ID, Shipped__c = true));
        			}
        
                    
                    triggerHelper.objBflag = false;
                    
        			update newobjBList;
    			}

        }
    }
                                  
                                  
   
        public static void objBMethod(List<Sol_sence_Sample__c> newList, Map<ID, Sol_sence_Sample__c> oldMap{
        
        if(triggerHelper.objBflag){
            triggerHelper.objBflag = false;
            
                for(Sol_sence_Sample__c xyz : newList){
        
        			if(xyz.Shipped__c != oldMap.get(xyz.ID).Shipped__c){
            
            			flag = true;
        			}
    			}
    
        		if(flag == true){
        
        			List<Sample_Request__c> newobjAList = new List<Sample_Request__c>();
        
        			List<Sample_Request__c> objAList  = [Select ID, Sample_Request_Status__c from Sample_Request__c];
        			
                    for(Sample_Request__c a : objAList){
            
            			newobjAList.add(new Sample_Request__c(ID = a.ID, Sample_Request_Status__c = 'shipped'));
        			}
        
                    
                    triggerHelper.objAflag = false;
                    
        			update newobjAList;
    			}

        }
    }
}

 
Josh GitogoJosh Gitogo
I keep on running into small errors such as 'expecting a right parentheses, found 'if'' on line 8
public class samplecheckhelp {

     public boolean objAflag = true;
    public boolean objBflag = true;
     
    public static void objAMethod(List<Sample_Request__c> newList, Map<ID, Sample_Request__c> oldMap
         
        if(samplecheckhelp.objAflag){
            samplecheckhelp.objAflag = false;
             
                for(Sample_Request__c xyz : newList){
         
                    if(xyz.Sample_Request_Status__c != oldMap.get(xyz.ID).Sample_Request_Status__c){
             
                        flag = true;
                    }
                }
     
                if(flag == true){
         
                    List<Sol_sence_Sample__c> newobjBList = new List<Sol_sence_Sample__c>();
         
                    List<Sol_sence_Sample__c> objBList = [Select ID, Shipped__c from Sol_sence_Sample__c];
                     
                    for(Sol_sence_Sample__c a : objBList){
             
                        newobjBList.add(new Sol_sence_Sample__c(ID = a.ID, Shipped__c = true));
                    }
         
                     
                    samplecheckhelp.objBflag = false;
                     
                    update newobjBList;
                }
 
        }
    }
                                   
                                   
    
        public static void objBMethod(List<Sol_sence_Sample__c> newList, Map<ID, Sol_sence_Sample__c> oldMap{
         
        if(samplecheckhelp.objBflag){
            samplecheckhelp.objBflag = false;
             
                for(Sol_sence_Sample__c xyz : newList){
         
                    if(xyz.Shipped__c != oldMap.get(xyz.ID).Shipped__c){
             
                        flag = true;
                    }
                }
     
                if(flag == true){
         
                    List<Sample_Request__c> newobjAList = new List<Sample_Request__c>();
         
                    List<Sample_Request__c> objAList = [Select ID, Sample_Request_Status__c from Sample_Request__c];
                     
                    for(Sample_Request__c a : objAList){
             
                        newobjAList.add(new Sample_Request__c(ID = a.ID, Sample_Request_Status__c = 'shipped'));
                    }
         
                     
                    samplecheckhelp.objAflag = false;
                     
                    update newobjAList;
                }
 
        }
    }
}

}
pradeep kumar yadavpradeep kumar yadav
you missed the curly bracket... and right parenthesis...
public static void objAMethod(List<Sample_Request__c> newList, Map<ID, Sample_Request__c> oldMap) {
every method should be enclosed in curly bracket..
pradeep kumar yadavpradeep kumar yadav
I missed the parenthesis on both methods ..... put parenthesis...
 
public static void objBMethod(List<Sol_sence_Sample__c> newList, Map<ID, Sol_sence_Sample__c> oldMap) {


These are common error you should check these errors carefully..
pradeep kumar yadavpradeep kumar yadav
public class triggerHelper{
    
    public boolean objAflag = true;
    public boolean objBflag = true;
    
    public static void objAMethod(List<Sample_Request__c> newList, Map<ID, Sample_Request__c> oldMap){
        
        if(triggerHelper.objAflag){
            triggerHelper.objAflag = false;
            
                for(Sample_Request__c xyz : newList){
        
        			if(xyz.Sample_Request_Status__c != oldMap.get(xyz.ID).Sample_Request_Status__c){
            
            			flag = true;
        			}
    			}
    
        		if(flag == true){
        
        			List<Sol_sence_Sample__c> newobjBList = new List<Sol_sence_Sample__c>();
        
        			List<Sol_sence_Sample__c> objBList  = [Select ID, Shipped__c from Sol_sence_Sample__c];
        			
                    for(Sol_sence_Sample__c a : objBList){
            
            			newobjBList.add(new Sol_sence_Sample__c(ID = a.ID, Shipped__c = true));
        			}
        
                    
                    triggerHelper.objBflag = false;
                    
        			update newobjBList;
    			}

        }
    }
                                  
                                  
   
        public static void objBMethod(List<Sol_sence_Sample__c> newList, Map<ID, Sol_sence_Sample__c> oldMap){
        
        if(triggerHelper.objBflag){
            triggerHelper.objBflag = false;
            
                for(Sol_sence_Sample__c xyz : newList){
        
        			if(xyz.Shipped__c != oldMap.get(xyz.ID).Shipped__c){
            
            			flag = true;
        			}
    			}
    
        		if(flag == true){
        
        			List<Sample_Request__c> newobjAList = new List<Sample_Request__c>();
        
        			List<Sample_Request__c> objAList  = [Select ID, Sample_Request_Status__c from Sample_Request__c];
        			
                    for(Sample_Request__c a : objAList){
            
            			newobjAList.add(new Sample_Request__c(ID = a.ID, Sample_Request_Status__c = 'shipped'));
        			}
        
                    
                    triggerHelper.objAflag = false;
                    
        			update newobjAList;
    			}

        }
    }
}

 
Mohit Sharma 37Mohit Sharma 37
Hi Josh Gitogo,

You can use this code, it may be good for you...
 
trigger trgSample_Request on Sample_Request__c(after insert, after update) {
    Set<Id> setIdSR = new Set<Id>();
    
    for(Sample_Request__c eachSR : Trigger.New)
    {
        if(eachSR.Sample_Request_Status__c != null && eachSR.Sample_Request_Status__c == 'Shipped')
        {
            // This will work on after update.
            if(Trigger.OldMap != null && Trigger.OldMap.size() > 0 && Trigger.OldMap.get(eachSR.Id).Sample_Request_Status__c != eachSR.Sample_Request_Status__c)
        		setIdSR.add(eachSR.Id);
            else
                setIdSR.add(eachSR.Id);
        }
    }
    
    if(setIdSR != null && setIdSR.size() > 0)
    {
       // Please verify the api name of Master Sample_Request__c lookup and use below before IN in query
        
        List<Solesence_Sample__c> lstSS = [Select Id, Name from Solesence_Sample__c Where Sample_Request__c IN :setIdSR AND Shipped__c != true];
        if(lstSS != null && lstSS.size() > 0)
        {
            for(Solesence_Sample__c eachSS : lstSS)
            {
                eachSS.Shipped__c = true;
            }
            
            update lstSS;
        }
    }
}

If it will help then mark it as best answer. :)

Have a nice day!!

Thanks!!