我使用的是潜在客户地图,其中第一个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);
}
}
答案 0 :(得分:0)
您可以将所有潜在客户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);
答案 1 :(得分:0)
让我确保理解你的问题。 目前,您有一张地图使用帐户ID作为潜在客户ID列表值的关键 - 因此地图为 - &gt;名单。正确的吗?
您的目标是从潜在客户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,然后遍历每个值中的每个列表。这很慢。
如果这不是批量化代码,您可以执行选择查询并通过执行以下操作从现有潜在客户获取Account__c值:
newLead.Account__c = [ SELECT Account__c FROM Lead WHERE Id = :l.id LIMIT 1];
但是,这依赖于您的代码没有循环遍历此行并达到调控器限制。
或者您可以重新编写代码,以确保您的地图实际上是:
Map<ID, List<Leads>> leadMap = Map<ID, List<Leads>>();
然后,在您构建地图的查询中,确保您的潜在客户还包含Account__c字段。
这些选项中的任何一个都应该有效,这完全取决于此代码段的执行方式和位置。
祝你好运!