You need to sign in to do that
Don't have an account?

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
{
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
Select it as Best Answer, if it solves your problem.
{
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');
}
}
}
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.
Hi Nayana K
Thank you for your reply. Its working fine thanks.
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
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"