+ Start a Discussion
Sudeep SinghSudeep Singh 

Code :- 

public class AutoConvertLead {
    @InvocableMethod
    public static void assignLeads(List<Id> LeadIds) { 
        try{ 
            Map<String,Date> NameDOBMap = new Map<String,Date>();
            List<String> leadNames = new List<String>();
            List<Date> leadDOBs = new List<Date>();
            List<Database.LeadConvert> massLeadConvert = new List<Database.LeadConvert>();
            List<Account> accountsToUpdate = new List<Account>();
            List<Account> accountsToInsert = new List<Account>();
            List<Contract> contractsToInsert = new List<Contract>();
            Map<String,Account> nameDOBToAccountMap = new Map<String,Account>();
            Map<String,Account> newCreatedAccounts = new Map<String,Account>();
            Map<ID,Id> leadProductMap = new Map<Id,Id>();
            
            Id personAccountRecordTypeId = Schema.SObjectType.Account.getRecordTypeInfosByName().get('Person Account').getRecordTypeId();
            LeadStatus cLeadStatus = [SELECT Id,MasterLabel FROM LeadStatus WHERE isConverted = true LIMIT 1];  
            
            List<Lead> leads = [SELECT Id,Name,LastName,FirstName,Email,Date_Of_Birth__c,Service__c,Ethnicity__c, Race__c,Gender__c FROM Lead WHERE Id IN :LeadIds];
            
            for(Lead lead: leads) {
                leadNames.add(String.valueOf(lead.Name));
                leadDOBs.add(lead.Date_Of_Birth__c);
                NameDOBMap.put(lead.Name, lead.Date_Of_Birth__c);
                leadProductMap.put(lead.Id,lead.Service__c);
            }
            
            Map<Id, Account> existingAccounts = new Map<Id, Account>([SELECT Id, PersonBirthdate, Name, PersonGender FROM Account WHERE Name IN :NameDOBMap.KeySet() AND PersonBirthdate IN :NameDOBMap.values()]);
            
            for(account acc: existingAccounts.values()){
                
            }
            //System.debug('Check 1'+existingAccounts);
            for(Account accc: existingAccounts.values()){
                nameDOBToAccountMap.put(accc.Name+accc.PersonBirthdate, accc);
            }
            
            for(Lead ld : leads){
                if(!nameDOBToAccountMap.containsKey(ld.Name+ld.Date_Of_Birth__c)){
                    Account existingAccount = new Account();
                    existingAccount.LastName = ld.LastName;
                    existingAccount.FirstName = ld.FirstName;
                    existingAccount.PersonEmail = ld.Email;
                    existingAccount.PersonGender = ld.Gender__c;
                    existingAccount.RecordTypeId =  personAccountRecordTypeId;
                    existingAccount.Ethnicity__pc = ld.Ethnicity__c;
                    existingAccount.Race__pc = ld.Race__c;
                    existingAccount.PersonGender = ld.Gender__c;
                    existingAccount.PersonBirthdate = ld.Date_Of_Birth__c;
                    accountsToInsert.add(existingAccount);
                }  
            }
            
            if(accountsToInsert.size()>0){
                insert accountsToInsert;
            }
            //system.debug('accountsToInsert'+accountsToInsert);
            
            for(account acc: accountsToInsert){
                newCreatedAccounts.put(acc.FirstName+acc.LastName, acc);
            }
            //system.debug('newCreatedAccounts'+newCreatedAccounts);
            for(Lead lead : leads){
                //System.debug('Check 2');
                Database.LeadConvert LeadConvert = new Database.LeadConvert();
                LeadConvert.setLeadId(lead.Id);
                LeadConvert.setConvertedStatus(cLeadStatus.MasterLabel);
                LeadConvert.setDoNotCreateOpportunity(false);
                
                if(lead.Name != null && lead.Date_Of_Birth__c != null){                    
                    if(nameDOBToAccountMap.containsKey(lead.Name+lead.Date_Of_Birth__c) && nameDOBToAccountMap.get(lead.Name+lead.Date_Of_Birth__c)!=Null){
                        //system.debug('existingAccount==>'+nameDOBToAccountMap.get(lead.Name+lead.Date_Of_Birth__c));
                        Account existingAccount = new Account();
                        existingAccount.Id = nameDOBToAccountMap.get(lead.Name+lead.Date_Of_Birth__c).id;
                        //system.debug('existingAccount'+existingAccount);
                        existingAccount.Ethnicity__pc = lead.Ethnicity__c;
                        existingAccount.Race__pc = lead.Race__c;
                        existingAccount.PersonGender = lead.Gender__c;
                        accountsToUpdate.add(existingAccount);
                        LeadConvert.setAccountId(existingAccount.Id);
                    }
                    else{
                        //system.debug('lead.Name+lead.Date_Of_Birth__c'+lead.FirstName+lead.LastName);
                        if(newCreatedAccounts.containskey(lead.FirstName+lead.LastName) && newCreatedAccounts.get(lead.FirstName+lead.LastName)!= Null){
                            LeadConvert.setAccountId(newCreatedAccounts.get(lead.FirstName+lead.LastName).Id);
                        }  
                    }
                    //System.debug('LeadConvert.getAccountId()'+LeadConvert.getAccountId()); 
                    massLeadConvert.add(LeadConvert);
                    //system.debug('massLeadConvert'+massLeadConvert);
                }
            }
            
            if(!accountsToUpdate.isEmpty()){
                //system.debug('accountsToUpdate'+accountsToUpdate);
                update accountsToUpdate;
                //system.debug('accountsToUpdate'+accountsToUpdate);
                
            }
            
            if(!massLeadConvert.isEmpty()){
                //system.debug('massLeadConvert'+massLeadConvert);
                List<Database.LeadConvertResult> lcr = Database.convertLead(massLeadConvert);
                for(Database.LeadConvertResult leadConvertResult : lcr) {
                    //system.debug('leadConvertResult'+leadConvertResult);
                    //system.debug('accountid'+existingAccounts.containskey(leadConvertResult.accountid));
                    if(leadConvertResult.isSuccess() && !existingAccounts.containskey(leadConvertResult.accountid) ) {
                        Contract contract = new Contract();
                        contract.Status = 'Draft';
                        contract.AccountId = leadConvertResult.getAccountId();
                        contract.StartDate = system.today();
                        contract.ContractTerm = 12;
                        if(leadProductMap.containskey(leadConvertResult.getLeadId()) && leadProductMap.get(leadConvertResult.getLeadId())!=Null){
                            contract.Service__c = leadProductMap.get(leadConvertResult.getLeadId());
                        }
                        contractsToInsert.add(contract);
                    }
                }
            }
            
            if(!contractsToInsert.isEmpty()){
                insert contractsToInsert;
            }
        }catch(Exception e){
            //System.debug('Error: '+e.getMessage()+ 'Line Number'+e.getLineNumber());
        }
    }
}

 

