如何聚合列表中的记录

时间:2014-02-10 15:55:48

标签: salesforce apex-code

我有一个批处理程序,我需要通过特定联系人和基金汇总(汇总)几个货币字段。我需要一个新的眼睛,因为我无法弄清楚我需要如何通过联系和资金正确汇总字段。

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

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

我正在迭代记录范围,这是大约275,000条返回的记录。我有一张地图,通过我的范围内的关键字段返回联系人列表。

现在,当我循环遍历每个联系人时,我将它们放入列表并插入。问题是我需要通过资金和联系汇总(汇总)。

例如,假设地图为特定关键字段返回十次“John Doe”的联系人。因此,“约翰·多伊”联系人记录中将有10条相关记录。

问题是同一个基金可以存在于那10个需要汇总的记录中。

因此,如果“基金A”出现5次而“基金B”出现3次而“基金C”出现2次,那么我在“John Doe”联系中总共应该只有3条相关记录由基金汇总(汇总)的记录。

我无法弄清楚如何在我的列表中按基金汇总汇总。

有人可以帮忙吗?

感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

这里的关键是为地图使用字符串化索引键,而不是使用原始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();
}

结果是您将组成唯一汇总记录的所有不同“键”组合成单个字符串化键,然后将该字符串化键用作映射中的索引以强制实现唯一性。

上面的示例不完整,但您应该可以从此处获取。