Trigger UpdateActivityCountonAccountContactOptyevent on Event (after insert, after delete){
map<id,integer>mopportunityCount = new map <id,integer>();
map<id,integer>maccountCount = new map <id,integer>();
map<id,integer>mcontactCount = new map<id,integer>();
Integer OptyCount = 0;
Integer AccountCount = 0;
Integer ContactCount = 0;
if(trigger.isinsert){
for(event e: trigger.new){
if(e.whoId != null){
if(string.valueOf(e.WhoId).left(3) == '003'){
if(mcontactCount.containsKey(e.WhoId)){
ContactCount = mcontactCount.get(e.WhoId);
}
ContactCount = ContactCount + 1;
mcontactCount.put(e.whoid,ContactCount);
}
}
if(e.whatId != null){
if(string.valueOf(e.WhatId).left(3) == '006'){
if(mopportunityCount.containsKey(e.WhatId)){
OptyCount = mopportunityCount.get(e.WhatId);
}
OptyCount = OptyCount + 1;
mopportunityCount.put(e.whatid,OptyCount);
}
if(string.valueOf(e.WhatId).left(3) == '001'){
if(maccountCount .containsKey(e.WhatId)){
AccountCount = maccountCount.get(e.WhatId);
}
AccountCount = AccountCount + 1;
maccountCount.put(e.whatid,AccountCount);
}
}
}
}
if(trigger.isdelete){
for(event e: trigger.old){
if(e.whoId != null){
if(string.valueOf(e.WhoId).left(3) == '003'){
if(mcontactCount.containsKey(e.WhoId)){
ContactCount = mcontactCount.get(e.WhoId);
}
ContactCount = ContactCount - 1;
mcontactCount.put(e.whoid,ContactCount);
}
}
if(e.whatId != null){
if(string.valueOf(e.WhatId).left(3) == '006'){
if(mopportunityCount.containsKey(e.WhatId)){
OptyCount = mopportunityCount.get(e.WhatId);
}
OptyCount = OptyCount - 1;
mopportunityCount.put(e.whatid,OptyCount);
}
if(string.valueOf(e.WhatId).left(3) == '001'){
if(maccountCount.containsKey(e.WhatId)){
AccountCount = maccountCount.get(e.WhatId);
}
AccountCount = AccountCount - 1;
maccountCount.put(e.whatid,AccountCount);
}
}
}
}
if(mcontactCount.keyset().size()>0){
list<contact> contactToUpdate = new list<contact>([SELECT id,Count_of_Activity__c FROM contact WHERE Id IN :mcontactCount.keyset()]); for(contact o: contactToUpdate){
o.Count_of_Activity__c = o.Count_of_Activity__c + mcontactCount.get(o.id);
}
if(contactToUpdate.size()>0){
update contactToUpdate;
}
}
if(mopportunityCount.keyset().size()>0){
list<opportunity> opportunityToUpdate = new list<opportunity>([SELECT id,Count_of_Activity__c FROM opportunity WHERE Id IN :mopportunityCount.keyset()]); for(opportunity o: opportunityToUpdate){
o.Count_of_Activity__c = o.Count_of_Activity__c + mopportunityCount.get(o.id);
}
if(opportunityToUpdate.size()>0){
update opportunityToUpdate;
}
}
if(maccountCount.keyset().size()>0){
list<account> accountToUpdate = new list<account>([SELECT id,Count_of_Activity__c FROM account WHERE Id IN :maccountCount.keyset()]);
for(account a: accountToUpdate){
a.Count_of_Activity__c = a.Count_of_Activity__c + maccountCount.get(a.id);
}
if(accountToUpdate.size()>0){
update accountToUpdate;
}
}
}
我需要触发器处理程序。许多Soql查询达到了极限,或者有人建议我使用此触发器的测试类。