In this code I need to modify that Address field of lead should get fetched in Contract's Billing and Shipping address.

In this conversion Lead's address is coming to Account's Billing address but not coming to Account's Shipping address.

How to achieve this"

Thanks

Best Answer chosen by Sudeep Singh
Sai PraveenSai Praveen (Salesforce Developers) 
Hi Sudeep,

You need to query Phone field in Map<Id,Lead> leadmap and also assign phone number to person phone in Account as hightlited. Any field you can do in similar way.
 
public class AutoConvertLead {
@InvocableMethod
public static void assignLeads(List<Id> LeadIds) { 
    try{ 
        Map<String,Date> NameDOBMap = new Map<String,Date>();
        List<String> leadNames = new List<String>();
        List<Date> leadDOBs = new List<Date>();
        List<Database.LeadConvert> massLeadConvert = new List<Database.LeadConvert>();
        List<Account> accountsToUpdate = new List<Account>();
        List<Account> accountsToInsert = new List<Account>();
        List<Contract> contractsToInsert = new List<Contract>();
        Map<String,Account> nameDOBToAccountMap = new Map<String,Account>();
        Map<String,Account> newCreatedAccounts = new Map<String,Account>();
        Map<ID,Id> leadProductMap = new Map<Id,Id>();
        
        Id personAccountRecordTypeId = Schema.SObjectType.Account.getRecordTypeInfosByName().get('Person Account').getRecordTypeId();
        LeadStatus cLeadStatus = [SELECT Id,MasterLabel FROM LeadStatus WHERE isConverted = true LIMIT 1];  
        
       // List<Lead> leads = [SELECT Id,Name,LastName,FirstName,Email,Date_Of_Birth__c,Service__c,Ethnicity__c, Race__c,Gender__c FROM Lead WHERE Id IN :LeadIds];
       Map<Id,Lead> leadmap= new Map<Id,Lead>([SELECT Id,Name,LastName,FirstName,Email,Date_Of_Birth__c,Service__c,Ethnicity__c, Race__c,Phone,Gender__c,City,Country,State,Street,PostalCode FROM Lead WHERE Id IN :LeadIds]);
       // for(Lead lead: leads) {
        for(Lead lead: leadmap.values()) {
            leadNames.add(String.valueOf(lead.Name));
            leadDOBs.add(lead.Date_Of_Birth__c);
            NameDOBMap.put(lead.Name, lead.Date_Of_Birth__c);
            leadProductMap.put(lead.Id,lead.Service__c);
        }
        
        Map<Id, Account> existingAccounts = new Map<Id, Account>([SELECT Id, PersonBirthdate, Name, PersonGender FROM Account WHERE Name IN :NameDOBMap.KeySet() AND PersonBirthdate IN :NameDOBMap.values()]);
        
        for(account acc: existingAccounts.values()){
            
        }
        //System.debug('Check 1'+existingAccounts);
        for(Account accc: existingAccounts.values()){
            nameDOBToAccountMap.put(accc.Name+accc.PersonBirthdate, accc);
        }
        
       // for(Lead ld : leads){
        for(Lead ld: leadmap.values()) {
            if(!nameDOBToAccountMap.containsKey(ld.Name+ld.Date_Of_Birth__c)){
                Account existingAccount = new Account();
                existingAccount.LastName = ld.LastName;
                existingAccount.FirstName = ld.FirstName;
                existingAccount.PersonEmail = ld.Email;
                existingAccount.PersonGender = ld.Gender__c;
existingAccount.PersonHomePhone=ld.Phone;
                existingAccount.RecordTypeId =  personAccountRecordTypeId;
                existingAccount.Ethnicity__pc = ld.Ethnicity__c;
                existingAccount.Race__pc = ld.Race__c;
                existingAccount.PersonGender = ld.Gender__c;
                existingAccount.PersonBirthdate = ld.Date_Of_Birth__c;
                accountsToInsert.add(existingAccount);
            }  
        }
        
        if(accountsToInsert.size()>0){
            insert accountsToInsert;
        }
        //system.debug('accountsToInsert'+accountsToInsert);
        
        for(account acc: accountsToInsert){
            newCreatedAccounts.put(acc.FirstName+acc.LastName, acc);
        }
        //system.debug('newCreatedAccounts'+newCreatedAccounts);
        //for(Lead lead : leads){
            for(Lead lead : leadmap.values()){
            //System.debug('Check 2');
            Database.LeadConvert LeadConvert = new Database.LeadConvert();
            LeadConvert.setLeadId(lead.Id);
            LeadConvert.setConvertedStatus(cLeadStatus.MasterLabel);
            LeadConvert.setDoNotCreateOpportunity(false);
            
            if(lead.Name != null && lead.Date_Of_Birth__c != null){                    
                if(nameDOBToAccountMap.containsKey(lead.Name+lead.Date_Of_Birth__c) && nameDOBToAccountMap.get(lead.Name+lead.Date_Of_Birth__c)!=Null){
                    //system.debug('existingAccount==>'+nameDOBToAccountMap.get(lead.Name+lead.Date_Of_Birth__c));
                    Account existingAccount = new Account();
                    existingAccount.Id = nameDOBToAccountMap.get(lead.Name+lead.Date_Of_Birth__c).id;
                    //system.debug('existingAccount'+existingAccount);
                    existingAccount.Ethnicity__pc = lead.Ethnicity__c;
                    existingAccount.Race__pc = lead.Race__c;
                    existingAccount.PersonGender = lead.Gender__c;
                    accountsToUpdate.add(existingAccount);
                    LeadConvert.setAccountId(existingAccount.Id);
                }
                else{
                    //system.debug('lead.Name+lead.Date_Of_Birth__c'+lead.FirstName+lead.LastName);
                    if(newCreatedAccounts.containskey(lead.FirstName+lead.LastName) && newCreatedAccounts.get(lead.FirstName+lead.LastName)!= Null){
                        LeadConvert.setAccountId(newCreatedAccounts.get(lead.FirstName+lead.LastName).Id);
                    }  
                }
                //System.debug('LeadConvert.getAccountId()'+LeadConvert.getAccountId()); 
                massLeadConvert.add(LeadConvert);
                //system.debug('massLeadConvert'+massLeadConvert);
            }
        }
        
        if(!accountsToUpdate.isEmpty()){
            //system.debug('accountsToUpdate'+accountsToUpdate);
            update accountsToUpdate;
            //system.debug('accountsToUpdate'+accountsToUpdate);
            
        }
        
        if(!massLeadConvert.isEmpty()){
            //system.debug('massLeadConvert'+massLeadConvert);
            List<Database.LeadConvertResult> lcr = Database.convertLead(massLeadConvert);
            for(Database.LeadConvertResult leadConvertResult : lcr) {
                //system.debug('leadConvertResult'+leadConvertResult);
                //system.debug('accountid'+existingAccounts.containskey(leadConvertResult.accountid));
                if(leadConvertResult.isSuccess() && !existingAccounts.containskey(leadConvertResult.accountid) ) {
                    Contract contract = new Contract();
                    contract.Status = 'Draft';
                    contract.AccountId = leadConvertResult.getAccountId();
                    contract.StartDate = system.today();
                    contract.ContractTerm = 12;
                    if(leadProductMap.containskey(leadConvertResult.getLeadId()) && leadProductMap.get(leadConvertResult.getLeadId())!=Null){
                        contract.Service__c = leadProductMap.get(leadConvertResult.getLeadId());
                    }
                    if(leadmap.containskey(leadConvertResult.getLeadId())  ) {
                            
                        contract.BillingCity= leadmap.get(leadConvertResult.getLeadId()).City;
                        contract.BillingState= leadmap.get(leadConvertResult.getLeadId()).State;
                        contract.BillingCountry = leadmap.get(leadConvertResult.getLeadId()).Country;
                        Contract.BillingStreet=leadmap.get(leadConvertResult.getLeadId()).Street;
                        Contract.BillingPostalCode=leadmap.get(leadConvertResult.getLeadId()).PostalCode;

                    }
                    contractsToInsert.add(contract);
                }
            }
        }
        
        if(!contractsToInsert.isEmpty()){
            insert contractsToInsert;
        }
    }catch(Exception e){
        //System.debug('Error: '+e.getMessage()+ 'Line Number'+e.getLineNumber());
    }
}
}

