//Trigger to prevent duplicate contacts. Matches based on Email.
trigger contactDeDuplicationTrigger on Contact (before insert, before update) {
//Map to store email and contact details
Map> emailConMap = new Map>();
//Your dynamic query
String contactDynamicQuery = 'select Id,Name,Email from Contact' ;
//Typecasting it to map
Map mapCon = new Map((List)Database.query(contactDynamicQuery));
//Looping the map keys to prepare a map for Email and Contact object
for(Id id:mapCon.keySet())
{
if(emailConMap.get(mapCon.get(id).Email)!=null)
emailConMap.get(mapCon.get(id).Email).put(Id,mapCon.get(id));
else
emailConMap.put(mapCon.get(id).Email, new Map{Id => mapCon.get(id)});
}
//Processing records
for(Contact con:trigger.new)
{
Map tempMap = new Map();
if(emailConMap.get(con.Email)!=null && !emailConMap.get(con.Email).containsKey(con.Id))
{
tempMap = emailConMap.get(con.Email);
String temp = 'Duplicates found:';
for(Id id:tempMap.keySet())
temp+=tempMap.get(id).Name+'('+id+'), ';
//Removing last comma
temp = temp.substring(0,temp.length()-2);
//Adding error to the record
con.addError(temp);
}
}
}
Friday, 2 August 2013
Contact DeDupe Trigger
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment