trigger SameTypeBrandCheckTrigger on Marketing_Source__c (before insert,before update) {
//Read custom settings
Marketing_Source_Trigger_Switch__c ms_switch=Marketing_Source_Trigger_Switch__c.getValues('SameTypeBrandCheckTrigger');
if(ms_switch!=null
&& ms_switch.isActive__c){
if(trigger.isbefore){
if(trigger.isinsert){
if(!Test.isRunningTest()){
SameTypeBrandCheckTriggerHelper.checkForSameTypeBrand(trigger.new);
}
}
if(trigger.isupdate){
for(Id mId:trigger.newMap.keyset()){
//check for a change in type or brand
if(trigger.oldMap.get(mId).Type__c!=trigger.newMap.get(mId).Type__c
|| trigger.oldMap.get(mId).Brand__c!=trigger.newMap.get(mId).Brand__c){
if(!Test.isRunningTest()){
SameTypeBrandCheckTriggerHelper.checkForSameTypeBrand(trigger.new);
}
}
}
}
}
}
}
Helper class:
=========
/*
@date: 13/June/2018
@description: Helper class for SameTypeBrandCheckTrigger to prevent duplicate marketing source records
with same combination of Type and Brand
*/
public class SameTypeBrandCheckTriggerHelper {
public static void checkForSameTypeBrand(List<Marketing_Source__c> mslist){
Set<String> typeSet=new Set<String>();
Set<String> brandSet=new Set<String>();
//Add new type and brand
for(Marketing_Source__c ms:mslist){
typeSet.add(ms.Type__c);
brandSet.add(ms.Brand__c);
}
//Prepare a map with same combination
Map<Id,Marketing_Source__c> dupTypeBrandMap=new Map<Id,Marketing_source__c>([SELECT Id, Name, Type__c, Brand__c
FROM Marketing_Source__c
WHERE Type__c IN:typeSet
AND Brand__c IN:brandSet]);
//Check for duplicates
for(Marketing_Source__c ms:mslist){
Marketing_Source__c dupms=isExistsWithSameBrandAndType(ms,dupTypeBrandMap);
if(dupms!=null){
ms.addError('Same Type, Brand Combination already given to <a href=\'/'+dupms.Id+'\'>'+dupms.Name+'</a>',false);
}
}
}
public static Marketing_Source__c isExistsWithSameBrandAndType(Marketing_Source__c p_ms,Map<Id,Marketing_Source__c> p_dupTypeBrandMap){
Marketing_Source__c dupm=null;
for(Id mId:p_dupTypeBrandMap.keySet()){
//check for amatch
if(p_ms.Type__c.equals(p_dupTypeBrandMap.get(mId).Type__c)
&& p_ms.Brand__c.equals(p_dupTypeBrandMap.get(mId).Brand__c)){
dupm=p_dupTypeBrandMap.get(mId);
break;
}
}
return dupm;
}
}
No comments:
Post a Comment