我有一个批处理程序,我需要通过特定联系人和基金汇总(汇总)几个货币字段。我需要一个新的眼睛,因为我无法弄清楚我需要如何通过联系和资金正确汇总字段。
以下是我在批处理程序中的当前代码:
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条相关记录由基金汇总(汇总)的记录。
我无法弄清楚如何在我的列表中按基金汇总汇总。
有人可以帮忙吗?
感谢任何帮助。
感谢。
答案 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();
}
结果是您将组成唯一汇总记录的所有不同“键”组合成单个字符串化键,然后将该字符串化键用作映射中的索引以强制实现唯一性。
上面的示例不完整,但您应该可以从此处获取。