If this solution helps, Please mark it as best answer.

Thanks,
Merve Bulut 8Merve Bulut 8 
i have a table with 3 column in visualforce page there is one input value and others are output value. When input value is changes, input value and second column value must be multiplied and the third column must show the result for per row. in table i'm using <apex:repeat> and <tr>, <td> tags so how can i do this? thanks.
Marta GonzalezMarta Gonzalez 
I have completed the Lightning Process builder step and i have verified that it is working correctly ( the battle Station record has been changed to complete and it has post a message to chatter, but when I click the Verify Step button I get this error message:

"Step Not yet complete... here's what's wrong:
An update to a Battle Station record with Weapon Status of 'Fully Operational' failed to post a Chatter message to the record. Make sure that the process is configured correctly and that it is activated.
Note: you may run into errors if you've skipped previous steps."
Best Answer chosen by Marta Gonzalez
Jeff DouglasJeff Douglas
Marta,

Check the text of your Chatter Post. You missed an "s" in witness.

Thanks
Jeff Douglas
Trailhead Developer Advocate
MokshadaMokshada 
I want to create one picklist namely rating and having values 1,2,3,4,5 and we have five images of 1 star , 2 star etc upto 5 star and wanted to create one image formula field where we will be able able to see images which we have from 1 star to 5 star.
How to acieve this?

Thanks
Best Answer chosen by Mokshada
Sai PraveenSai Praveen (Salesforce Developers) 
Hi Mokshada,

There was syntax error in If() statemnets. Can you try below.
 
If(TEXT( Ratings__c )= '1' , IMAGE("/resource/OneStar", "ONE", 24, 24), 
If(TEXT( Ratings__c )= '2' , IMAGE("/resource/TwoStars", "TWO", 24, 24), 
If(TEXT( Ratings__c )= '3' , IMAGE("/resource/ThreeStar", "THREE", 24, 24), 
If(TEXT( Ratings__c )= '4' , IMAGE("/resource/FourStar", "FOUR", 24, 24), 
If(TEXT( Ratings__c )= '5' , IMAGE("/resource/FiveStar", "FIVE", 24, 24), 'SAMPLE')))
))

If this solution helps, Please mark it as best answer.

Thanks,
M SreekanthM Sreekanth 
Write a trigger on contact to prevent duplicate records based on Contact Email & Contact Phone.But I want Indivizual Error detection,I did like below
--------------------------------------------------------------------------------------
Heleper Class:-
==========
public class ContactHelper {
//Write a trigger on contact to prevent duplicate records based on Contact Email & Contact Phone.But I want Indivizual Error detection
    public static void PreventDuplicateContacts(list<contact> conList){
        list<string> dupEmail =new list<string>();
        list<string> dupPhone =new list<string>();
        list<contact> EmailList = new list<contact>();
        list<contact> PhoneList = new list<contact>();
        for(contact c:conList){
            dupEmail.add(c.Email);
            dupPhone.add(c.Phone);
        }
        EmailList = [SELECT Id,Email FROM Contact WHERE Email =:dupEmail];
        PhoneList = [SELECT Id,Phone FROM Contact WHERE Phone =:dupPhone];
        for(contact c:conList){
            if(EmailList.size()>0){
              c.Email.addError('Email id already exists');  
            }
            if(PhoneList.size()>0){
              c.Phone.addError('Email id already exists');  
            }
        }
        
    }
}

Handler Class:-
==========
public class ContactHandler {
    public static void PreventDuplicateContacts(){
        ContactHelper.PreventDuplicateContacts(Trigger.new);
       
    }
 
}

Trigger Code:-
=========
trigger ContactTrigger on Contact (Before insert,Before Update) {
    if(Trigger.isInsert){
       ContactHandler.PreventDuplicateContacts();
    }
     else if(Trigger.isUpdate){
        ContactHandler.PreventDuplicateContacts();
    }
}
Best Answer chosen by M Sreekanth
Sai PraveenSai Praveen (Salesforce Developers) 
Hi Sreekanth,

You need to write Handler and helper. Both are same you can directly write the trigger code as below.

You can remove Handler class entirely.
I did not find any issues other than this.
trigger ContactTrigger on Contact (Before insert,Before Update) {
    if(Trigger.isInsert || Trigger.isupdate ){
        ContactHelper.PreventDuplicateContacts(Trigger.new);
    }
}

Let me know if you face any issues.


Thanks,
 
Sudeep SinghSudeep Singh 
I have a field Next order date in contract
Written a batch class to creaet automatically order if the contract is Activated. When the Contract status is made activated at that time the Next order Date will display the immediate wednesday which is handled by flow.

I need to do an setup that when Order status will be Order Dispatched then the Next Order Date should display Order Start Date + 30 days or Order Start Date + 30 days  (immediate wednesday).

Is it possible by flow If yes then how, if no then how we can achieve this.

Thanks
Best Answer chosen by Sudeep Singh
Shri RajShri Raj
Yes, it is possible to achieve this using a Flow. You can create a Flow that is triggered when the Order status is set to "Order Dispatched" and use the Flow to update the Next Order Date field on the Contract.
Here is an example of how you can accomplish this using a Flow:
Create a new Flow and choose "Record-Triggered Flow" as the type.
Use a "Record Update" element to update the Next Order Date field on the Contract.
Use a "Formula" element to calculate the Next Order Date by adding 30 days to the Order Start Date.
To get the next Wednesday you can use a formula as MOD(WEEKDAY(Order_Start_Date__c)+5,7) = 0
Use an "Update Records" element to update the Next Order Date field on the Contract with the calculated value.
Use the "Record Lookup" element to look up the contract based on the order start date.
Use the "Decision" element to check if the calculated Next Order Date is a Wednesday or not, if not use another formula element to get the next wednesday.
Finally, activate the Flow and test it by creating a new Order with the status set to "Order Dispatched."
Sudeep SinghSudeep Singh 
My test class is running but not covering 

Class :- 
public class AutoConvertLead {
    @InvocableMethod
    public static void assignLeads(List<Id> LeadIds) { 
        try{ 
            Map<String,Date> NameDOBMap = new Map<String,Date>();
            List<String> leadNames = new List<String>();
            List<Date> leadDOBs = new List<Date>();
            List<Database.LeadConvert> massLeadConvert = new List<Database.LeadConvert>();
            List<Account> accountsToUpdate = new List<Account>();
            List<Account> accountsToInsert = new List<Account>();
            List<Contract> contractsToInsert = new List<Contract>();
            Map<String,Account> nameDOBToAccountMap = new Map<String,Account>();
            Map<String,Account> newCreatedAccounts = new Map<String,Account>();
            Map<ID,Id> leadProductMap = new Map<Id,Id>();
            
            Id personAccountRecordTypeId = Schema.SObjectType.Account.getRecordTypeInfosByName().get('Person Account').getRecordTypeId();
            LeadStatus cLeadStatus = [SELECT Id,MasterLabel FROM LeadStatus WHERE isConverted = true LIMIT 1];  
            
            List<Lead> leads = [SELECT Id,Name,LastName,FirstName,Email,Date_Of_Birth__c,Service__c,Ethnicity__c, Race__c,Gender__c FROM Lead WHERE Id IN :LeadIds];
            
            for(Lead lead: leads) {
                leadNames.add(String.valueOf(lead.Name));
                leadDOBs.add(lead.Date_Of_Birth__c);
                NameDOBMap.put(lead.Name, lead.Date_Of_Birth__c);
                leadProductMap.put(lead.Id,lead.Service__c);
            }
            
            Map<Id, Account> existingAccounts = new Map<Id, Account>([SELECT Id, PersonBirthdate, Name, PersonGender FROM Account WHERE Name IN :NameDOBMap.KeySet() AND PersonBirthdate IN :NameDOBMap.values()]);
            
            for(account acc: existingAccounts.values()){
                
            }
            //System.debug('Check 1'+existingAccounts);
            for(Account accc: existingAccounts.values()){
                nameDOBToAccountMap.put(accc.Name+accc.PersonBirthdate, accc);
            }
            
            for(Lead ld : leads){
                if(!nameDOBToAccountMap.containsKey(ld.Name+ld.Date_Of_Birth__c)){
                    Account existingAccount = new Account();
                    existingAccount.LastName = ld.LastName;
                    existingAccount.FirstName = ld.FirstName;
                    existingAccount.PersonEmail = ld.Email;
                    existingAccount.PersonGender = ld.Gender__c;
                    existingAccount.RecordTypeId =  personAccountRecordTypeId;
                    existingAccount.Ethnicity__pc = ld.Ethnicity__c;
                    existingAccount.Race__pc = ld.Race__c;
                    existingAccount.PersonGender = ld.Gender__c;
                    existingAccount.PersonBirthdate = ld.Date_Of_Birth__c;
                    accountsToInsert.add(existingAccount);
                }  
            }
            
            if(accountsToInsert.size()>0){
                insert accountsToInsert;
            }
            //system.debug('accountsToInsert'+accountsToInsert);
            
            for(account acc: accountsToInsert){
                newCreatedAccounts.put(acc.FirstName+acc.LastName, acc);
            }
            //system.debug('newCreatedAccounts'+newCreatedAccounts);
            for(Lead lead : leads){
                //System.debug('Check 2');
                Database.LeadConvert LeadConvert = new Database.LeadConvert();
                LeadConvert.setLeadId(lead.Id);
                LeadConvert.setConvertedStatus(cLeadStatus.MasterLabel);
                LeadConvert.setDoNotCreateOpportunity(false);
                
                if(lead.Name != null && lead.Date_Of_Birth__c != null){                    
                    if(nameDOBToAccountMap.containsKey(lead.Name+lead.Date_Of_Birth__c) && nameDOBToAccountMap.get(lead.Name+lead.Date_Of_Birth__c)!=Null){
                        //system.debug('existingAccount==>'+nameDOBToAccountMap.get(lead.Name+lead.Date_Of_Birth__c));
                        Account existingAccount = new Account();
                        existingAccount.Id = nameDOBToAccountMap.get(lead.Name+lead.Date_Of_Birth__c).id;
                        //system.debug('existingAccount'+existingAccount);
                        existingAccount.Ethnicity__pc = lead.Ethnicity__c;
                        existingAccount.Race__pc = lead.Race__c;
                        existingAccount.PersonGender = lead.Gender__c;
                        accountsToUpdate.add(existingAccount);
                        LeadConvert.setAccountId(existingAccount.Id);
                    }
                    else{
                        //system.debug('lead.Name+lead.Date_Of_Birth__c'+lead.FirstName+lead.LastName);
                        if(newCreatedAccounts.containskey(lead.FirstName+lead.LastName) && newCreatedAccounts.get(lead.FirstName+lead.LastName)!= Null){
                            LeadConvert.setAccountId(newCreatedAccounts.get(lead.FirstName+lead.LastName).Id);
                        }  
                    }
                    //System.debug('LeadConvert.getAccountId()'+LeadConvert.getAccountId()); 
                    massLeadConvert.add(LeadConvert);
                    //system.debug('massLeadConvert'+massLeadConvert);
                }
            }
            
            if(!accountsToUpdate.isEmpty()){
                //system.debug('accountsToUpdate'+accountsToUpdate);
                update accountsToUpdate;
                //system.debug('accountsToUpdate'+accountsToUpdate);
                
            }
            
            if(!massLeadConvert.isEmpty()){
                //system.debug('massLeadConvert'+massLeadConvert);
                List<Database.LeadConvertResult> lcr = Database.convertLead(massLeadConvert);
                for(Database.LeadConvertResult leadConvertResult : lcr) {
                    //system.debug('leadConvertResult'+leadConvertResult);
                    //system.debug('accountid'+existingAccounts.containskey(leadConvertResult.accountid));
                    if(leadConvertResult.isSuccess() && !existingAccounts.containskey(leadConvertResult.accountid) ) {
                        Contract contract = new Contract();
                        contract.Status = 'Draft';
                        contract.AccountId = leadConvertResult.getAccountId();
                        contract.StartDate = system.today();
                        contract.ContractTerm = 12;
                        if(leadProductMap.containskey(leadConvertResult.getLeadId()) && leadProductMap.get(leadConvertResult.getLeadId())!=Null){
                            contract.Service__c = leadProductMap.get(leadConvertResult.getLeadId());
                        }
                        contractsToInsert.add(contract);
                    }
                }
            }
            
            if(!contractsToInsert.isEmpty()){
                insert contractsToInsert;
            }
        }catch(Exception e){
            //System.debug('Error: '+e.getMessage()+ 'Line Number'+e.getLineNumber());
        }
    }
}

Test Class :- 
 
@isTest
public class Test_AutoConvertLead {
    @isTest
    static void testAutoConvertLead()
    {
        String recordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('Person Account').getRecordTypeId();
        Account acc= new Account(
        RecordTypeID=recordTypeId ,
        FirstName='Test FName',
        LastName='Test LName',
        PersonBirthdate = system.today(),
        PersonGender = 'Male',
        PersonMailingStreet='test@yahoo.com',
        PersonMailingPostalCode='12345',
        PersonMailingCity='SFO',
        PersonEmail='test@yahoo.com',
        PersonHomePhone='1234567',
        PersonMobilePhone='12345678'
        );        
        insert acc;
        
        Product2 p = new Product2();
        p.Name = 'product';
        p.sstation__Msrp__c = 1;
        insert p;
        
        Lead ld = new lead();
        ld.LastName = 'test';
        ld.FirstName = 'class';
        ld.Email = 'test@gmail.com';
        ld.Date_Of_Birth__c = system.today();
        ld.Race__c = 'Asian';
        ld.Ethnicity__c = 'Hispanic or Latino';
        ld.Gender__c = 'Male';
        ld.Status = 'New';
        ld.Shipping_First_Name__c = 'test';
        ld.Shipping_Last_Name__c = 'class';
        ld.City = 'test';
        ld.Country = 'tes';
        ld.Street = 'test';
        ld.State = 'test';
        ld.PostalCode = '000000';
        ld.Service__c = p.Id;
        insert ld;
        
        Account accc = new Account();
        accc.LastName = ld.LastName;
        accc.FirstName = ld.FirstName;
        accc.PersonEmail = ld.Email;
        //accc.PersonBirthdate = ld.Date_Of_Birth__c-3;
        accc.Race__pc = ld.Race__c;
        accc.Ethnicity__pc = ld.Ethnicity__c;
        accc.PersonGender = ld.Gender__c;
        accc.BillingCity = ld.City;
        accc.BillingCountry = ld.Country;
        accc.BillingPostalCode = ld.PostalCode;
        accc.BillingState = ld.State;
        accc.BillingStreet = ld.Street;
        insert accc;
        
  
        Contract cont = new Contract();
        cont.AccountId= accc.id;
        cont.StartDate=date.today();
        cont.ContractTerm=2;
        cont.Status='Draft';
        //cont.Pricebook2Id = standardPricebook.Id;
        //cont.Service__c = op.Id;
        //cont.Insurance__c = mp.Id;
        cont.BillingStreet = 'test';
        cont.BillingPostalCode = '759128';
        cont.BillingState = 'test';
        cont.BillingCity = 'test';
        cont.BillingCountry = 'test';
        cont.BillingLatitude = 20.296059;
        cont.BillingLongitude = 85.824539;
        cont.ShippingCity = 'test';
        cont.ShippingCountry = 'test';
        cont.ShippingPostalCode = '777777';
        cont.ShippingLatitude = 20.296059;
        cont.ShippingLongitude = 85.824539;
        cont.Service__c = p.Id;
        insert cont;
        
      
        {

            System.assert(True, 'ErrorMessage');
            
             }
        
        
        Test.startTest();
        Lead l = new Lead(LastName = 'Test Lead',
                     Company = 'Test Company',Race__c = 'Asian',Ethnicity__c = 'Hispanic or Latino'
                     );
        insert l;
        
        AutoConvertLead obj = new AutoConvertLead();
        //String CRON_EXP = '0 0 0 3 9 ? 2042';
        //system.schedule('Test status Check9', CRON_EXP, obj );
        
        Test.stopTest();
        
        
        // For Schedulable AutoSubscriptionForOrderCreation
        
        
    }

}
Best Answer chosen by Sudeep Singh
Sai PraveenSai Praveen (Salesforce Developers) 
Hi Sudeep,

Can you try the test class as below which may give you above 85% coverage.
 
@isTest
public class Test_AutoConvertLead {
    @isTest
    static void testAutoConvertLead()
    {
        String recordTypeId = Schema.getGlobalDescribe().get('Account').getDescribe().getRecordTypeInfosByName().get('Person Account').getRecordTypeId();
        Account acc= new Account(
        RecordTypeID=recordTypeId ,
        FirstName='Test FName',
        LastName='Test LName',
        PersonBirthdate = system.today(),
        PersonMailingStreet='test@yahoo.com',
        PersonMailingPostalCode='12345',
        PersonMailingCity='SFO',
        PersonEmail='test@yahoo.com',
        PersonHomePhone='1234567',
        PersonMobilePhone='12345678'
        );        
        insert acc;
        
        Product2 p = new Product2();
        p.Name = 'product';
        insert p;
        
        Lead ld = new lead();
        ld.LastName = 'test';
        ld.FirstName = 'class';
        ld.Email = 'test@gmail.com';
        ld.Date_Of_Birth__c = system.today();
        ld.Gender__c = 'Male';
        ld.Status = 'New';
        ld.City = 'test';
        ld.Country = 'tes';
        ld.Street = 'test';
        ld.State = 'test';
        ld.PostalCode = '000000';
        ld.Service__c = p.Id;
        insert ld;
        List<Id> leadlist= new list<Id>();
        leadlist.add(ld.id);
        Account accc = new Account();
        accc.LastName = ld.LastName;
        accc.FirstName = ld.FirstName;
        accc.PersonEmail = ld.Email;
        //accc.PersonBirthdate = ld.Date_Of_Birth__c-3;
        accc.BillingCity = ld.City;
        accc.BillingCountry = ld.Country;
        accc.BillingPostalCode = ld.PostalCode;
        accc.BillingState = ld.State;
        accc.BillingStreet = ld.Street;
        insert accc;
        
  
        Contract cont = new Contract();
        cont.AccountId= accc.id;
        cont.StartDate=date.today();
        cont.ContractTerm=2;
        cont.Status='Draft';
        //cont.Pricebook2Id = standardPricebook.Id;
        //cont.Service__c = op.Id;
        //cont.Insurance__c = mp.Id;
        cont.BillingStreet = 'test';
        cont.BillingPostalCode = '759128';
        cont.BillingState = 'test';
        cont.BillingCity = 'test';
        cont.BillingCountry = 'test';
        cont.BillingLatitude = 20.296059;
        cont.BillingLongitude = 85.824539;
        cont.ShippingCity = 'test';
        cont.ShippingCountry = 'test';
        cont.ShippingPostalCode = '777777';
        cont.ShippingLatitude = 20.296059;
        cont.ShippingLongitude = 85.824539;
        cont.Service__c = p.Id;
        insert cont;
        
      
        {

            AutoConvertLead.assignLeads(leadlist);
             }
        
        
        Test.startTest();
      
        
        Test.stopTest();
        
        
        // For Schedulable AutoSubscriptionForOrderCreation
        
        
    }

}

Let me know if you face any issues.

If this solution helps, Please mark it as best answer.

Thanks,
Jaye LoweJaye Lowe 
I have a use case where we have a webform that is inserted leads in salesforce. The first submission from the webform is creating a lead with a name and number. Then the second submission is a survey. Both are creating leads in salesforce. I need some way, preferrably declarative way of matching the two records and then merging them, or copying all the details from record 2 in to record 1 and then deletiing record 2. Any ideas? 
Best Answer chosen by Jaye Lowe
VinayVinay (Salesforce Developers) 
Hi Jaye,

Currently auto merge duplicate leads feature is unavailable at moment.  Kindly review below Idea and vote for this feature.

https://ideas.salesforce.com/s/idea/a0B8W00000GdhPZUAZ/allow-automerge-in-duplicate-management

However you can check below appexchange tool for merging duplicates records.

https://appexchange.salesforce.com/listingDetail?listingId=a0N3A00000G5tCPUAZ&tab=e&_ga=2.71712855.532635474.1674513347-602491664.1654971272

Please mark as Best Answer if above information was helpful.

Thanks,
Admin3 RadiusAdmin3 Radius 
In flow, I would like to get a records from an object and check from an array(or an alternative) if such match exist then for those that does not exist, I need to create that records with predetermined values. So here is my sequence:
1. Fetch records for object A with filter user and year
2. from the result with perhaps an array? (January~December - as text) determine which value have no match.
3. From the list of non existing record, iterate on array with missing Month and create those records with default values.
 
I dont know how to implement or create the flow for Item 2 & 3.
Any experts help is greatly appreciated. Thank you in advance.
Best Answer chosen by Admin3 Radius
Shri RajShri Raj
There are also other ways to implement this but, 
Start with a "Record Lookup" element to fetch records from object A, with a filter to retrieve records for a specific user and year.
Create a "Loop" element to iterate through the list of records returned in step 1.
Inside the loop, create a "Decision" element to check if the current record's month value matches any of the values in your array of months (January~December). You can use the "Contains" element to check if the current record's month value is contained in your array.
If the current record's month value does not match any of the values in your array, create a new record in object A using the "Create Record" element. You can use the "Assign" element to set the default values for the new record.
If the current record's month value does match a value in your array, continue to the next record in the loop.
Once all records have been processed, the flow will exit the loop and continue with any subsequent elements you have in your flow.
Connor CainConnor Cain 
I can't get a test class to work for a Trigger that is only looking for when a Case Comment is Updated.

trigger validation on CaseComment (before update) {  
    if(Trigger.isUpdate){
        for(CaseComment caseCmt : Trigger.new){
            if(caseCmt.CreatedById != System.UserInfo.getUserId()){
                caseCmt.addError('You can not edit Someone else\'s Comment');
            }
        }
    }
}

Any Help/Advice would be appreciated:)
Best Answer chosen by Connor Cain
Raj VakatiRaj Vakati
Try this
 
