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
Akash Choudhary 17Akash Choudhary 17 

Required help to bulkify this code

Hi All, 

I need to bulkify this code please help.

public class Move_Contact {
    public static void updateContact(List <Contact> conList){
        Map <Id,Id> conMap = new Map <Id,Id>();
        
        for(Contact myCon : conList){
            if(myCon.Email != null){
                string domain = myCon.Email.split('@').get(1);
               
                String MainDomain = domain;
                string website ='www.' +MainDomain;
                string httpWebsite ='http://www.' + MainDomain;
                string httpswebsite ='https://www.'+ MainDomain;
                string international = MainDomain + '.%';
                
                Account acc = [SELECT Id
                               FROM Account 
                               WHERE Website =:website
                               or Website =:httpWebsite
                               or Website =:httpswebsite
                               or Website =:international Limit 1];
                
                myCon.AccountId = acc.Id ;
            }
        }
        
       
    }
    
}
Thanks
Best Answer chosen by Akash Choudhary 17
Steven NsubugaSteven Nsubuga
public class Move_Contact {
    public static void updateContact(List <Contact> conList){
        
		Set <String> contactIds = new Set <String>();
        Set <String> sites = new Set <String>();
        for(Contact myCon : conList){
			contactIds.add(myCon.Id);
            if(myCon.Email != null){
                string domain = myCon.Email.split('@').get(1);
               
                String MainDomain = domain;
                string website ='www.' +MainDomain;
                string httpWebsite ='http://www.' + MainDomain;
                string httpswebsite ='https://www.'+ MainDomain;
                string international = MainDomain + '.%';
                sites.add(website);
				sites.add(httpWebsite);
				sites.add(httpswebsite);
				sites.add(international);
            }
        }
		
		List<Account> accs = [SELECT Id, Website FROM Account WHERE Website IN:sites];
		Map <String, Id> websiteIdMap = new Map <String, Id>();
		for(Account acc : accs){
			websiteIdMap.put(acc.Website, acc.Id);
		}
		
		List<Contact> contactList = [SELECT Id, Email, AccountId FROM Contact WHERE Id IN:contactIds];
		for(Contact myCon : contactList){
            if(myCon.Email != null){
                string domain = myCon.Email.split('@').get(1);
                
				for(String website : websiteIdMap.keyset()) {
					if (website.contains(domain)) {
						myCon.AccountId = websiteIdMap.get(website);
						break;
					}
				} 
            }
        }
		update contactList;
    }
}

 

All Answers

Steven NsubugaSteven Nsubuga
public class Move_Contact {
    public static void updateContact(List <Contact> conList){
        
        Set <String> sites = new Set <String>();
        for(Contact myCon : conList){
            if(myCon.Email != null){
                string domain = myCon.Email.split('@').get(1);
               
                String MainDomain = domain;
                string website ='www.' +MainDomain;
                string httpWebsite ='http://www.' + MainDomain;
                string httpswebsite ='https://www.'+ MainDomain;
                string international = MainDomain + '.%';
                sites.add(website);
				sites.add(httpWebsite);
				sites.add(httpswebsite);
				sites.add(international);
            }
        }
		List<Account> accs = [SELECT Id, Website FROM Account WHERE Website IN:sites];
		Map <String, Id> websiteIdMap = new Map <String, Id>();
		for(Account acc : accs){
			websiteIdMap.put(acc.Website, acc.Id);
		}
		
		for(Contact myCon : conList){
            if(myCon.Email != null){
                string domain = myCon.Email.split('@').get(1);
                
				for(String website : websiteIdMap.keyset()) {
					if (website.contains(domain)) {
						myCon.AccountId = acc.Id;
						break;
					}
				} 
            }
        }
		update conList;
    }
}
Akash Choudhary 17Akash Choudhary 17
Hi Steven,

It is still not working the acc.Id in 32nd line is out of For loop of account , so it does not exist. Hence the code is not working. kindly please suggest something else
Thanks
 
Steven NsubugaSteven Nsubuga
public class Move_Contact {
    public static void updateContact(List <Contact> conList){
        
        Set <String> sites = new Set <String>();
        for(Contact myCon : conList){
            if(myCon.Email != null){
                string domain = myCon.Email.split('@').get(1);
               
                String MainDomain = domain;
                string website ='www.' +MainDomain;
                string httpWebsite ='http://www.' + MainDomain;
                string httpswebsite ='https://www.'+ MainDomain;
                string international = MainDomain + '.%';
                sites.add(website);
				sites.add(httpWebsite);
				sites.add(httpswebsite);
				sites.add(international);
            }
        }
		List<Account> accs = [SELECT Id, Website FROM Account WHERE Website IN:sites];
		Map <String, Id> websiteIdMap = new Map <String, Id>();
		for(Account acc : accs){
			websiteIdMap.put(acc.Website, acc.Id);
		}
		
		for(Contact myCon : conList){
            if(myCon.Email != null){
                string domain = myCon.Email.split('@').get(1);
                
				for(String website : websiteIdMap.keyset()) {
					if (website.contains(domain)) {
						myCon.AccountId = websiteIdMap.get(website);
						break;
					}
				} 
            }
        }
		update conList;
    }
}

 
Akash Choudhary 17Akash Choudhary 17
Hi Steven, 
The  code is still not working here is the error : Apex trigger MoveContact caused an unexpected exception, contact your administrator: MoveContact: execution of AfterInsert caused by: System.FinalException: Record is read-only: Class.Move_Contact.updateContact: line 32, column 1.

Can we do something about it?

Thanks.
 
Steven NsubugaSteven Nsubuga
public class Move_Contact {
    public static void updateContact(List <Contact> conList){
        
		Set <String> contactIds = new Set <String>();
        Set <String> sites = new Set <String>();
        for(Contact myCon : conList){
			contactIds.add(myCon.Id);
            if(myCon.Email != null){
                string domain = myCon.Email.split('@').get(1);
               
                String MainDomain = domain;
                string website ='www.' +MainDomain;
                string httpWebsite ='http://www.' + MainDomain;
                string httpswebsite ='https://www.'+ MainDomain;
                string international = MainDomain + '.%';
                sites.add(website);
				sites.add(httpWebsite);
				sites.add(httpswebsite);
				sites.add(international);
            }
        }
		
		List<Account> accs = [SELECT Id, Website FROM Account WHERE Website IN:sites];
		Map <String, Id> websiteIdMap = new Map <String, Id>();
		for(Account acc : accs){
			websiteIdMap.put(acc.Website, acc.Id);
		}
		
		List<Contact> contactList = [SELECT Id, Email, AccountId FROM Contact WHERE Id IN:contactIds];
		for(Contact myCon : contactList){
            if(myCon.Email != null){
                string domain = myCon.Email.split('@').get(1);
                
				for(String website : websiteIdMap.keyset()) {
					if (website.contains(domain)) {
						myCon.AccountId = websiteIdMap.get(website);
						break;
					}
				} 
            }
        }
		update contactList;
    }
}

 
This was selected as the best answer
Akash Choudhary 17Akash Choudhary 17
Hi Steven,

Finally working !. Thanks a ton. you are awesome.

Thanks