批量化交叉对象SOQL查询

时间:2013-10-24 17:30:05

标签: salesforce bulk soql apex

我正在尝试从所有“结算”联系人角色ID返回字段,这可能是一个商机记录。

我希望在我的机会触发器中找到一张地图,其中包含机会ID和相关联系人角色ID列表(即地图>)

我可以从循环trigger.new创建映射键,但似乎无法找到从我的SOQL查询中插入联系人角色ID列表的方法。

List<OpportunityContactRole> contactRoleList 
 = new List<OpportunityContactRole>([Select Id 
                                     From OpportunityContactRole 
                                     Where  Role = 'Billing' 
                                       And OpportunityId in :listOfTriggerOppIds
                                    ]);

如果需要,我可以将其余的代码放入,但是因为它实际上不起作用,我认为它可能会混淆。

1 个答案:

答案 0 :(得分:0)

不确定我是否理解你的问题,但你的意思是:?

Map<id,list<id>> mapOptyBillings = new Map<id,list<id>>(); //map of opportunityID, list<opportunityContactRole IDs

List<OpportunityContactRole> contactRoleList 
 = new List<OpportunityContactRole>([Select Id, OpportunityId
                                     From OpportunityContactRole 
                                     Where  Role = 'Billing' 
                                       And OpportunityId in :listOfTriggerOppIds
                                    ]);
//also query OpportunityId so that you can match

//iterate your result
for(OpportunityContactRole optyCR:contactRoleLis){ 
   //see if our map already has a list for the opportunity of this opportunityContactrole, 
   //if this is not the case, add it with a blank list
   if(! mapOptyBillings.containsKey(optyCR.OpportunityId)mapOptyBillings.put(optyCR.OpportunityId, new List<id>();
   mapOptyBillings.put(optyCR.OpportunityId,optyCR.id);
}