Skip to main content
Sujit Karande (MindzVue) a posé une question dans #Apex
I created 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 record 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 increment/decrement 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;

}

}

Appreiciate your help :) 

 
3 réponses
  1. 29 juil. 2019, 19:20
    Hi Sujit,

    As per the trigger which you implemented. That is the expected behaviour. 

    Can you try something like this:

    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();

    Map<Id,Id> tracker = new Map<Id,Id>();

    Map<Id,Integer> trackopen = new Map<Id,Integer>();

    for(Task t:Trigger.new)

    {

    tracker.put(t.id,t.id);

    }

    List<sujya__Task_Tracking__c> lis = new List<sujya__Task_Tracking__c>([Select id,OpenTask,sujya__User__c,sujya__User__r.id from sujya__Task_Tracking__c where sujya__User__c  IN:tracker.keyset()]); 

    if(lis.size() > 0){

    for(sujya__Task_Tracking__c l:lis){

    if(tracker.containskey(l.sujya__User__r.id))

    trackopen.put(l.sujya__User__r.id,OpenTask);

    }

    }

    if(Trigger.isBefore && Trigger.isInsert){

     for(Task t:Trigger.new)

    {

    if(trackopen.containskey(t.CreatedById) && trackopen.get(CreatedById) > 0){

    for(sujya__Task_Tracking__c l:lis){

    if(tracker.containskey(l.sujya__User__r.id) && t.CreatedById == l.sujya__User__c)

    l.OpenTask = l.OpenTask + 1;

    li.add(l); 

    }

    }

    else{

    s.sujya__User__c = t.CreatedById;

    s.OpenTask = 1;

    }

     

     li.add(s); 

    Database.upsert(li); 

    }

     }

    Please delete the existing Records(sujya__Task_Tracking__c) that is realted to the user which you are going to enter the task, while testing, so that the trigger can work with the new logic.

    Regards,

    Sathish Loganathan

     
0/9000