Salesforce 如何聚合列表中的记录

Salesforce 如何聚合列表中的记录,salesforce,apex-code,Salesforce,Apex Code,我有一个批处理程序,我需要按特定联系人和基金汇总几个货币字段。我需要重新审视这一点,因为我不知道如何通过联系人和基金正确汇总字段 以下是我在批处理程序中的当前代码: for (My_SObject__c obj : (List<My_SObject__c>)scope) { if(!dbrToContactMap.isEmpty() && dbrToContactMap.size() > 0) { if(dbrTo

我有一个批处理程序,我需要按特定联系人和基金汇总几个货币字段。我需要重新审视这一点,因为我不知道如何通过联系人和基金正确汇总字段

以下是我在批处理程序中的当前代码:

    for (My_SObject__c obj : (List<My_SObject__c>)scope) {
        if(!dbrToContactMap.isEmpty() && dbrToContactMap.size() > 0) {
            if(dbrToContactMap.containsKey(obj.DBR__c)) {
                List<Id> contactIds = dbrToContactMap.get(obj.DBR__c);
                for(Id contactId : contactIds) {
                    My_Rollup__c rollup = new My_Rollup__c();
                    rollup.Fund_Name__c = obj.FundName__r.Name;
                    rollup.DBR__c = obj.DBR__c;
                    rollup.Contact__c = contactId;
                    rollup.YearToDate__c = obj.YearToDate__c;
                    rollup.PriorYear__c = obj.PriorYear__c;
                    rollupsToInsert.add(rollup);
                }
            }
        }
    }       
    if(!rollupsToInsert.isEmpty() && rollupsToInsert.size() > 0) {
        insert rollupsToInsert;
    }
我正在迭代记录的范围,即返回的大约275000条记录。我有一个映射,它按范围中的键字段返回联系人列表

现在,当我在每个联系人上循环时,我将这些联系人放入列表并插入。问题是我需要按基金和联系人汇总

例如,假设映射针对特定键字段返回John Doe的联系人十次。所以,在John Doe的联系记录中有10条相关记录

问题是,这10个记录中可能有相同的资金,需要进行汇总

因此,如果A基金出现5次,B基金出现3次,C基金出现2次,那么我应该在John Doe联系人记录中总共只有3个相关记录,这些记录由基金汇总

在我的列表中,我还没有弄清楚如何按基金进行汇总

有人能帮忙吗

感谢您的帮助


谢谢。

这里的关键是为您的地图使用字符串化索引键,而不是使用原始的Sobject ID。请将其视为复合外键,其中基金和DBR的组合值合并在一起。基本思路如下:

Map<String, My_Rollup__c> rollupMap = new Map<String, My_Rollup__c>();

for (My_SObject__c obj : (List<My_SObject__c>) scope)  {
    // .. stuff ..

    String index = '' + new String[] {
        '' + obj.FundName__r.Id,
        '' + obj.DBR__c,
        '' + contactId
    };

    // Find existing rollup, or create new rollup object...
    My_Rollup__c rollup = rollupMap.get(index);

    if (rollup == null) {
        rollup = new My_Rollup__c();
        rollupMap.put(index, rollup);
    }

    // Aggregate values..
}

// And save
if (rollupMap.isEmpty() == false) {
    insert rollupMap.values();
}
结果是,您将构成唯一汇总记录的所有不同键组合为一个字符串化键,然后使用该字符串化键作为映射中的索引来强制唯一性


上面的示例不完整,但您可以从这里开始学习。

谢谢!这正是我需要的!