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
NANCY1NANCY1 

How to populate the Master field based on Detail field with multiple detail records ??

Hi,

 

I need to constantly update the master field based on the detail field value i.e. a picklist field with multiple values.

 

Master Object > RMG_Employee_Master__c

Master Object Field > Proposal_Status__c

 

Child Object > Proposal__c

Child Object Field > Status__c

 

 

I am able to update the master field based on the detail field value. But how can  loop through the multiple detail records to set the value of one master field:

 

trigger proposalstatus on Proposal__c (after insert,after update)
{

   List<RMG_Employee_Master__c> opps = new List<RMG_Employee_Master__c>();
   List<ID> masterIds = new List<ID>();
   Map<ID, String> childDetailMap = new Map<ID, String>();
  
   for(Proposal__c c: Trigger.new)
    {
      masterIds.add(c.RMG_Employee_Code__c);
      childDetailMap.put(c.RMG_Employee_Code__c, (c.Status__c));
    }
    opps = [select id, Proposal_Status__c from RMG_Employee_Master__c where id in :masterIds];
 
   for(RMG_Employee_Master__c rem: opps)
    {
      rem.Proposal_Status__c = childDetailMap.get(rem.id);
    }
    if(opps.size() > 0)
    {
     Update opps;
     }
}

Best Answer chosen by Admin (Salesforce Developers) 
hitzhitz

HI, SMaster

 

 

Try This Code ...... Which is tested and Workes For Me...................

 

trigger roposalstatus on Proposal__c (after insert,after update) {
   
    List < Id > empmasterIds = new List < Id >();
    List < Id > proposalIds = new List < Id >();

    for ( Proposal__c  c: Trigger.New ) {

        proposalIds.add( c.Id );
        empmasterIds.add( c.RMG_Employee_Code__c);

    }
    System.debug('----------> '+empmasterIds.size());
    List<RMG_Employee_Master__c> opps = [select id, Proposal_Status__c from RMG_Employee_Master__c where id in :empmasterIds];
    
    Map < Id ,RMG_Employee_Master__c > empmap = new Map < Id , RMG_Employee_Master__c >();

    for ( RMG_Employee_Master__c  a : opps   ) {
        empmap.put( a.Id, a);
    }

    List < RMG_Employee_Master__c > EmpToUpdate = new List < RMG_Employee_Master__c >();
    
    for(Proposal__c c: Trigger.New) {
        RMG_Employee_Master__c ac = empmap.get( c.RMG_Employee_Code__c );
            
        if ( ac == null ) {
            
            continue;
        }
        If (c.Status__c != 'Closed'){
            
             ac.Proposal_Status__c = c.Status__c;
             EmpToUpdate.add( ac );
            
        }else{
            ac.Proposal_Status__c = '';
            EmpToUpdate.add( ac );
        }
    }

    upsert EmpToUpdate;       

}

All Answers

hitzhitz

HI, NANCY
Use Below Trigger code ........

trigger roposalstatus on Proposal__c (after insert,after update) {
   
    List < Id > empmasterIds = new List < Id >();
    List < Id > proposalIds = new List < Id >();

    for ( Proposal__c  c : Trigger.New ) {

        proposalIds.add( c.Id );
        empmasterIds.add( c.RMG_Employee_Code__c );

    }
    
    List<RMG_Employee_Master__c> opps = [select id, Proposal_Status__c from RMG_Employee_Master__c where id in :empmasterIds];
    
    Map < Id ,RMG_Employee_Master__c > empmap = new Map < Id , RMG_Employee_Master__c >();

    for ( RMG_Employee_Master__c  a : opps   ) {
        empmap.put( a.Id, a);
    }

    List < RMG_Employee_Master__c > EmpToUpdate = new List < RMG_Employee_Master__c >();
    
    for(Proposal__c c: Trigger.New) {
        RMG_Employee_Master__c ac = empmap.get( c.RMG_Employee_Code__c );
            
        if ( ac == null ) {
            
            continue;
        }
        If (c.Status__c != 'Closed'){
            
             ac.Proposal_Status__c = c.Status__c;
             EmpToUpdate.add( ac );
            
        }else
            ac.Proposal_Status__c = '';
            EmpToUpdate.add( ac );
        }
    }

    upsert EmpToUpdate;       

}

 

 

Hopes This Will Helps You........... :)

SMasterSMaster

Hi,

 

Many thanks for this. But unfortunately its not working for me.. I am getting the following error..

 

Error: Compile Error: unexpected token: update at line 41 column 4 
hitzhitz

HI, SMaster

 

 

Try This Code ...... Which is tested and Workes For Me...................

 

trigger roposalstatus on Proposal__c (after insert,after update) {
   
    List < Id > empmasterIds = new List < Id >();
    List < Id > proposalIds = new List < Id >();

    for ( Proposal__c  c: Trigger.New ) {

        proposalIds.add( c.Id );
        empmasterIds.add( c.RMG_Employee_Code__c);

    }
    System.debug('----------> '+empmasterIds.size());
    List<RMG_Employee_Master__c> opps = [select id, Proposal_Status__c from RMG_Employee_Master__c where id in :empmasterIds];
    
    Map < Id ,RMG_Employee_Master__c > empmap = new Map < Id , RMG_Employee_Master__c >();

    for ( RMG_Employee_Master__c  a : opps   ) {
        empmap.put( a.Id, a);
    }

    List < RMG_Employee_Master__c > EmpToUpdate = new List < RMG_Employee_Master__c >();
    
    for(Proposal__c c: Trigger.New) {
        RMG_Employee_Master__c ac = empmap.get( c.RMG_Employee_Code__c );
            
        if ( ac == null ) {
            
            continue;
        }
        If (c.Status__c != 'Closed'){
            
             ac.Proposal_Status__c = c.Status__c;
             EmpToUpdate.add( ac );
            
        }else{
            ac.Proposal_Status__c = '';
            EmpToUpdate.add( ac );
        }
    }

    upsert EmpToUpdate;       

}

This was selected as the best answer
ManikumarManikumar

Hi Hitesh N. Patel,

 

Thanks a lot, Everything is working fine....

 

Regards,

Kumar