function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
SFDCDoctorStrangeSFDCDoctorStrange 

Urgent requirement Make this highlighted line Reusable in Apex Code

public class DuplicateLeadMergeHandler 
{    
    public static void MergeLead(List<Lead> newLead)
    {
        Set<String> dupemails = new Set<String>();
        Set<String> dupphones = new Set<String>();
        Set<String> dupmobiles = new Set<String>();
        Set<ID> leadID = new Set<ID>();
        Map<String, Lead> masterLeadMap = new Map<String, Lead>();
        
        for(Lead oldLead : newLead)
        {
            If(oldLead.Email != Null)
                dupemails.add(oldLead.Email);
            
            else
            If(oldLead.Phone != Null)
                dupphones.add(oldLead.Phone);
            
            else
            if(oldLead.MobilePhone != Null)
                dupmobiles.add(oldLead.MobilePhone);
                
            leadID.add(oldLead.id);
        }
        
        List<lead> oldLeadList = [SELECT Id, Name, OwnerId, MobilePhone, Email, Phone, Instagram_Handle__c, Website, Interested_Event_Locations__c, Vendor_Type__c, Items_Interested_in_Selling__c FROM Lead WHERE (Email IN: dupemails OR Phone IN: dupphones OR MobilePhone IN: dupmobiles) AND Id NOT IN: leadId AND IsConverted = false];
        
        List<lead> newleadList = [SELECT Id, OwnerId, MobilePhone, Email, Phone, Instagram_Handle__c, Website, Interested_Event_Locations__c, Vendor_Type__c, Items_Interested_in_Selling__c FROM Lead WHERE (Email IN: dupemails OR Phone IN: dupphones OR MobilePhone IN: dupmobiles) AND Id IN: leadId AND IsConverted = false];
        
        
        If(!oldLeadList.IsEmpty())  
        {
            for(Lead oldLead: newLeadList)
            {
                If(oldLead.Email != Null)
                    masterLeadMap.put(oldLead.Email, oldLead);
                
                else
                    If(oldLead.Phone != Null)
                    masterLeadMap.put(oldLead.Phone, oldLead);
                
                else
                    if(oldLead.MobilePhone != Null)
                    masterLeadMap.put(oldLead.MobilePhone, oldLead);
            } 
            
            If(masterLeadMap.size() > 0 && masterLeadMap != null)
            {  
                Lead masterLead = new Lead();
                
                for(Lead oldLead : oldLeadList)
                {
                    If(masterLeadMap.containskey(oldLead.Email))
                    {
                        masterLead = masterLeadMap.get(oldLead.Email);
                        
                        If(masterLead != Null)    
                        {  
                            Task leadTask = new Task();
                            leadTask.WhoId = masterLead.Id;
                            leadTask.OwnerId = masterLead.OwnerId;
                            leadTask.Subject = 'Matched Lead - Follow Up';
                            leadTask.Status = 'In Progress';
                            leadTask.Priority = 'High';
                            leadTask.Description = 'Old Matched Lead Info \nLead Record Id :- '+oldLead.Id+'\nLead Name :- '+oldLead.Name+'\nEmail Address :- '+oldLead.Email+'\nMobile Phone :- '+oldLead.MobilePhone+'\nInstagram Handle :- '+oldLead.Instagram_Handle__c+'\nWebsite :- '+oldLead.Website+'\nInterested Event Locations :- '+oldLead.Interested_Event_Locations__c+'\nVendor Type :- '+oldLead.Vendor_Type__c+'\nItems Interested In Selling :- '+oldLead.Items_Interested_in_Selling__c+'';
                            insert leadTask;
                            
                            System.debug(masterLead);
                            Database.MergeResult results = Database.Merge(masterLead, oldLead, false);
                            System.debug(results);
                        }
                    } 
                    
                    Else   
                    If(masterLeadMap.containskey(oldLead.Phone))
                    {
                        masterLead = masterLeadMap.get(oldLead.Phone);
                        
                        If(masterLead != Null)    
                        {       
                            Task leadTask = new Task();
                            leadTask.WhoId = masterLead.Id;
                            leadTask.OwnerId = masterLead.OwnerId;
                            leadTask.Subject = 'Matched Lead - Follow Up';
                            leadTask.Status = 'In Progress';
                            leadTask.Priority = 'High';
                            leadTask.Description = 'Old Matched Lead Info \nLead Record Id :- '+oldLead.Id+'\nLead Name :- '+oldLead.Name+'\nEmail Address :- '+oldLead.Email+'\nMobile Phone :- '+oldLead.MobilePhone+'\nInstagram Handle :- '+oldLead.Instagram_Handle__c+'\nWebsite :- '+oldLead.Website+'\nInterested Event Locations :- '+oldLead.Interested_Event_Locations__c+'\nVendor Type :- '+oldLead.Vendor_Type__c+'\nItems Interested In Selling :- '+oldLead.Items_Interested_in_Selling__c+'';
                            insert leadTask;
                            
                            System.debug(masterLead);
                            Database.MergeResult results = Database.Merge(masterLead, oldLead, false);
                            System.debug(results);
                        }
                    }
                    
                    Else   
                    If(masterLeadMap.containskey(oldLead.MobilePhone))
                    {
                        masterLead = masterLeadMap.get(oldLead.MobilePhone);
                        
                        If(masterLead != Null)    
                        {       
                            Task leadTask = new Task();
                            leadTask.WhoId = masterLead.Id;
                            leadTask.OwnerId = masterLead.OwnerId;
                            leadTask.Subject = 'Matched Lead - Follow Up';
                            leadTask.Status = 'In Progress';
                            leadTask.Priority = 'High';
                            leadTask.Description = 'Old Matched Lead Info \nLead Record Id :- '+oldLead.Id+'\nLead Name :- '+oldLead.Name+'\nEmail Address :- '+oldLead.Email+'\nMobile Phone :- '+oldLead.MobilePhone+'\nInstagram Handle :- '+oldLead.Instagram_Handle__c+'\nWebsite :- '+oldLead.Website+'\nInterested Event Locations :- '+oldLead.Interested_Event_Locations__c+'\nVendor Type :- '+oldLead.Vendor_Type__c+'\nItems Interested In Selling :- '+oldLead.Items_Interested_in_Selling__c+'';
                            insert leadTask;
                            
                            System.debug(masterLead);
                            Database.MergeResult results = Database.Merge(masterLead, oldLead, false);
                            System.debug(results);
                        }
                    }
                }
            }
        }
    }  
}
Best Answer chosen by SFDCDoctorStrange
Jacob Allen 4Jacob Allen 4
For more information, please see the documentation here (https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_defining_methods.htm?q=method) and this (https://trailhead.salesforce.com/en/content/learn/modules/object-oriented-programming-for-admins/create-classes-and-objects) trailhead to help further explain Object Oriented Programming concepts in Apex. Something below should at least help get you started, but let me know if you need any further explanation.
 
public void createLeadTask(Lead masterLead, Lead oldLead){
    Task leadTask = new Task();
    leadTask.WhoId = masterLead.Id;
    leadTask.OwnerId = masterLead.OwnerId;
    leadTask.Subject = 'Matched Lead - Follow Up';
    leadTask.Status = 'In Progress';
    leadTask.Priority = 'High';
    leadTask.Description = 'Old Matched Lead Info \nLead Record Id :- '+oldLead.Id+'\nLead Name :- '+oldLead.Name+'\nEmail Address :- '+oldLead.Email+'\nMobile Phone :- '+oldLead.MobilePhone+'\nInstagram Handle :- '+oldLead.Instagram_Handle__c+'\nWebsite :- '+oldLead.Website+'\nInterested Event Locations :- '+oldLead.Interested_Event_Locations__c+'\nVendor Type :- '+oldLead.Vendor_Type__c+'\nItems Interested In Selling :- '+oldLead.Items_Interested_in_Selling__c+'';
    insert leadTask;
    
    System.debug(masterLead);
    Database.MergeResult results = Database.Merge(masterLead, oldLead, false);
    System.debug(results);
}

This can be called as follows:
createLeadTask(masterLead, oldLead)

 

All Answers

Jacob Allen 4Jacob Allen 4
I'm not 100% sure what you're trying to do here. Are you wanting to create a new method to create the Task so you can call that function from anywhere in your code?
SFDCDoctorStrangeSFDCDoctorStrange
Hi Jacob

I want to create a method for the following highlighted part and use it inside the IF the loops

I'm new to this please help if possible]

thanks
Doctor Strange
SFDCDoctorStrangeSFDCDoctorStrange
Solution:-
 
public class DuplicateLeadMergeHandler 
{    
    public static void MergeLead(List<Lead> newLead)
    {
        Set<String> dupemails = new Set<String>();
        Set<String> dupphones = new Set<String>();
        Set<String> dupmobiles = new Set<String>();
        Set<ID> leadID = new Set<ID>();
        Map<String, Lead> masterLeadMap = new Map<String, Lead>();
        
        for(Lead oldLead : newLead)
        {
            If(oldLead.Email != Null)
                dupemails.add(oldLead.Email);
            
            else
                If(oldLead.Phone != Null)
                dupphones.add(oldLead.Phone);
            
            else
                if(oldLead.MobilePhone != Null)
                dupmobiles.add(oldLead.MobilePhone);
            
            leadID.add(oldLead.id);
        }
        
        List<lead> oldLeadList = [SELECT Id, Name, OwnerId, MobilePhone, Email, Phone, Instagram_Handle__c, Website, Interested_Event_Locations__c, Vendor_Type__c, Items_Interested_in_Selling__c FROM Lead WHERE (Email IN: dupemails OR Phone IN: dupphones OR MobilePhone IN: dupmobiles) AND Id NOT IN: leadId AND IsConverted = false];
        
        List<lead> newleadList = [SELECT Id, OwnerId, MobilePhone, Email, Phone, Instagram_Handle__c, Website, Interested_Event_Locations__c, Vendor_Type__c, Items_Interested_in_Selling__c FROM Lead WHERE (Email IN: dupemails OR Phone IN: dupphones OR MobilePhone IN: dupmobiles) AND Id IN: leadId AND IsConverted = false];
        
        
        If(!oldLeadList.IsEmpty())  
        {
            for(Lead oldLead: newLeadList)
            {
                If(oldLead.Email != Null)
                    masterLeadMap.put(oldLead.Email, oldLead);
                
                else
                    If(oldLead.Phone != Null)
                    masterLeadMap.put(oldLead.Phone, oldLead);
                
                else
                    if(oldLead.MobilePhone != Null)
                    masterLeadMap.put(oldLead.MobilePhone, oldLead);
            } 
            
            If(masterLeadMap.size() > 0 && masterLeadMap != null)
            {  
                Lead masterLead = new Lead();
                
                for(Lead oldLead : oldLeadList)
                {
                    If(masterLeadMap.containskey(oldLead.Email))
                    {
                        masterLead = masterLeadMap.get(oldLead.Email);
                        
                        If(masterLead != Null)    
                        {  
                            DuplicateLeadMergeHandler.TaskandMerge(masterLead, oldLead);
                        }
                    } 
                    
                    Else   
                        If(masterLeadMap.containskey(oldLead.Phone))
                    {
                        masterLead = masterLeadMap.get(oldLead.Phone);
                        
                        If(masterLead != Null)    
                        {       
                            DuplicateLeadMergeHandler.TaskandMerge(masterLead, oldLead);
                        }
                    }
                    
                    Else   
                        If(masterLeadMap.containskey(oldLead.MobilePhone))
                    {
                        masterLead = masterLeadMap.get(oldLead.MobilePhone);
                        
                        If(masterLead != Null)    
                        {       
                            DuplicateLeadMergeHandler.TaskandMerge(masterLead, oldLead);
                        }
                    }
                }
            }
        }
    }
    
    Public static void TaskandMerge(Lead masterLead, Lead oldLead)
    {
        If(masterLead != Null && oldLead != Null)
        {
            Task leadTask = new Task();
            leadTask.WhoId = masterLead.Id;
            leadTask.OwnerId = masterLead.OwnerId;
            leadTask.Subject = 'Matched Lead - Follow Up';
            leadTask.Status = 'In Progress';
            leadTask.Priority = 'High';
            leadTask.Description = 'Old Matched Lead Info \nLead Record Id :- '+oldLead.Id+'\nLead Name :- '+oldLead.Name+'\nEmail Address :- '+oldLead.Email+'\nMobile Phone :- '+oldLead.MobilePhone+'\nInstagram Handle :- '+oldLead.Instagram_Handle__c+'\nWebsite :- '+oldLead.Website+'\nInterested Event Locations :- '+oldLead.Interested_Event_Locations__c+'\nVendor Type :- '+oldLead.Vendor_Type__c+'\nItems Interested In Selling :- '+oldLead.Items_Interested_in_Selling__c+'';
            insert leadTask;
            
            System.debug(masterLead);
            Database.MergeResult results = Database.Merge(masterLead, oldLead, false);
            System.debug(results);
        }
    }
}

 
Jacob Allen 4Jacob Allen 4
For more information, please see the documentation here (https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_defining_methods.htm?q=method) and this (https://trailhead.salesforce.com/en/content/learn/modules/object-oriented-programming-for-admins/create-classes-and-objects) trailhead to help further explain Object Oriented Programming concepts in Apex. Something below should at least help get you started, but let me know if you need any further explanation.
 
public void createLeadTask(Lead masterLead, Lead oldLead){
    Task leadTask = new Task();
    leadTask.WhoId = masterLead.Id;
    leadTask.OwnerId = masterLead.OwnerId;
    leadTask.Subject = 'Matched Lead - Follow Up';
    leadTask.Status = 'In Progress';
    leadTask.Priority = 'High';
    leadTask.Description = 'Old Matched Lead Info \nLead Record Id :- '+oldLead.Id+'\nLead Name :- '+oldLead.Name+'\nEmail Address :- '+oldLead.Email+'\nMobile Phone :- '+oldLead.MobilePhone+'\nInstagram Handle :- '+oldLead.Instagram_Handle__c+'\nWebsite :- '+oldLead.Website+'\nInterested Event Locations :- '+oldLead.Interested_Event_Locations__c+'\nVendor Type :- '+oldLead.Vendor_Type__c+'\nItems Interested In Selling :- '+oldLead.Items_Interested_in_Selling__c+'';
    insert leadTask;
    
    System.debug(masterLead);
    Database.MergeResult results = Database.Merge(masterLead, oldLead, false);
    System.debug(results);
}

This can be called as follows:
createLeadTask(masterLead, oldLead)

 
This was selected as the best answer
Jacob Allen 4Jacob Allen 4
Looks like you just accepted your own answer as the solution. Please disregard my assistance above.
SFDCDoctorStrangeSFDCDoctorStrange
Hi Jocab,

Thanks for your efforts
actually, I figured it out early and wanted to provide the best solution for future reference
as you took so much effort solving this for me im marking your solution as the best solution.

Thanks & Regards
Doctor Strange