You need to sign in to do that
Don't have an account?
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
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;
}
then you dont have to use nested for loop u can use map for this
as mention by Mr kiran
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
try this