我需要触发器处理程序命中SOQL查询的限制

时间:2016-03-29 13:25:39

标签: triggers salesforce apex-code apex

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查询达到了极限,或者有人建议我使用此触发器的测试类。

0 个答案:

没有答案