You need to sign in to do that
Don't have an account?

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;
}
}
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
Hi,
Many thanks for this. But unfortunately its not working for me.. I am getting the following error..
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;
}
Hi Hitesh N. Patel,
Thanks a lot, Everything is working fine....
Regards,
Kumar