• Azad01
  • NEWBIE
  • 0 Points
  • Member since 2021

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 1
    Replies
Hi friends,
I am new  in salesforce, if you know plz reply.
thanks in advance.

how to merge duplicate lead with batch apex based on email ?

global class LeadBatchAviodDuplicacy implements Database.Batchable<sObject> {

public String queryString;

global Database.QueryLocator start(Database.BatchableContext BC) {
     
  queryString = 'SELECT Id, Name, Email FROM Lead ';
    return Database.getQueryLocator(queryString);
}
  global void execute(Database.BatchableContext BC, List<Lead> obj) {

Map<String,List<Lead>> LeadMap = new Map<String,List<Lead>>();
  Set<String> LeadName = new Set<String>();
  Set<String> LeadEmail = new Set<String>();
  

  for(Lead a :obj){
     LeadName.add(a.Name.toLowerCase());
      if(String.isnotblank(a.Email))
     LeadEmail.add(a.Email.toLowerCase());
     
  }

  //Get All non formula fields of Lead
  String sobjectApiName = 'Lead';
  Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
  Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
  List<String> fieleList = new List<String>();
  for(String fieldName : fieldMap.keySet()){
     Schema.DescribeFieldResult fieldResult = fieldMap.get(fieldName).getDescribe();
     if(!fieldResult.isCalculated() && fieldResult.isCreateable() && !fieldResult.isExternalId()&& fieldResult.isUpdateable()){
        fieleList.add(fieldName);
     }
     /*if(fieldName != 'isPartner' && fieldName != 'IsCustomerPortal'){
        fieleList.add(fieldName);
     }*/
  }

  String fetchFields = 'SELECT '+String.join(fieleList,',')+' FROM '+sobjectApiName+' WHERE Email IN :LeadEmail';
  integer i = 1;
  for(Lead a : Database.query(fetchFields)){
     String key = a.Email;
     key = key.toLowerCase();
     if(LeadMap.containsKey(key)){
        LeadMap.get(key).add(a);
     }else {
        LeadMap.put(key,new List<Lead>{a});
     }
     i++;
  }
  System.debug('i >'+i);
System.debug('LeadMap >> '+LeadMap);
  List<Lead> mergeList;
for(String key : LeadMap.keySet()){
     System.debug('Size >>'+ LeadMap.get(key).size());
    if(LeadMap.get(key).size()>1 ){
        mergeList = new List<Lead>();
        Lead masterLead = LeadMap.get(key)[0];
        mergeList.addAll(LeadMap.get(key));
        mergeList.remove(0);
        System.debug('mergeList >> '+mergeList);
        for(Lead a : mergeList){
            Database.MergeResult mergeResult = Database.merge(masterLead, a, true);
        } 
    }
}

//if(mergeList.size()>0)
//  update mergeList;

}

global void finish(Database.BatchableContext BC) {

}
}




I'm unable to map fields and feed fields.