//Trigger to prevent duplicate accounts. Matches records based on Account Name and Account Number
trigger accountDeDuplicationTrigger on Account(before insert, before update) {
//Map to store account name and account details
Map> accNameMap = new Map>();
//Map to store account number and account details
Map> accNumMap = new Map>();
//Your dynamic query
String accountDynamicQuery = 'select Id,Name,AccountNumber from Account' ;
//Typecasting it to map
Map mapAcc = new Map((List)Database.query(accountDynamicQuery));
//Looping the map keys to prepare a map for Account Name and Account Number
for(Id id:mapAcc.keySet())
{
if(accNameMap.get(mapAcc.get(id).Name)!=null)
accNameMap.get(mapAcc.get(id).Name).put(Id,mapAcc.get(id));
else
accNameMap.put(mapAcc.get(id).Name, new Map{Id => mapAcc.get(id)});
if(accNumMap.get(mapAcc.get(id).AccountNumber)!=null)
accNumMap.get(mapAcc.get(id).AccountNumber).put(Id,mapAcc.get(id));
else
accNumMap.put(mapAcc.get(id).AccountNumber, new Map{Id => mapAcc.get(id)});
}
//Processing records
for(Account acc:trigger.new)
{
Map tempMap = new Map();
if((accNameMap.get(acc.Name)!=null && !accNameMap.get(acc.Name).containsKey(acc.Id)) || (accNumMap.get(acc.AccountNumber)!=null && !accNumMap.get(acc.AccountNumber).containsKey(acc.Id)))
{
String temp = '';
if(accNameMap.get(acc.Name)!=null && !accNameMap.get(acc.Name).containsKey(acc.Id))
{
tempMap = accNameMap.get(acc.Name);
temp = 'Duplicate Account Name(s) found:';
for(Id id:tempMap.keySet())
temp+=tempMap.get(id).Name+'('+id+'), ';
}
else if(accNumMap.get(acc.AccountNumber)!=null && !accNumMap.get(acc.AccountNumber).containsKey(acc.Id))
{
tempMap = accNumMap.get(acc.AccountNumber);
temp = 'Duplicate Account Number(s) found:';
for(Id id:tempMap.keySet())
temp+=tempMap.get(id).Name+' - '+tempMap.get(id).AccountNumber+'('+id+'), ';
}
//Removing last comma
temp = temp.substring(0,temp.length()-2);
//Adding error to the record
acc.addError(temp);
}
}
}
Friday, 2 August 2013
Account DeDupe Trigger
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment