0

我有一个带有 3 个自定义字段的自定义对象“任务跟踪”:

1) Lookup to user object.
2) Number of open task (number field)
3) Number if closed task (number field)

当用户 A 创建任务,让我们保持状态为 IN PROGRESS 时,我需要在 Task Tracking 对象中使用以下详细信息创建记录:

1) Lookup field = user A 
2) Number of open task  = 1
3) Number of closed task = 0;

现在下一次,当同一个用户 A 创建另一个任务时,不应该创建新的任务跟踪记录,而应该只更新任务编号字段。

我已经尝试了很多。每当创建任务时,我都能够创建任务跟踪记录,但它正在为我正在创建的每个任务创建新的任务跟踪对象


 trigger TrackTask2 on Task (before insert) {
         List<sujya__Task_Tracking__c> li = new List<sujya__Task_Tracking__c>();
         sujya__Task_Tracking__c s = new sujya__Task_Tracking__c();

         if(Trigger.isBefore && Trigger.isInsert){
                 for(Task t:Trigger.new){
                     s.sujya__User__c = t.CreatedById;
                     li.add(s);
                 }
                 insert li;
         }
     }
4

1 回答 1

0

您应该先查询系统以查看是否存在。如果是,则更新它,如果不是,则创建一个。

trigger TrackTask2 on Task (before insert) {
    Set<Id> users = new Set<Id>();
    for (Task t : Trigger.new) {
        users.add(t.ownerId); //might be t.whoId;
    }
    List<sujya__Task_Tracking__c> existingTrackers = [SELECT Id, sujya__User__c, number_open_task__c, number_closed_task__c FROM sujya__Task_Tracking__c WHERE sujya__User__c IN :users];
    Map<Id, sujya__Task_Tracking__c> userTrackerMap = new Map<Id, sujya__Task_Tracking__c>();
    for (sujya__Task_Tracking__c tracker : existingTrackers) {
        userTrackerMap.put(tracker.sujya__User__c, tracker);
    }

    for (Task t : Trigger.new) {
        sujya__Task_Tracking__c userTracker = existingTrackers.get(t.ownerId);
        if (userTracker == null) { 
            userTracker = new sujya__Task_Tracking__c(); 
            userTracker.number_open_task__c = 1;
            userTracker.sujya__User__c = t.ownerId;
        } else {
            userTracker.number_open_task__c += 1;
        }
        userTrackerMap.put(userTracker.sujya__User__c, userTracker);
    }

    upsert userTrackerMap.getValues();
}

这将帮助您完成大部分工作,但是您将不得不为关闭任务添加逻辑以减少打开任务的数量和关闭任务的数量。

请使用处理程序类遵循触发器最佳实践

于 2019-07-29T15:41:56.670 回答