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();
}
结果是,您将构成唯一汇总记录的所有不同键组合为一个字符串化键,然后使用该字符串化键作为映射中的索引来强制唯一性
上面的示例不完整,但您可以从这里开始学习。谢谢!这正是我需要的!