You need to sign in to do that
Don't have an account?
vijay kumar k
How to populate all child names in parent field
Hi
here i have Registration(parent) and Faculty(child).I want to show Faculty names under same registration on parent field(Faculty_Names__c).
I already wrote code but it doesen't work delete event that too parent field shows only deleted name when i was test it.
please correct me where i was wrong or send me correct/related code.
ThankYou
trigger Display_Faculty_Names on Faculty__c (after insert,after update,after delete,after undelete) {
set<id> regiids=new set<id>();
List<Registration__c> RegiList=new List<Registration__c>();
Map<id,Registration__c> regiMap=new map<id,Registration__c>();
if(trigger.isinsert || trigger.isupdate || trigger.isundelete){
for(Faculty__c f1:trigger.new){
if(f1.RegistrationId__c!=null){
regiids.add(f1.RegistrationId__c);
if(trigger.isupdate){
if(trigger.oldmap.get(f1.id).RegistrationId__c!=f1.RegistrationId__c){
regiids.add(trigger.oldmap.get(f1.id).RegistrationId__c);
regiids.add(f1.RegistrationId__c);
}
}
}
}
}
if(trigger.isdelete){
for(Faculty__c f1:trigger.old){
regiids.add(f1.RegistrationId__c);
system.debug('trigger.old'+trigger.old.size());
}
}
RegiList=[select id,name,Faculty_Names__c from Registration__c where id=:regiids];
for(Registration__c a:RegiList){
regiMap.put(a.id,a);
}
if(trigger.isinsert || trigger.isundelete){
for(Faculty__c f:trigger.new){
if(regiMap.containsKey(f.RegistrationId__c)){
Registration__c r=regiMap.get(f.RegistrationId__c);
if(r.Faculty_Names__c==null){
r.Faculty_Names__c=f.Name;
}else if(!r.Faculty_Names__c.containsIgnoreCase(f.Name)){
r.Faculty_Names__c+=','+f.Name;
}
regiMap.put(f.RegistrationId__c,r);
}
}
if(regiMap.values().size()>0)
update regiMap.values();
}
List<AggregateResult> aggresult=[Select count(id) countid,RegistrationId__c,Name from Faculty__c Group By RegistrationId__c,Name];
if(trigger.isupdate){
for(AggregateResult agg:aggresult){
string rid=String.valueOf(agg.get('RegistrationId__c'));
string fname=String.valueOf(agg.get('Name'));
if((trigger.oldmap.get(agg.id).RegistrationId__c != agg.get('RegistrationId__c')) || trigger.oldmap.get(agg.id).Name != agg.get('Name')){
if(regiMap.containsKey(rid)){
Registration__c r=regiMap.get(rid);
if(r.Faculty_Names__c==null){
r.Faculty_Names__c=fname;
}else if(!r.Faculty_Names__c.containsIgnoreCase(fname)){
r.Faculty_Names__c+=','+fname;
}
regiMap.put(rid,r);
}
if(regiMap.containsKey(trigger.oldmap.get(agg.id).RegistrationId__c)){
integer facid=integer.valueof(agg.get('countid'));
Registration__c a=regiMap.get(trigger.oldmap.get(agg.id).RegistrationId__c );
if(facid == 1){
if(a.Faculty_Names__c.contains(fname+',')){
a.Faculty_Names__c=a.Faculty_Names__c.remove(fname+',');
}else{
a.Faculty_Names__c=a.Faculty_Names__c.remove(','+fname);
}
}
regiMap.put(trigger.oldmap.get(agg.id).RegistrationId__c,a);
}
}
}
if(regiMap.values().size()>0)
update regiMap.values();
}
if(trigger.isdelete){
for(AggregateResult agg:aggresult){
string rid=String.valueOf(agg.get('RegistrationId__c'));
string fname=String.valueOf(agg.get('Name'));
integer facid=integer.valueof(agg.get('countid'));
if(regiMap.containsKey(rid)){
Registration__c a=regiMap.get(rid);
if(facid == 1){
system.debug('testfacultyname'+a.Faculty_Names__c);
if(a.Faculty_Names__c.contains(fname+',')){
system.debug('test2'+a.Faculty_Names__c);
a.Faculty_Names__c=a.Faculty_Names__c.remove(fname+',');
}else{
a.Faculty_Names__c=a.Faculty_Names__c.remove(','+fname);
}
}
regiMap.put(rid,a);
}
}
if(regiMap.values().size()>0)
update regiMap.values();
}
}
here i have Registration(parent) and Faculty(child).I want to show Faculty names under same registration on parent field(Faculty_Names__c).
I already wrote code but it doesen't work delete event that too parent field shows only deleted name when i was test it.
please correct me where i was wrong or send me correct/related code.
ThankYou
trigger Display_Faculty_Names on Faculty__c (after insert,after update,after delete,after undelete) {
set<id> regiids=new set<id>();
List<Registration__c> RegiList=new List<Registration__c>();
Map<id,Registration__c> regiMap=new map<id,Registration__c>();
if(trigger.isinsert || trigger.isupdate || trigger.isundelete){
for(Faculty__c f1:trigger.new){
if(f1.RegistrationId__c!=null){
regiids.add(f1.RegistrationId__c);
if(trigger.isupdate){
if(trigger.oldmap.get(f1.id).RegistrationId__c!=f1.RegistrationId__c){
regiids.add(trigger.oldmap.get(f1.id).RegistrationId__c);
regiids.add(f1.RegistrationId__c);
}
}
}
}
}
if(trigger.isdelete){
for(Faculty__c f1:trigger.old){
regiids.add(f1.RegistrationId__c);
system.debug('trigger.old'+trigger.old.size());
}
}
RegiList=[select id,name,Faculty_Names__c from Registration__c where id=:regiids];
for(Registration__c a:RegiList){
regiMap.put(a.id,a);
}
if(trigger.isinsert || trigger.isundelete){
for(Faculty__c f:trigger.new){
if(regiMap.containsKey(f.RegistrationId__c)){
Registration__c r=regiMap.get(f.RegistrationId__c);
if(r.Faculty_Names__c==null){
r.Faculty_Names__c=f.Name;
}else if(!r.Faculty_Names__c.containsIgnoreCase(f.Name)){
r.Faculty_Names__c+=','+f.Name;
}
regiMap.put(f.RegistrationId__c,r);
}
}
if(regiMap.values().size()>0)
update regiMap.values();
}
List<AggregateResult> aggresult=[Select count(id) countid,RegistrationId__c,Name from Faculty__c Group By RegistrationId__c,Name];
if(trigger.isupdate){
for(AggregateResult agg:aggresult){
string rid=String.valueOf(agg.get('RegistrationId__c'));
string fname=String.valueOf(agg.get('Name'));
if((trigger.oldmap.get(agg.id).RegistrationId__c != agg.get('RegistrationId__c')) || trigger.oldmap.get(agg.id).Name != agg.get('Name')){
if(regiMap.containsKey(rid)){
Registration__c r=regiMap.get(rid);
if(r.Faculty_Names__c==null){
r.Faculty_Names__c=fname;
}else if(!r.Faculty_Names__c.containsIgnoreCase(fname)){
r.Faculty_Names__c+=','+fname;
}
regiMap.put(rid,r);
}
if(regiMap.containsKey(trigger.oldmap.get(agg.id).RegistrationId__c)){
integer facid=integer.valueof(agg.get('countid'));
Registration__c a=regiMap.get(trigger.oldmap.get(agg.id).RegistrationId__c );
if(facid == 1){
if(a.Faculty_Names__c.contains(fname+',')){
a.Faculty_Names__c=a.Faculty_Names__c.remove(fname+',');
}else{
a.Faculty_Names__c=a.Faculty_Names__c.remove(','+fname);
}
}
regiMap.put(trigger.oldmap.get(agg.id).RegistrationId__c,a);
}
}
}
if(regiMap.values().size()>0)
update regiMap.values();
}
if(trigger.isdelete){
for(AggregateResult agg:aggresult){
string rid=String.valueOf(agg.get('RegistrationId__c'));
string fname=String.valueOf(agg.get('Name'));
integer facid=integer.valueof(agg.get('countid'));
if(regiMap.containsKey(rid)){
Registration__c a=regiMap.get(rid);
if(facid == 1){
system.debug('testfacultyname'+a.Faculty_Names__c);
if(a.Faculty_Names__c.contains(fname+',')){
system.debug('test2'+a.Faculty_Names__c);
a.Faculty_Names__c=a.Faculty_Names__c.remove(fname+',');
}else{
a.Faculty_Names__c=a.Faculty_Names__c.remove(','+fname);
}
}
regiMap.put(rid,a);
}
}
if(regiMap.values().size()>0)
update regiMap.values();
}
}
Try this code:
I hope you find this solution helpful. If it does please mark as Best Answer to help others too.
Regards.