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
shobana shobana 1shobana shobana 1 

Using trigger giving alert message for duplicate email id

My scenario is to show an error message if lead as duplicate email ID. In lead i have three email field .Email, Alternate email 1, Alternate email 2 should be checked to keep the email ids unique. For e.g. If an email has been entered as a primary email id then it cannot be entered as a primary or as an alternate email id for another contact and the vice versa. 

I wrote a code but its not working. Can anyone help me out to solve this.
 

trigger DuplicateLead on Lead(before insert, before update) {
 Map<String, Id> mapLeads = NEW Map<String, String>();
 for(Lead l : [SELECT Email, Alternate_Email1__c,Alternate_Email_2__c FROM Lead]) {
  if(l.Email != NULL) {
   mapLeads.put(l.Email, l.Id);
  }
  if(l.Alternate_Email1__c != NULL) {
   mapLeads.put(l.Alternate_Email1__c , l.Id);
  }
  if(l.Alternate_Email_2__c != NULL) {
   mapLeads.put(l.Alternate_Email_2__c, l.Id);
  }
 }
 for(Lead l : Trigger.NEW) {
  Boolean flag = FALSE;
   if ((l.Email==l.Alternate_Email1__c) || (l.Email==l.Alternate_Email_2__c) || (l.Alternate_Email1__c== l.Alternate_Email_2__c))
  if (mapLeads.containsKey(l.Email)) {
   flag = TRUE;
  }
  if (mapLeads.containsKey(l.Alternate_Email1__c )) {
   flag = TRUE;
  }
  if (mapLeads.containsKey(l.Alternate_Email_2__c )) {
   flag = TRUE;
  }
  if(flag) {
  l.addError('Error:Provided email id already exist for another record');
  }
 }
Thanks In Advance
Best Answer chosen by shobana shobana 1
Nayana KNayana K
trigger DuplicateLead on Lead(before insert, before update) 
{

    Map<String, Lead> mapEmailToLead = new Map<String, Lead>();
Lead objLead : Trigger.New) 
    {    
        if((String.isNotBlank(objLead.Email) && String.isNotBlank(objLead.Alternate_Email1__c) && objLead.Email == objLead.Alternate_Email1__c)
            || 
            (String.isNotBlank(objLead.Alternate_Email1__c) && String.isNotBlank(objLead.Alternate_Email_2__c) && objLead.Alternate_Email1__c == objLead.Alternate_Email_2__c)
            ||
            (String.isNotBlank(objLead.Email) && String.isNotBlank(objLead.Alternate_Email_2__c) && objLead.Email == objLead.Alternate_Email_2__c)
            )
        {    
            objLead.addError('Error: Primary and alternative emails can't be same');
        }
        
        if(String.isNotBlank(objLead.Email))
        {
            if(!mapEmailToLead.containsKey(objLead.Email))
                mapEmailToLead.put(objLead.Email, objLead);
        }
        
        if(String.isNotBlank(objLead.Alternate_Email1__c))
        {
            if(!mapEmailToLead.containsKey(objLead.Alternate_Email1__c))
                mapEmailToLead.put(objLead.Alternate_Email1__c, objLead);
        }
        
        if(String.isNotBlank(objLead.Alternate_Email_2__c))
        {
            if(!mapEmailToLead.containsKey(objLead.Alternate_Email_2__c))
                mapEmailToLead.put(objLead.Alternate_Email_2__c, objLead);
        }
        
    }
    
    for(Lead objExistingLead : [SELECT Email, Alternate_Email1__c, Alternate_Email2__c
                                FROM Lead 
                                WHERE (Email IN : mapEmailToLead.keySet()) 
                                    OR (Alternate_Email1__c IN : mapEmailToLead.keySet())
                                    OR (Alternate_Email2__c IN : mapEmailToLead.keySet())
                                ])
    {
        if(mapEmailToLead.containsKey(objExistingLead.Email))
        {
            mapEmailToLead.get(objExistingLead.Email).addError('Error: Provided email id already exist for another record');
        }
        
        if(mapEmailToLead.containsKey(objExistingLead.Alternate_Email1__c))
        {
            mapEmailToLead.get(objExistingLead.Alternate_Email1__c).addError('Error: Provided Alternate Email1 id already exist for another record');
        }
        
        if(mapEmailToLead.containsKey(objExistingLead.Alternate_Email2__c))
        {
            mapEmailToLead.get(objExistingLead.Alternate_Email2__c).addError('Error: Provided Alternate Email2  id already exist for another record');
        }
    }

}

All Answers

mritzimritzi
Following trigger would do the trick for you
 
trigger DuplicateLead on Lead(before insert, before update) {
	
	if(Trigger.isBefore && (Trigger.isUpdate || Trigger.isInsert)){
		for(Lead l :Trigger.new){
			if(l.Email == l.Alternate_Email_1__c || l.Email == l.Alternate_Email_2__c || l.Alternate_Email_1__c == l.Alternate_Email_2__c)
				l.addError('Duplicate Email found');
		}
	}

}


Select it as Best Answer, if it solves your problem.
 
Kumar__GauravKumar__Gaurav
I have checked this code, worked for me.
 
trigger DuplicateLead on Lead(before insert, before update) {
 Map<String, Id> mapLeads = NEW Map<String, String>();
 for(Lead l : [SELECT Email, Alternate_Email1__c,Alternate_Email_2__c FROM Lead]) {
  if(l.Email != NULL) {
   mapLeads.put(l.Email, l.Id);
  }
  if(l.Alternate_Email1__c != NULL) {
   mapLeads.put(l.Alternate_Email1__c , l.Id);
  }
  if(l.Alternate_Email_2__c != NULL) {
   mapLeads.put(l.Alternate_Email_2__c, l.Id);
  }
 }
 for(Lead l : Trigger.NEW) {
  Boolean flag = FALSE;
   if ((l.Email==l.Alternate_Email1__c) || (l.Email==l.Alternate_Email_2__c) || (l.Alternate_Email1__c== l.Alternate_Email_2__c))
  if (mapLeads.containsKey(l.Email)) {
   flag = TRUE;
  }
  if (mapLeads.containsKey(l.Alternate_Email1__c )) {
   flag = TRUE;
  }
  if (mapLeads.containsKey(l.Alternate_Email_2__c )) {
   flag = TRUE;
  }
  if(flag) {
  l.addError('Error:Provided email id already exist for another record');
  }
 }
 }


 
Nayana KNayana K
trigger DuplicateLead on Lead(before insert, before update) 
{

    Map<String, Lead> mapEmailToLead = new Map<String, Lead>();
Lead objLead : Trigger.New) 
    {    
        if((String.isNotBlank(objLead.Email) && String.isNotBlank(objLead.Alternate_Email1__c) && objLead.Email == objLead.Alternate_Email1__c)
            || 
            (String.isNotBlank(objLead.Alternate_Email1__c) && String.isNotBlank(objLead.Alternate_Email_2__c) && objLead.Alternate_Email1__c == objLead.Alternate_Email_2__c)
            ||
            (String.isNotBlank(objLead.Email) && String.isNotBlank(objLead.Alternate_Email_2__c) && objLead.Email == objLead.Alternate_Email_2__c)
            )
        {    
            objLead.addError('Error: Primary and alternative emails can't be same');
        }
        
        if(String.isNotBlank(objLead.Email))
        {
            if(!mapEmailToLead.containsKey(objLead.Email))
                mapEmailToLead.put(objLead.Email, objLead);
        }
        
        if(String.isNotBlank(objLead.Alternate_Email1__c))
        {
            if(!mapEmailToLead.containsKey(objLead.Alternate_Email1__c))
                mapEmailToLead.put(objLead.Alternate_Email1__c, objLead);
        }
        
        if(String.isNotBlank(objLead.Alternate_Email_2__c))
        {
            if(!mapEmailToLead.containsKey(objLead.Alternate_Email_2__c))
                mapEmailToLead.put(objLead.Alternate_Email_2__c, objLead);
        }
        
    }
    
    for(Lead objExistingLead : [SELECT Email, Alternate_Email1__c, Alternate_Email2__c
                                FROM Lead 
                                WHERE (Email IN : mapEmailToLead.keySet()) 
                                    OR (Alternate_Email1__c IN : mapEmailToLead.keySet())
                                    OR (Alternate_Email2__c IN : mapEmailToLead.keySet())
                                ])
    {
        if(mapEmailToLead.containsKey(objExistingLead.Email))
        {
            mapEmailToLead.get(objExistingLead.Email).addError('Error: Provided email id already exist for another record');
        }
        
        if(mapEmailToLead.containsKey(objExistingLead.Alternate_Email1__c))
        {
            mapEmailToLead.get(objExistingLead.Alternate_Email1__c).addError('Error: Provided Alternate Email1 id already exist for another record');
        }
        
        if(mapEmailToLead.containsKey(objExistingLead.Alternate_Email2__c))
        {
            mapEmailToLead.get(objExistingLead.Alternate_Email2__c).addError('Error: Provided Alternate Email2  id already exist for another record');
        }
    }

}
This was selected as the best answer
shobana shobana 1shobana shobana 1
Hi kumar

Thank you for your reply.
I already tried this but the thing is its taking an null value also iin account and its displaying the error messag.
 
shobana shobana 1shobana shobana 1

Hi Nayana K

Thank you for your reply. Its working fine thanks.
 

shobana shobana 1shobana shobana 1
Hi Nayana K
Its showing an alart message if the field is empty(it matching the field with an empty field from other record). How can we avoid this. Can you please give me suggesstion
Nayana KNayana K
Sorry for the delay. I have added filter check String.isNotBlank to avoid empty match. Can you please let me know exactly on which usecase it is not working.
shobana shobana 1shobana shobana 1

Hi Nayana

Sorry for late reply. I have tried the same code for contact object also. Whem am trying to convert the leade with exiting contact details it throwing an error like "Error: Validation error on Contact: Error:Provided email id already exist for another record"