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
MokshadaMokshada 

I have written trigger for create contact when only account name is update, if I change any field on account it is creating new contact with the same lastname as accountname

I have writen trigger for create contact when accountname is update  if I change any field on account it is creating new contact But I want it for account name only. supoose 
if I update any field on account it is creating new contact
I want to create contact only if account name is updated.

code:-
trigger AccountContactTrig on Account (after insert,before update) {
    
    If(Trigger.isinsert && Trigger.isafter){
        List<Contact> cont = new List <Contact>();
        
        for(Account acc : trigger.new){
            
            Contact c = new Contact();
            c.AccountId=acc.id;
            c.LastName = acc.name;
            cont.add(c);
        }
        insert cont; 
    }
    if(Trigger.isupdate && Trigger.isbefore){
        Set<String> accnames= new Set<String>();
        For(Account acc:Trigger.new){
            Account oldacc= Trigger.oldmap.get(acc.id);
            if(acc.name!= oldacc.Name){
                accnames.add(acc.name);
            }
        }
        Map<Id,Account> mapaccounts = new Map<Id,Account>([Select Name,(Select id, Lastname from contacts where Lastname in: accnames) from Account where id in:Trigger.new]);
        List<Contact> cont = new List <Contact>();
        for(Account ac: Trigger.new){
            if(mapaccounts.containsKey(ac.id)){
                if(mapaccounts.get(ac.id).Contacts.size()==0){
                        Contact c = new Contact();
                        c.AccountId=ac.id;
                        c.LastName = ac.name;
                        cont.add(c);
               
                }
                    
            }
        }
         insert cont;
    }
}
can anyone help?
Thanks
Shri RajShri Raj
trigger AccountContactTrig on Account (after update) {
  Set<String> accnames= new Set<String>();
  For(Account acc:Trigger.new){
    Account oldacc= Trigger.oldmap.get(acc.id);
    if(acc.name != oldacc.Name){
      accnames.add(acc.name);
    }
  }
  if(accnames.size() > 0) {
    Map<Id,Account> mapaccounts = new Map<Id,Account>([Select Name,(Select id, Lastname from contacts where Lastname in: accnames) from Account where id in:Trigger.new]);
    List<Contact> cont = new List <Contact>();
    for(Account ac: Trigger.new){
      if(mapaccounts.containsKey(ac.id)){
        if(mapaccounts.get(ac.id).Contacts.size() == 0){
          Contact c = new Contact();
          c.AccountId = ac.id;
          c.LastName = ac.name;
          cont.add(c);
        }
      }
    }
    insert cont;
  }
}