Friday, 2 August 2013

Account DeDupe Trigger

//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);
    }
}
}

No comments:

Post a Comment