You need to sign in to do that
Don't have an account?

Trigger on Contact to Update Related Opportunity
Hi,
I'm trying to create a trigger that runs when a contact is created and updates the related Opportunity's location (City__c, State_Province__c, Country__c) (if the Opportunity's location is not populated yet) based on the contact's location. I have the following code but am getting errors:
Loop must iterate over a collection type: MAP<Id,Opportunity>;
I am not sure if this is the best way to go about doing this, any help is appreciated.
I'm trying to create a trigger that runs when a contact is created and updates the related Opportunity's location (City__c, State_Province__c, Country__c) (if the Opportunity's location is not populated yet) based on the contact's location. I have the following code but am getting errors:
trigger updateOppLocation on Contact (after insert) { List<OpportunityContactRole> contactRoles = [SELECT OpportunityId,ContactId FROM OpportunityContactRole WHERE ContactId IN : Trigger.new]; if(contactRoles.size()>0) { Map<Id,Id> conOpp_map = new Map<Id,Id>(); for(OpportunityContactRole cr : contactRoles) { conOpp_map.put(cr.ContactId,cr.OpportunityId); } Map<Id,Opportunity> opp_map = new Map<ID,Opportunity>([SELECT Id FROM Opportunity WHERE Id IN : conOpp_map.values()]); for(Contact c : Trigger.new) { if(conOpp_map.containsKey(c.Id)) { for (Opportunity o : opp_map) { if (o.City__c == null && o.State_Province__c == null && o.Country__c == null) { o.City__c = c.MailingCity; o.State_Province__c = c.MailingState; o.Country__c = c.MailingCountry; } } } update opp_map; } }The error I am receiving is:
Loop must iterate over a collection type: MAP<Id,Opportunity>;
I am not sure if this is the best way to go about doing this, any help is appreciated.
Replace for (Opportunity o : opp_map) Line 20 with for (Opportunity o : opp_map.values())