触发联系以计算活动历史记录,并更新帐户和机会对象

时间:2016-03-16 13:51:11

标签: apex-code apex-trigger

每个联系人的活动数量字段,无论类型或状态如何。 完整详细信息:要求是能够根据“联系人”或“帐户”或“商机”创建报告,并查看与“联系人”,“帐户”或“商机”关联的“活动总数”的“摘要”字段。 请注意,我们不希望看到每个活动的一行,我们希望看到每个联系人的一行,或者活动摘要计数的opp或帐户。 注意:原始请求还包括在报告上具有唯一活动计数的功能

1 个答案:

答案 0 :(得分:0)

我还没有测试过这段代码,但你可以为插件做一些这样的事情(你还需要覆盖更新和删除)。在此示例中,NumberOfActivites__c是Contact对象上的自定义任务计数字段:

Map<Id,Integer> countMap = new Map<Id,Integer>();
List<Contact> contactList = new List<Contact>();

for (Task t : trigger.new){
    //get id's of all contacts affected by the batch
    Id w = t.whoId;
    if (w.getSObjectType().getDescribe().getName() == 'Contact'){
        //since there could be more than one task related to a contact 
        //in a batch, you would have to count them
        if (countMap.keyset().containts(w)){
            countMap.get(w) += 1;
        } else {
            countMap.put(w,1);
        }
    }
}

//get list of contacts to be updated
contactList = [Select Id, NumberOfActivities__c
               From Contact
               Where Id In :countMap.keyset()];

//modify contacts in list with new count
for (Contact c : contactList){
    c.NumberOfActivites__c = c.NumberOfActivites__c + countMap.get(c.Id));
}

//do the update
update contactList;