2016-03-08 1 views
0

Я использую ведущую карту, где первая идентификатор представляет собой идентификатор аккаунта и список напоминает список клиентов, связанных с этой учетной записью, такие как: Map<id, List<Id> > leadMap = new Map< id, List<id> >();Apex - Извлечение записей из типа Map <SObject, Список <SObject>>

Мой вопрос заключается в следующем: Зная идентификатор ведущего, как получить идентификатор связанной учетной записи с карты. Мой код выглядит примерно так: проблемы есть на прокомментированной строке.

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

Проблема заключается в том, что в моей LeadMap у меня есть список , который состоит из всех ссылок, связанных с идентификатором учетной записи. Зная только 1 ключевой идентификатор, как извлечь идентификатор учетной записи? –

ответ

0

Вы можете поместить все свинцовый идентификатор идентификатор и отображение компании в триггере затем получить идентификатор компании

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

Позвольте мне убедиться, что я понимаю вашу проблему. В настоящее время у вас есть карта, которая использует идентификатор учетной записи в качестве ключа к значению списка идентификаторов ведущего - значит, карта -> Список. Верный?

Ваша цель - перейти от идентификатора ведущего к идентификатору учетной записи.

Если это правильно, значит, вы находитесь в плохом состоянии, потому что ваша текущая структура требует очень медленного итеративного поиска. Правильный код будет выглядеть следующим образом (заменить комментировала строку с этим кодом):

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; 
     } 
    } 
} 

Мне не нравится это решение, потому что это требует Перебора карты, а затем над каждым из списков в каждом из значений , Это медленно.

Если это не bulkified кода, вы можете сделать запрос Select и получить значение Account__c от существующего Lead, выполнив:

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.

Любой из этих вариантов должен работать, все зависит от того, как этот фрагмент кода выполняется и где.

Удачи вам!

Смежные вопросы