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
Gaurav-GuleriaGaurav-Guleria 

How to overcome nested for Loops

Hi guys,

 

I don't want to use nested for loops in the Trigger.Is there any workaound for this?

 

Here is the code:

 

Trigger updatesteApplcn1 on Implementation_Rate__c (After insert,After Update) {

                List<ID> ImplementationTeamIDs = new List<ID>();

                List<ID> RegionIDs = new List<ID>();

                List<ID> ImplementationRateIDs = new List<ID>();

                for(Implementation_Rate__c imr :trigger.new){

                                if(Trigger.IsInsert || (imr.Implementation_Team_ID__c!= trigger.oldMap.get(imr.id).Implementation_Team_ID__c ||

                                                                                                                                imr.Region_ID__c!=trigger.oldMap.get(imr.id).Region_ID__c)){

                                                ImplementationTeamIDs.add(imr.Implementation_Team_ID__c);

                                                RegionIDs.add(imr.Region_ID__c);

                                                ImplementationRateIDs.add(imr.id);

                                }             

                }

                if(ImplementationTeamIDs.size()>0||RegionIDs.size()>0){

                                Map<Id,Site_Application__c> Map_Site_Application= new Map<Id,Site_Application__c>([SELECT id,Application_Id__c FROM Site_Application__c WHERE Application_Id__r.Implementation_ID__c IN:ImplementationTeamIDs AND Site_CX__r.Region_ID__c IN:RegionIDs]);

                                Map<ID,Implementation_Rate__c> Map_ImplementationRate = new Map<Id,Implementation_Rate__c>([SELECT id,Rate__c,Travel_Expence_Rate__c, Hours_Per_Week__c from Implementation_Rate__c where ID IN:ImplementationRateIDs]);

                                for(Site_Application__c siteapp: Map_Site_Application.values()){

                                                for(Implementation_Rate__c imprate:Map_ImplementationRate.values()){

                                                                Site_Application__c s = Map_Site_Application.get(siteapp.id);

                                                                s.Rate__c = imprate.Rate__c;

                                                                s.Travel_Expence_Rate__c = imprate.Travel_Expence_Rate__c;

                                                                s.Hours_Per_Week__c  = imprate.Hours_Per_Week__c;

                                                }

                                }

                                update MapSite_Application.values();

                }

}

 

 

 

Thanks for your help in advance.

 

Regards,

Gaurav

kiranmutturukiranmutturu
yep you can create a map to get Implementation_Rate__c for the respective Site_Application__c and make use of the map by using outer for loop only...map may be like this

map<id,Implementation_Rate__c > mapImplementation = new map<id,Implementation_Rate__c >();// this is apart from your query....
and fill the map with all the possible values....
finally it should look some thing like this

for(Site_Application__c siteapp: Map_Site_Application.values()){

Site_Application__c s = Map_Site_Application.get(siteapp.id);
s.Rate__c = mapImplementation.get(siteapp.id).imprate.Rate__c;
s.Travel_Expence_Rate__c = mapImplementation.get(siteapp.id).Travel_Expence_Rate__c;
s.Hours_Per_Week__c = mapImplementation.get(siteapp.id).Hours_Per_Week__c;

}


sushant sussushant sus
if u have some relation b/w Site_Application__c and Implementation_Rate__c
then you dont have to use nested for loop u can use map for this

as mention by Mr kiran
Gaurav-GuleriaGaurav-Guleria

Hi Kiran/Sushant,

Thanks for your reply.
Both Site_Application__c and Implementation_Rate__c objects are not related to each other.So this solution is not solving the purpose.

 

Gaurav

sushant sussushant sus
i think u can use region_id is common in both object u can use ths to map value
try this