You need to sign in to do that
Don't have an account?
Duplicate notification
We have installed an Appliciaton which helps to identify the entered to the system is duplicate or no(based on the email address).
So here's what we need to accomplish:
Let's say the lead "John Smith, with email jsmith@gmail.com" is already in the system, then we create another lead "Jamie Smith, with email jsmith@gmail.com", and it automatically sets Lead Status to "New - Dupe Lead!", so now we have:
Lead Name - Email - Lead Status
John Smith - jsmith@gmail.com - "Lead"
Jamie Smith - jsmith@gmail.com - "New - Dupe Lead!"
Until this point it is working,s o we need a apex trigger(was told that by SF basic support) in salesforce to:
Find Lead_1 where Lead Status "New - Dupe Lead!"
Then
Find Lead_2 where Lead_1.email=lead_2.email // (so we are trying to find lead with the same email, but which is not dupe)
Then
Assign Lead_2.OwnerID=lead_1.onwerid
Send email to lead_2.ownerid //notify that this is a duplicate lead
What is the best way to accomplish this?
* SF Support said you can only do this by create an apex script, however we have no experience where to start. We have developers who could easily do the script, but we are just not sure where to start.
Maybe an simple exmaple of any other script or what actually we need to create? Is it apex trigger or class, etc....
Thanks
Lead 1 - John Smith - jsmith@gmail.com - "Lead"
Lead 2 - Jamie Smith - jsmith@gmail.com - "New - Dupe Lead!"
to set Status to duplicate & owner of original one, have before trigger
Code Sniffet : // this code written by taking care of bulk operations, Governer limits
trigger setDuplicate on lead (before insert){
map<id,string> mapEmail = new map<id,string>();
for(Lead olead : trigger.new)
mapEmail.put(oLead.Email,olead.id);
List<Lead> lstLead = [select status,ownerid from Lead where status in : mapEmail.keyset() and id not in: trigger.newmap.keySet()];
if(lstLead.isEmpty())
return;
for(Lead olead :lstLead){
if(mapEmail.containsKey(oLead.Email)){
Lead duplicatelead = trigger.newMap.get(mapEmail.get(oLead.Email));
duplicatelead.Status = 'New - Dupe Lead!';
duplicatelead.OwnerId = olead.OwnerID;
}
}
}
And for sending mail to original owner for notification of duplicate lead
Set Workflow like this
Workflow Rule Criteria - Status = "New - Dupe Lead!"
Workflow Rule Action - Send mail to Owner
Thanks for the help, one more question, where do I add this? is is Apex trigger or a class or..? I'm missing the very first step. Thanks again!
First code is trigger
second step is WorkFlow
Thanks again,
Please correct me if i did put into the wrong place.
Setup > Customize > Leads > Trigger > New Trigger
Added the code, but when I try to save the lead - i get:
Error: Invalid Data.
Review all error messages below to correct your data.
Apex trigger setDuplicate caused an unexpected exception, contact your administrator: setDuplicate: execution of BeforeInsert caused by: System.StringException: Invalid id: xx@dsd.com: Trigger.setDuplicate: line 6, column 13
Any ideas?
Thanks
map<string,id> mapEmail = new map<string,id>();
Thanks for the promt reply, but now I'm getting:
Error: Invalid Data.
Review all error messages below to correct your data.
Apex trigger setDuplicate caused an unexpected exception, contact your administrator: setDuplicate: execution of BeforeInsert caused by: System.NullPointerException: Attempt to de-reference a null object: Trigger.setDuplicate: line 8, column 110
Any ideas?
Thanks!
use this code, there were some mistakes
trigger setDuplicate on lead (before insert){
map<string,id> mapEmail = new map<string,id>();
for(Lead olead : trigger.new)
mapEmail.put(oLead.Email,olead.id);
List<Lead> lstExistingLead = [select status,ownerid,email from Lead where email in : mapEmail.keyset() and id not in: trigger.newmap.keySet()];
if(lstExistingLead.isEmpty())
return;
for(Lead olead :lstExistingLead){
if(mapEmail.containsKey(oLead.Email)){
Lead duplicatelead = trigger.newMap.get(mapEmail.get(oLead.Email));
duplicatelead.Status = 'New - Dupe Lead!';
duplicatelead.OwnerId = olead.OwnerID;
}
}
}
ohhh..sorry this should be working fine
trigger setDuplicate on lead (before insert){
map<string,Lead> mapEmail = new map<string,Lead>();
for(Lead olead : trigger.new)
mapEmail.put(oLead.Email,olead);
List<Lead> lstExistingLead = [select status,ownerid,email from Lead where email in : mapEmail.keyset()];
if(lstExistingLead.isEmpty())
return;
for(Lead olead :lstExistingLead){
if(mapEmail.containsKey(oLead.Email)){
Lead duplicatelead = mapEmail.get(oLead.Email);
duplicatelead.Status = 'New - Dupe Lead!';
duplicatelead.OwnerId = olead.OwnerID;
}
}
}
Thanks it worked!
However, I was trying to move it form sandbox to production(Deploy - Inbound/Outbound Change sets) and received the following messages:
How do I create those test? Thanks again.
You need to write test class for this trigger
Could someone help me with the test case for this trigger?
Thanks again.