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
Dave HamburgDave Hamburg 

Bulkify question

Trying to bulk up this method and struggling with the map concept. The Agreement__c has a related list called Facilities_Covered__c, It also has a related Modification__c and when it is created I am building a junction object between it and the Facilities (account). How can i create the group of related items?
 
public void setrelatedFC() {
			List<Modifications_Facilities_Covered__c> newFC = new List<Modifications_Facilities_Covered__c>();

			for (Modification__c newmods : newModifications.values())
				{

				Modifications_Facilities_Covered__c fc = new Modifications_Facilities_Covered__c();	

					
					list<Facilities_Covered__c> fac = [select Facility__c from Facilities_Covered__c where Agreement__c = :newmods.Agreement__c];

					for(Facilities_Covered__c f : fac )
					{

					fc.Modification__c  = newmods.id ;
					fc.Facility__c    =  f.Facility__c;

					newFC.add(fc);
					}
				}
				insert newFC;
		}

 
Best Answer chosen by Dave Hamburg
Amit Chaudhary 8Amit Chaudhary 8
Please update your code like below
public void setrelatedFC() 
{
	List<Modifications_Facilities_Covered__c> newFC = new List<Modifications_Facilities_Covered__c>();
	Set<String> setAgreID = new Set<String>();
	
	for ( Modification__c newmods : newModifications.values() )
	{
		setAgreID.add( newmods.Agreement__c );
	}
	
	if(setAgreID.size() > 0 )
	{
		List<Facilities_Covered__c> lstFac = [ select Facility__c,Agreement__c from Facilities_Covered__c where Agreement__c = :setAgreID ] ;
		Map< String, List<Facilities_Covered__c> > mapAggWise = new Map< String, List<Facilities_Covered__c> >();
		
		For( Facilities_Covered__c  fc : lstFac )
		{
			if( mapAggWise.containsKey(fc.Agreement__c) )
			{
				List<Facilities_Covered__c> lstFaci = mapAggWise.get( fc.Agreement__c );
				lstFaci.add(fc);
			}
			else
			{
				List<Facilities_Covered__c> lstFaci = new List<Facilities_Covered__c>();
				lstFaci.add(fc);
				mapAggWise.put(fc.Agreement__c , lstFaci );
			}
		}
		
		
		for ( Modification__c newmods : newModifications.values() )
		{
			if( mapAggWise.containsKey(newmods.Agreement__c) )
			{	
				list<Facilities_Covered__c> fac = mapAggWise.get( newmods.Agreement__c );

				for(Facilities_Covered__c f : fac )
				{
					Modifications_Facilities_Covered__c fc = new Modifications_Facilities_Covered__c();	
					fc.Modification__c  = newmods.id ;
					fc.Facility__c    =  f.Facility__c;

					newFC.add(fc);
				}
				
			}	
		}
		
		insert newFC;
	}	
}

Let us know if this will help you
 

All Answers

Dave HamburgDave Hamburg
also in testing I I found an error and updated to fix it the code is now 
 
public void setrelatedFC() {
			List<Modifications_Facilities_Covered__c> newFC = new List<Modifications_Facilities_Covered__c>();

			for (Modification__c newmods : newModifications.values())
				{

					
					list<Facilities_Covered__c> fac = [select Facility__c from Facilities_Covered__c where Agreement__c = :newmods.Agreement__c];

					for(Facilities_Covered__c f : fac )
					{
					Modifications_Facilities_Covered__c fc = new Modifications_Facilities_Covered__c();	
					fc.Modification__c  = newmods.id ;
					fc.Facility__c    =  f.Facility__c;

					newFC.add(fc);
					}
				}
				insert newFC;
		}

 
Amit Chaudhary 8Amit Chaudhary 8
Please update your code like below
public void setrelatedFC() 
{
	List<Modifications_Facilities_Covered__c> newFC = new List<Modifications_Facilities_Covered__c>();
	Set<String> setAgreID = new Set<String>();
	
	for ( Modification__c newmods : newModifications.values() )
	{
		setAgreID.add( newmods.Agreement__c );
	}
	
	if(setAgreID.size() > 0 )
	{
		List<Facilities_Covered__c> lstFac = [ select Facility__c,Agreement__c from Facilities_Covered__c where Agreement__c = :setAgreID ] ;
		Map< String, List<Facilities_Covered__c> > mapAggWise = new Map< String, List<Facilities_Covered__c> >();
		
		For( Facilities_Covered__c  fc : lstFac )
		{
			if( mapAggWise.containsKey(fc.Agreement__c) )
			{
				List<Facilities_Covered__c> lstFaci = mapAggWise.get( fc.Agreement__c );
				lstFaci.add(fc);
			}
			else
			{
				List<Facilities_Covered__c> lstFaci = new List<Facilities_Covered__c>();
				lstFaci.add(fc);
				mapAggWise.put(fc.Agreement__c , lstFaci );
			}
		}
		
		
		for ( Modification__c newmods : newModifications.values() )
		{
			if( mapAggWise.containsKey(newmods.Agreement__c) )
			{	
				list<Facilities_Covered__c> fac = mapAggWise.get( newmods.Agreement__c );

				for(Facilities_Covered__c f : fac )
				{
					Modifications_Facilities_Covered__c fc = new Modifications_Facilities_Covered__c();	
					fc.Modification__c  = newmods.id ;
					fc.Facility__c    =  f.Facility__c;

					newFC.add(fc);
				}
				
			}	
		}
		
		insert newFC;
	}	
}

Let us know if this will help you
 
This was selected as the best answer