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
vijay kumar kvijay 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();
    }
Adilson Arcoverde JrAdilson Arcoverde Jr
Hi Vijay,

Try this code:
trigger Display_Faculty_Names on Faculty__c (after insert,after update,after delete,after undelete) {
    // These events will add faculty members on registration field
    Map<String,Registration__c> registrationsToUpdateMap = new Map<String,Registration__c>();
    if( Trigger.isInsert || Trigger.isUpdate || Trigger.isUndelete ) {
        Set<String> registrationToProcess = new Set<String>();
        for( Faculty__c faculty : Trigger.new ) {
            registrationToProcess.add( faculty.Registration__c );
        }
        Map<String,Registration__c> registrationsMap = new Map<String,Registration__c>( [Select Id, Faculty_Names__c from Registration__c where Id in :registrationToProcess] );

        for( Faculty__c faculty : Trigger.new ) {
            if( Trigger.isUpdate && faculty.Name != Trigger.oldMap.get( faculty.Id ).Name ) {
                Registration__c registration = registrationsMap.get( faculty.Registration__c )
                registration.Name = registration.replace( Trigger.oldMap.get( faculty.Id ).Name, faculty.Name );
                registrationsToUpdateMap.put( registration.Id, registration );
            } else {
                Registration__c registration = registrationsMap.get( faculty.Registration__c )
                registration.Name += faculty.Name + ',';
                registrationsToUpdateMap.put( registration.Id, registration );
            }
        }
    } else if( Trigger.isDelete ) {
        Set<String> registrationToProcess = new Set<String>();
        for( Faculty__c faculty : Trigger.old ) {
            registrationToProcess.add( faculty.Registration__c );
        }
        Map<String,Registration__c> registrationsMap = new Map<String,Registration__c>( [Select Id, Faculty_Names__c from Registration__c where Id in :registrationToProcess] );
        
        for( Faculty__c faculty : Trigger.old ) {
            Registration__c registration = registrationsMap.get( faculty.Registration__c );
            registration.Name = registration.Name.replace( faculty.Name + ',', '' );
            registrationsToUpdateMap.put( registration.Id, registration );
        }
    }

    if( registrationsToUpdateMap.values().size() > 0 ) update registrationsToUpdateMap.values();
}

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

Regards.