You need to sign in to do that
Don't have an account?
sriram k 15
Requirement to Print Error message If you enter duplicate values in Email And LastName fields in Contact Record? Can someone help me Trigger is firing only for LastName field not for Email?
trigger duplication_Rules_Contact on Contact (before insert,before update,after undelete) {
if(trigger.isBefore && (trigger.isInsert || trigger.isUpdate)){
ContactTriggerHepler.duplicateRules(trigger.new);
}
if(trigger.isAfter && trigger.isUndelete){
ContactTriggerHepler.duplicateRules(trigger.new);
}
}
public class ContactTriggerHepler {
public static void duplicateRules(List<Contact> licon){
set<String> NewEmail = new set<String>();
set<String> ExistingEmail = new Set<String>();
set<String> NlastName = new set<String>();
set<String> ExistingLastName = new set<String>();
for(Contact con : licon){
if(con.Email != null) {
NewEmail.add(con.Email);
}
if(con.LastName != null){
NlastName.add(con.LastName);
}
}
list<Contact> existingContact = [SELECT Id,Email,Phone,LastName from Contact where (Email =: NewEmail AND Email != null) AND
(LastName =: NlastName AND LastName != null) ];
for(Contact co : existingContact){
ExistingEmail.add(co.Email);
ExistingLastName.add(co.LastName);
}
for(Contact c : licon){
if(ExistingEmail.contains(c.email)){
c.addError('Duplicate Email in Contact');
}
else{
ExistingEmail.add(c.Email);
}
}
for(Contact c : licon){
if(ExistingLastName.contains(c.LastName)){
c.addError('Duplicate LastName in Contact');
}
else{
ExistingLastName.add(c.LastName);
}
}
}
}
if(trigger.isBefore && (trigger.isInsert || trigger.isUpdate)){
ContactTriggerHepler.duplicateRules(trigger.new);
}
if(trigger.isAfter && trigger.isUndelete){
ContactTriggerHepler.duplicateRules(trigger.new);
}
}
public class ContactTriggerHepler {
public static void duplicateRules(List<Contact> licon){
set<String> NewEmail = new set<String>();
set<String> ExistingEmail = new Set<String>();
set<String> NlastName = new set<String>();
set<String> ExistingLastName = new set<String>();
for(Contact con : licon){
if(con.Email != null) {
NewEmail.add(con.Email);
}
if(con.LastName != null){
NlastName.add(con.LastName);
}
}
list<Contact> existingContact = [SELECT Id,Email,Phone,LastName from Contact where (Email =: NewEmail AND Email != null) AND
(LastName =: NlastName AND LastName != null) ];
for(Contact co : existingContact){
ExistingEmail.add(co.Email);
ExistingLastName.add(co.LastName);
}
for(Contact c : licon){
if(ExistingEmail.contains(c.email)){
c.addError('Duplicate Email in Contact');
}
else{
ExistingEmail.add(c.Email);
}
}
for(Contact c : licon){
if(ExistingLastName.contains(c.LastName)){
c.addError('Duplicate LastName in Contact');
}
else{
ExistingLastName.add(c.LastName);
}
}
}
}
Can you change the condition from AND to OR in the query as shown below.
If this solution helps, Please mark it as best answer.
Thanks,
Try Below Code Please Mark It As Best Answer If It Helps
Thank You!
Hi CharuDutt,
The above code is giving error message with duplicate Email Field only. It is not giving error for duplicate LastName field.
ex: If we give Email : Different value (Doesn't exist in contact record's Email Field)
Lastname : Duplicate value (Existing in other contact record's LastName field)
It is not working.(I need both Email and LastName fields should be unique in each Record)