how to populate Map<id,Account> i want to map account with list of Cases associated to that account,the below code is not working,how can we achieve this
Thanks Raj for reply. But here is Account object is having Number of Open Cases and Number of closed Cases as fields. If Case status is not closed ,in Account object Number of Open Cases should increment by 1. If status is closed then Account object Number of Closed Cases should increment by 1..This is the requirement. Below is my code.Could you please suggest trigger OpenAndCloseCasesOnTrigger on Case (After insert) {
Set<Id> AccountIds = new Set<Id>(); for (Case cs: Trigger.new) { if (cs.AccountId != null) { AccountIds.add(cs.AccountId); } } List<Account> acctList = new List<Account>(); Map<Id, Account> accountMap = new Map<Id, Account>([select id, Number_of_Open_Cases__c, Number_Of_Closed_Cases__c from Account where id IN: AccountIds]);
if (Trigger.isInsert){ for (Case caseRec : Trigger.new) { if(caseRec.Status!='Closed'){ accountMap.get(caseRec.AccountId).Number_of_Open_Cases__c++;
Hi Raj..please help me with this code- Map<ID,Map<id, list<Case>>> 1st account ID 2nd Contact ID List of Cases= 1000 Cases Accountid (12222244541) - (Contact id- 231)- case 1 Case 2 Case 3
contactid-232- Case 1 Case 2 Case 3 i want to query cases and also get contact id and account id from there. It should be look like above senerio. Please help
All Answers
Set<Id> AccountIds = new Set<Id>();
for (Case cs: Trigger.new) {
if (cs.AccountId != null) {
AccountIds.add(cs.AccountId);
}
}
List<Account> acctList = new List<Account>();
Map<Id, Account> accountMap = new Map<Id, Account>([select id, Number_of_Open_Cases__c, Number_Of_Closed_Cases__c from Account where id IN: AccountIds]);
if (Trigger.isInsert){
for (Case caseRec : Trigger.new) {
if(caseRec.Status!='Closed'){
accountMap.get(caseRec.AccountId).Number_of_Open_Cases__c++;
}else{
accountMap.get(caseRec.AccountId).Number_Of_Closed_Cases__c++;
}
}
if (acctList.size() > 0) {
insert acctList;
}
}
}
trigger OpenAndCloseCasesOnTrigger on Case (after insert,after update,before delete) {
Map<Id,Account> accMap= new Map<Id,Account>();
List<Case> caseList = (trigger.isDelete)? trigger.old : trigger.new;
set<Id> accid = new set<Id>();
for(Case cs: caseList){
if(cs.AccountId != null){
accid.add(cs.AccountId);
}
if(trigger.isUpdate && cs.AccountId != trigger.oldMap.get(cs.Id).AccountId){
accid.add(trigger.oldMap.get(cs.Id).AccountId);
}
}
List<Account> listAccount = [select id, Number_of_Open_Cases__c, Number_Of_Closed_Cases__c from Account where id IN: accid];
for(Account acc: listAccount)
{
accMap.put(acc.Id, acc);
if(acc.Number_of_Open_Cases__c == null){
acc.Number_of_Open_Cases__c = 0;
}
if(acc.Number_Of_Closed_Cases__c == null){
acc.Number_Of_Closed_Cases__c = 0;
}
}
if(Trigger.isInsert){
for(Case newCase : Trigger.New) {
if(newCase.Status !='Closed')
accMap.get(newCase.AccountId).Number_of_Open_Cases__c++;
else if(newCase.Status =='Closed')
accMap.get(newCase.AccountId).Number_Of_Closed_Cases__c++;
}
}
if (Trigger.isUpdate) {
for(Case CaseUpdate : Trigger.New) {
Case oldCaseRecord = Trigger.OldMap.get(CaseUpdate.Id);
if(CaseUpdate.AccountId == oldCaseRecord.AccountId){
if(oldCaseRecord.Status != 'Closed' && CaseUpdate.Status =='Closed'){
accMap.get(CaseUpdate.AccountId).Number_Of_Closed_Cases__c++;
accMap.get(CaseUpdate.AccountId).Number_of_Open_Cases__c--;
}
else if(oldCaseRecord.Status == 'Closed' && CaseUpdate.Status !='Closed'){
accMap.get(CaseUpdate.AccountId).Number_of_Open_Cases__c++;
accMap.get(CaseUpdate.AccountId).Number_Of_Closed_Cases__c--;
}
}else{
Account acct= accMap.get(oldCaseRecord.AccountId);
if(oldCaseRecord.Status == 'Closed') {
accMap.get(acct.Id).Number_Of_Closed_Cases__c--;
accMap.get(CaseUpdate.AccountId).Number_Of_Closed_Cases__c++;
}
else {
accMap.get(acct.Id).Number_of_Open_Cases__c--;
accMap.get(CaseUpdate.AccountId).Number_of_Open_Cases__c++;
}
}
}
}
if(Trigger.isDelete) {
for(Case caseDelete: Trigger.Old) {
if(caseDelete.Status !='Closed')
accMap.get(caseDelete.AccountId).Number_of_Open_Cases__c--;
else if(caseDelete.Status =='Closed')
accMap.get(caseDelete.AccountId).Number_Of_Closed_Cases__c--;
}
}
if(listAccount.size() > 0){
update accMap.values();
}
}
https://developer.salesforce.com/forums/ForumsMain?id=9060G0000005cilQAA
Map<ID,Map<id, list<Case>>>
1st account ID
2nd Contact ID
List of Cases= 1000 Cases
Accountid (12222244541) - (Contact id- 231)- case 1
Case 2
Case 3
contactid-232- Case 1
Case 2
Case 3
i want to query cases and also get contact id and account id from there. It should be look like above senerio. Please help