在顶点中过滤多个for循环的问题|销售队伍

时间:2014-08-20 01:07:56

标签: salesforce apex

我遇到多个循环导致系统资源错误的情况。

我需要一些关于此要求的地图语法或编码样本地图的帮助。

要求是:

  • 帐户有一个或多个ReportCard记录。
  • ReportCard有帐户和联系。
  • 现在我需要获取ReportCards列表,并按每个联系人和最近创建的记录过滤1个。
  • 如果ReportCard有2条记录具有相同的联系人,则仅包括最近创建的记录。
// get list of unique accounts from the set 
list<Account> accList = new list<Account >([SELECT Id,Average_of_Pulse_Check_Recommend_Score_N__c,Average_of_Recommend_Score_Lanyon_N__c,Average_of_Touchpoint_Recommend_Score_N__c,Average_of_Touch_Point_Satisfaction_N__c FROM Account WHERE Id in:AccIds]);

list<ReportCard__c> allRCList = new list<ReportCard__c>([SELECT Id,Net_Promoter_text__c,CreatedDate, Contact__c, Account__c, RecordTypeID, Touchpoint_Satisfaction_text__c FROM ReportCard__c WHERE Account__c in:accList Order By Account__c, CreatedDate Desc]);

List<ReportCard__c> rcListbyAccounts = new List<ReportCard__c>();

for(Account acc:accList)
{

任何帮助都将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的情况。您已跳过for循环 - 我强烈怀疑您遇到的任何问题都在循环中而不是在查询中。

看起来您应该阅读有关使用关系查询(常规数据库中JOIN的salesforce版本)的信息:http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_soql_relationships.htm 要特别注意子查询(其行为类似于相关列表在记录的详细信息页面上的行为)。


从我看到的情况来看,我说你根本不需要查询帐户,或者至少不是这样。这同样有效:

SELECT Id,Net_Promoter_text__c,CreatedDate, Contact__c, Account__c, ...
FROM ReportCard__c
WHERE Account__c in:accIds
ORDER BY Account__c, CreatedDate Desc

现在让我们进行攻击:

  

报告卡列表,每个联系人按1过滤,最近创建   仅记录。如果ReportCard有2条记录具有相同的联系人,请包含   只是最近创建的。

我反过来 - 我从联系人级别开始查询,转到相关的报告卡列表并选择最新的一个。这样就消除了重复联系人的问题。像这样:

SELECT Id, Name, Email,
    (SELECT Id, Net_Promoter_text__c, CreatedDate, Account__c, Account__r.Name, Account__r.Average_of_Pulse_Check_Recommend_Score_N__c
    FROM ReportCards__r
    WHERE Account__c IN :accIds
    ORDER BY CreatedDate DESC
    LIMIT 1)
FROM Contact
WHERE AccountId IN :accIds

这来自Contact&#34; down&#34;报告卡(通过关系名称ReportCards__r),然后&#34;向上&#34;从卡到帐户通过Account__r.NameAccount__r.Average_of_Pulse_Check_Recommend_Score_N__c ...