我使用的是销售线索映射,其中第一个id表示客户ID,列表类似于链接到该客户的销售线索列表,例如:Map<id, List<Id> > leadMap = new Map< id, List<id> >();
我的问题如下:知道潜在客户的Id,我如何从地图中获取相关帐户的Id。我的代码看起来像这样,问题在注释掉的行上。
for (Lead l : leads){
Lead newLead = new Lead(id=l.id);
if (l.Company != null) {
// newLead.Account__c = leadMap.keySet().get(l.id);
leads_to_update.add(newLead);
}
}发布于 2016-03-08 22:33:30
您可以将所有销售线索id和映射公司id放在触发器中,然后获取公司id。
Map<string,string> LeadAccountMapping = new Map<string,string>();//key is Lead id ,Company id
for(Lead l:trigger.new)
{
LeadAccountMapping.put(l.id,l.Company);
}
//put the code you want to get the company id
string companyid= LeadAccountMapping.get(l.id);发布于 2016-03-12 04:15:18
让我确定我理解你的问题。当前您有一个映射,它使用帐户ID作为Lead ID列表的值的关键字-因此该映射是-> List。对,是这样?
您的目标是从潜在客户ID转到客户ID。
如果这是正确的,那么您的情况就不好了,因为您当前的结构需要非常缓慢的迭代搜索。正确的代码如下所示(用下面的代码替换您的注释行):
for( ID actID : leadMap.keySet() ) {
for( ID leadID : leadMap.get( actId ) ) {
if( newLead.id == leadID ) {
newLead.Account__c = actId;
leads_to_update.add(newLead);
break;
}
}
}我不喜欢这个解决方案,因为它需要遍历Map,然后遍历每个值中的每个列表。它很慢。
如果这不是块代码,您可以执行一个Select查询,并通过执行以下操作从现有Lead获取Account__c值:
newLead.Account__c = [ SELECT Account__c FROM Lead WHERE Id = :l.id LIMIT 1];但是,这依赖于您的代码不会循环超过此行并达到调控器限制。
或者你可以重写你的代码,使你的Map实际上是:
Map<ID, List<Leads>> leadMap = Map<ID, List<Leads>>();然后,在构建地图的查询中,确保您的Lead也包括Account__c字段。
这些选项中的任何一个都应该起作用,这完全取决于如何执行该代码片段以及在何处执行。
祝好运!
https://stackoverflow.com/questions/35866260
复制相似问题