首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >顶点-从一种类型的Map<SObject,List<SObject>>检索记录

顶点-从一种类型的Map<SObject,List<SObject>>检索记录
EN

Stack Overflow用户
提问于 2016-03-08 19:34:11
回答 2查看 3.5K关注 0票数 0

我使用的是销售线索映射,其中第一个id表示客户ID,列表类似于链接到该客户的销售线索列表,例如:Map<id, List<Id> > leadMap = new Map< id, List<id> >();

我的问题如下:知道潜在客户的Id,我如何从地图中获取相关帐户的Id。我的代码看起来像这样,问题在注释掉的行上。

代码语言:javascript
复制
 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);
       }          
      }
EN

回答 2

Stack Overflow用户

发布于 2016-03-08 22:33:30

您可以将所有销售线索id和映射公司id放在触发器中,然后获取公司id。

代码语言:javascript
复制
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);
票数 0
EN

Stack Overflow用户

发布于 2016-03-12 04:15:18

让我确定我理解你的问题。当前您有一个映射,它使用帐户ID作为Lead ID列表的值的关键字-因此该映射是-> List。对,是这样?

您的目标是从潜在客户ID转到客户ID。

如果这是正确的,那么您的情况就不好了,因为您当前的结构需要非常缓慢的迭代搜索。正确的代码如下所示(用下面的代码替换您的注释行):

代码语言:javascript
复制
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值:

代码语言:javascript
复制
newLead.Account__c = [ SELECT Account__c FROM Lead WHERE Id = :l.id LIMIT 1];

但是,这依赖于您的代码不会循环超过此行并达到调控器限制。

或者你可以重写你的代码,使你的Map实际上是:

代码语言:javascript
复制
Map<ID, List<Leads>> leadMap = Map<ID, List<Leads>>();

然后,在构建地图的查询中,确保您的Lead也包括Account__c字段。

这些选项中的任何一个都应该起作用,这完全取决于如何执行该代码片段以及在何处执行。

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35866260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档