Reputation: 71
I have a custom object "Task Tracking" with 3 custom fields:
1) Lookup to user object.
2) Number of open task (number field)
3) Number if closed task (number field)
When a task is created by user A with let's stay status is IN PROGRESS, I need to create record in Task Tracking object with these details :
1) Lookup field = user A
2) Number of open task = 1
3) Number of closed task = 0;
Now next time, when same user A creates another task, the new Task Tracking record shouldn't be created but it should only update Number of task field.
I have tried this much. I was able to create Task Tracking record whenever a Task is created but It was creating new Task Tracking Object for every Task that I am creating
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;
}
}
Upvotes: 0
Views: 151
Reputation: 2186
You should query the system first to see if one exists. If it does, then update it, if it does not then create one.
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();
}
This will get you most of the way, but you're going to have to add logic for when a task is closed to decrement the number of open tasks and the number of close tasks.
And please follow trigger best practices by using a handler class
Upvotes: 0