2014-02-10 96 views
0

我有一個批處理程序,需要通過特定的聯繫人和資金彙總(彙總)多個貨幣字段。我需要一個全新的眼光,因爲我無法弄清楚如何通過聯繫人和資金正確地彙總字段。如何彙總列表中的記錄

這裏是在批處理程序我當前的代碼:

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」十次的聯繫人。因此,「John Doe的」聯繫記錄將會有10條相關記錄。

問題是相同的基金可以在那10條記錄中,需要彙總。

因此,如果「基金A」出現5次,「基金B」出現3次,「基金C」出現2次,那麼我應該只有3次相關記錄在「John Doe」由基金彙總(彙總)的聯繫記錄。

我一直無法弄清楚如何在我的清單中使用基金彙總。

任何人都可以幫忙嗎?

任何幫助表示讚賞。

謝謝。

回答

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

的結果是,你將所有不同的「鑰匙」妝容一個獨特的彙總記錄到一個單一的字符串化的鍵,然後使用該字符串化的密鑰,這在地圖索引強制唯一性。

上面的例子是不完整的,但你應該能夠從這裏拿走它。

+0

謝謝!那正是我需要的! – Dman100