You need to sign in to do that
Don't have an account?
Cant assign task using Apex Class
Hi everyone,
I cant get my scheduled aplex class to assign a task to the lead. How do i check if my list, setfollow, is populating with any lead records? And am I using the proper syntax to insert a task and assign to the lead owner?
The scheduler works fine and i see the job in monitoring.
-hkp716
Apex Class:
global class leadfollowup30daystest2 implements Schedulable{
global void execute(SchedulableContext sc)
{
leadfollowup30daystest2 q = new leadfollowup30daystest2();
String sch = '0 25 16 * * ?';
system.schedule('30 day lead followup test2', sch, q);
}
public static Date todayMinusThirty = system.Today().addDays(-2);
public static void updateLeads ()
{
//collect a list of records
List<Lead> setfollow = [SELECT Id FROM Lead WHERE (LastActivityDate = :todayMinusThirty OR LastActivityDate = NULL) AND LastModifiedDate = :todayMinusThirty AND ISconverted = FALSE AND Map_Record_Type__c = 'Contract_DirectCustomer' AND (status = 'Working ASM' OR status = 'Contacted' OR status = 'Prospecting' OR status = 'Qualified' OR status = 'Proposal' OR status = 'Negotiation' OR status = 'Sent to ABD' OR status = 'Working Lead Specialist')];
for (Lead ld :setfollow)
{
Task t = new Task();
t.Subject = 'Needs Follow up - No Activity in 30 dayss';
t.Status = 'Not Started';
t.Priority = 'Normal';
t.ActivityDate = Date.Today()+7;
t.OwnerID = ld.OwnerID;
insert t;
}
}
}
change this part :
for (Lead ld :setfollow)
{
Task t = new Task();
t.Subject = 'Needs Follow up - No Activity in 30 dayss';
t.Status = 'Not Started';
t.Priority = 'Normal';
t.ActivityDate = Date.Today()+7;
t.OwnerID = ld.OwnerID;
insert t;
}
to
List<Task> list_newTasks = new List<Task>();
for (Lead ld :setfollow)
{
Task t = new Task();
t.Subject = 'Needs Follow up - No Activity in 30 dayss';
t.Status = 'Not Started';
t.Priority = 'Normal';
t.ActivityDate = Date.Today()+7;
t.OwnerID = ld.OwnerID;
t.WhoId = ld.Id;
list_newTasks.add(t);
}
insert list_newTasks;
Thanks for the reply coco_sydney
Unfortunately no luck....
I tweaked my code so i can single out a lead...
Not sure if my query is incorrect or the task assignment.
-hkp716
Updated apex:
global class followupnodate implements Schedulable{
global void execute(SchedulableContext sc)
{
followupnodate q = new followupnodate();
String sch = '0 15 17 * * ?';
system.schedule('30 day lead followup test2', sch, q);
}
public static void updateLeads ()
{
//collect a list of records
List<Lead> assignt = [SELECT Id, Lead_Nbr__c FROM Lead WHERE Lead_Nbr__c = 'L-0000005177'];
List<Task> list_newTasks = new List<Task>();
for (Lead ld :assignt)
{
Task t = new Task();
t.Subject = 'Needs Follow up - No Activity in 30 dayss';
t.Status = 'Not Started';
t.Priority = 'Normal';
t.ActivityDate = Date.Today()+7;
t.OwnerID = ld.OwnerID;
t.WhoId = ld.Id;
list_newTasks.add(t);
}
insert list_newTasks;
}
}
:)
didn't see updateLeads() method being called actually, you need to call this method in execute(SchedulableContext sc)
Stil no luck....not sure if i did this correctly....
Hi
you need to write whole code inside global void execute(ScheduableContext sc).
global void execute (SchedulableContext SC ) {
}
Scheduling of this have two ways
1. you can write below three lines in developer console and excute
only onetime execution enough. it keep on running according to you
2. you can write into construtor of the class
public followupnodate() {
}
This didnt work either...i tired it both ways
global class followupnodate implements Schedulable{
global void execute (SchedulableContext sc)
{
followupnodate q = new followupnodate();
String sch = '0 55 8 * * ?';
system.schedule('30 day lead followup test2', sch, q);
//public void updateLeads()
//{
//collect a list of records
List<Lead> assignt = [SELECT Id FROM Lead WHERE Name = 'testfollowup'];
List<Task> list_newTasks = new List<Task>();
for (Lead ld :assignt)
{
Task t = new Task();
t.Subject = 'Needs Follow up - No Activity in 30 dayss';
t.Status = 'Not Started';
t.Priority = 'Normal';
t.ActivityDate = Date.Today()+7;
t.OwnerID = ld.OwnerID;
t.WhoId = ld.Id;
list_newTasks.add(t);
}
insert list_newTasks;
//}
}
}
is also tried
global class followupnodate implements Schedulable{
global void execute (SchedulableContext sc)
{
//followupnodate q = new followupnodate();
// String sch = '0 0 9 * * ?';
// system.schedule('30 day lead followup test2', sch, q);
//public void updateLeads()
//{
//collect a list of records
List<Lead> assignt = [SELECT Id FROM Lead WHERE Name = 'testfollowup'];
List<Task> list_newTasks = new List<Task>();
for (Lead ld :assignt)
{
Task t = new Task();
t.Subject = 'Needs Follow up - No Activity in 30 dayss';
t.Status = 'Not Started';
t.Priority = 'Normal';
t.ActivityDate = Date.Today()+7;
t.OwnerID = ld.OwnerID;
t.WhoId = ld.Id;
list_newTasks.add(t);
}
insert list_newTasks;
//}
}
}
Hi
1. what error you getting?
2. are you using class for any special requirement ? you can use trigger to create task.
i forgot to add OwnerID in the query....silly mistake
Works now.....thanks for the help
-hkp716