trigger UpdateAccountNameFromContactLastName on Contact (before insert, after insert, before update, after update, before delete, after delete, after undelete) { set setAccountIds = new set() ; if(Trigger.isInsert){ for(Contact oContact : Trigger.New){ if(oContact.lastName != null) { //although lastName is required field; still checking for null setAccountIds.add(oContact.accountId) ; } } } system.debug('after insert-setAccountIds:: ' + setAccountIds) ; if(Trigger.isUpdate){ for(Contact oContact : Trigger.New){ if(oContact.lastName != null && oContact.lastName != Trigger.oldMap.get(oContact.Id).lastName) setAccountIds.add(oContact.accountId) ; } } system.debug('after update-setAccountIds:: ' + setAccountIds) ; if(Trigger.isDelete){ for(Contact oContact : Trigger.Old){ if(oContact.lastName != null) setAccountIds.add(oContact.accountId) ; } } system.debug('after delete-setAccountIds:: ' + setAccountIds) ; if(Trigger.isUndelete){ for(Contact oContact : Trigger.New){ if(oContact.lastName != null) setAccountIds.add(oContact.accountId) ; } } system.debug('after undelete-setAccountIds:: ' + setAccountIds) ; if(!setAccountIds.isEmpty()){ set setContactName = new set() ; list listAccountToUpdate = new list() ; list listAccount = [Select Id, Name, (Select Id, LastName from Contacts order by createddate) From Account Where Id IN: setAccountIds] ; if(listAccount != null && !listAccount.isEmpty()){ for(Account oAccount : listAccount){ oAccount.Name = '' ; for(Contact oContact : oAccount.Contacts){ if(!setContactName.contains(oContact.lastName)){ if(oAccount.Name == null) oAccount.Name = oContact.lastName ; else oAccount.Name = oAccount.Name + ' ' + oContact.lastName ; setContactName.add(oContact.lastName) ; } } listAccountToUpdate.add(oAccount) ; } } if(!listAccountToUpdate.isEmpty()) update listAccountToUpdate ; } }