@isTest
public class CaseCOmmentsTest{
 
    
    static testMethod  void createTestData(){
		Case   tCase = new Case();

        tCase.Status = 'Open';
        tCase.Description = 'Test Description';
        tCase.Origin = 'Annuity External';
        tCase.Type = 'Feature Request';
        tCase.Business_Impact__c = 'No Impact';
        tCase.Priority = 'Low';
      
        INSERT tCase;
        
     CaseComment   tComment = new CaseComment();
        tComment.ParentId = tCase.Id;
        tComment.CommentBody = 'Some Comment';
        tComment.IsPublished = TRUE;
        
        INSERT tComment;
        
      Profile  tProfile = 
            [
                SELECT Id 
                FROM   Profile 
                WHERE  Name = 'System Admin'
            ];
            
       User tUser = new User(
            Alias = 'standt', 
            Email='standarduser@teasdasdasdasdstorg.com', 
            EmailEncodingKey='UTF-8', 
            LastName='Testing', 
            LanguageLocaleKey='en_US', 
            LocaleSidKey='en_US', 
            ProfileId = tProfile.Id, 
            TimeZoneSidKey='America/Los_Angeles', 
            UserName='testuser@someteasdasdasdasdstorg.com'
        );
        
        INSERT tUser;       
		
		 System.runAs(tUser){
			 tComment.CommentBody = 'Some C123123123omment';
			 update tComment ;
			}
    }
   
}