You need to sign in to do that
Don't have an account?
Sujit K
Need a help with apex trigger problem solution
I created a custom object Task Tracking with 3 custom fields:
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
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 :)
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
You need to create an extra field in your object for external Id for upsert the record.
So, create a field User_Id__c as External Id and then follow this code and change according to your requirement.
Trigger:
Handler Class:
I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.
Thanks,
Ajay Dubedi