Trigger: Prevent Contact being Created/Updated with duplicate Email

Scenario:  Write Trigger on Contact to prevent inserting or updating duplicate Contacts. Use Email field to compare with existing Contacts record.

ContactTrigger
trigger ContactTrigger on Contact (before insert, before update) {
    if(trigger.isBefore && trigger.isInsert || trigger.isUpdate) { 
        ContactTriggerHandler.checkDuplicateEmail(trigger.new);
    }
}
ContactTriggerHandler Approach 1
public class ContactTriggerHandler {

    public static void checkDuplicateEmail(List<Contact> conLst) { 
        // What we have handled - allow to insert contact with null/empty email
        Set<String> setEmail = new Set<String>();
        Map<String,Id> mapExistingEmailtoCon = new Map<String,Id>();
        for(Contact con : conLst){
            if(con.Email != null || con.Email != ''){
                setEmail.add(con.Email.toLowerCase());
            }
        }
        for(Contact cont : [Select Id , Email from Contact where Email In: setEmail]){
            mapExistingEmailtoCon.put(cont.Email.toLowerCase(), cont.Id);
        }
        System.debug(mapExistingEmailtoCon);
        for(Contact con : conLst){
            if(con.Email!= null && mapExistingEmailtoCon.containsKey(con.Email.toLowerCase())){
                con.addError('Contact with same email already exist');
            }
        }
    }
}
ContactTriggerHandler Approach 2
public class ContactTriggerHandler {
    public static void checkDuplicateEmailOnInsert(List<Contact> conLst) { 
        // Approach 2 - This will hit limit
        // What we have handled - allow to insert contact with null/empty email
        // Problems:Here limit will be hit Solution
    	List<Contact> existingContacts = [Select Email From Contact];
        List<String> emailsLst = new List<String>();
        for(Contact con: existingContacts) { 
            emailsLst.add(con.Email);
        }
        for(Contact con: conLst) { 
            if(con.Email != null && con.Email != '' && emailsLst.contains(con.Email)){
                con.AddError('Contact with same email already exist');
            } 
        }
    }
}

Leave a Reply