Revision: 33858
Updated Code
at October 16, 2010 13:24 by leeclint
Updated Code
global class LeadReassignOnActivityHistory implements Database.Batchable<sObject>{
private Date reassignDate = System.Today() - 10; // Sets the cutoff period on which you want to protect Leads
global Iterable<sObject> start(Database.BatchableContext BC) {
// This set will hold the Id's of the Leads that we will reassign.
Set <ID> LeadIds = new Set <ID>();
// Query all the Leads in your database and sub-query all existing Activities that match your criteria (i.e. Type), and return the newest one.
List <Lead> startLeads = new List <Lead>([Select (Select WhoId, ActivityDate FROM ActivityHistories WHERE ActivityType='Call' OR ActivityType='Ownership Transferred' ORDER BY ActivityDate DESC Limit 1) FROM Lead]);
// Iterate through the list of leads returned above.
for (Lead l : startLeads) {
// if the Lead does not have any Activities associated with it then reassign it.
if (l.ActivityHistories.size() == 0 || l.ActivityHistories.size() == null) {
LeadIds.add(l.Id);
}
//for each lead, iterate through its related Activities
for (ActivityHistory activity : l.ActivityHistories) {
// if the Activity is older than the reassignDate variable you set above, then this lead's ID will be added to the list that will be reassigned.
if (activity.ActivityDate < reassignDate) {
LeadIds.add(activity.WhoId);
}
} // close inner for-loop
} //close outer for-loop
// Using the list of ID's above, query the database for all related leads and get the necessary fields.
List <Lead> leadsToReassign = new List <Lead>([Select Id, Location__c, OwnerId FROM Lead WHERE Id IN :LeadIds]);
// Return this list of leads, which will get passed to our execute() method below.
return leadsToReassign;
} //close start method
global void execute(Database.BatchableContext BC, List <Lead> scope) {
// This list of tasks will be used to hold tasks for insert.
List <Task> taskList = new List<Task>();
// Iterate through the scope of Leads that were passed through to the execute method and transfer ownership based on the location.
// This example only has two locations.
// Create a Task that's associated with each Lead, this can be used so that we don't reassign the same Lead every day if no activity is being logged.
for(Lead l : scope) {
if(l.Location__c == 'Location A') {
l.OwnerId = '005A0000000i84o'; // reassigns ownership via hardcoded Id
Task tsk = new Task(); // Create the new task and populate it with data.
tsk.WhoId = l.Id;
tsk.ActivityDate = System.today();
tsk.Status = 'Completed';
tsk.Subject = 'Ownership Transferred';
tsk.Type = 'Other';
taskList.add(tsk); // add the task to the list.
} //close if statement
else {
l.OwnerId='005A0000000i84z';
Task tsk = new Task();
tsk.WhoId = l.Id;
tsk.ActivityDate = System.today();
tsk.Status = 'Completed';
tsk.Subject = 'Ownership Transferred';
tsk.Type='Other';
taskList.add(tsk);
} //close else
} //close for-loop
try {
insert taskList;
} catch (system.dmlexception e) {
System.debug('Tasks not inserted: ' + e);
}
try {
update scope;
} catch (system.dmlexception e) {
System.debug('Scope not updated: ' + e);
}
} //close execute method
global void finish(Database.BatchableContext BC) {
AsyncApexJob a = [Select Id, Status, NumberOfErrors, JobItemsProcessed,
TotalJobItems, CreatedBy.Email
from AsyncApexJob where Id =
:BC.getJobId()];
// Create and send an email with the results of the batch.
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setToAddresses(new String[] {a.CreatedBy.Email});
mail.setReplyTo('[email protected]');
mail.setSenderDisplayName('Lead Reassignment Results');
mail.setSubject('Lead Reassignment ' + a.Status);
mail.setPlainTextBody('The batch apex job processed ' + a.TotalJobItems +
' batches with ' + a.NumberofErrors + ' failures.');
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
} //close finish method
} //close class
Revision: 33857
Updated Code
at October 14, 2010 10:34 by leeclint
Updated Code
global class LeadReassignOnActivityHistory implements Database.Batchable<sObject>{
private Date reassignDate = System.Today() - 10; // Sets the cutoff period on which you want to protect Leads
global Iterable<sObject> start(Database.BatchableContext BC) {
// This set will hold the Id's of the Leads that we will reassign.
Set <ID> LeadIds = new Set <ID>();
// Query all the Leads in your database and sub-query all existing Activities that match your criteria (i.e. Type), and return the newest one.
List <Lead> startLeads = new List <Lead>([Select (Select WhoId, ActivityDate FROM ActivityHistories WHERE ActivityType='Call' OR ActivityType='Ownership Transferred' ORDER BY ActivityDate DESC Limit 1) FROM Lead]);
// Iterate through the list of leads returned above.
for (Lead l : startLeads) {
//for each lead, iterate through its related Activities
for (ActivityHistory activity : l.ActivityHistories) {
// if the Activity is older than the reassignDate variable you set above, then this lead's ID will be added to the list that will be reassigned.
if (activity.ActivityDate < reassignDate) {
LeadIds.add(activity.WhoId);
}
} // close inner for-loop
} //close outer for-loop
// Using the list of ID's above, query the database for all related leads and get the necessary fields.
List <Lead> leadsToReassign = new List <Lead>([Select Id, Location__c, OwnerId FROM Lead WHERE Id IN :LeadIds]);
// Return this list of leads, which will get passed to our execute() method below.
return leadsToReassign;
} //close start method
global void execute(Database.BatchableContext BC, List <Lead> scope) {
// This list of tasks will be used to hold tasks for insert.
List <Task> taskList = new List<Task>();
// Iterate through the scope of Leads that were passed through to the execute method and transfer ownership based on the location.
// This example only has two locations.
// Create a Task that's associated with each Lead, this can be used so that we don't reassign the same Lead every day if no activity is being logged.
for(Lead l : scope) {
if(l.Location__c == 'Location A') {
l.OwnerId = '005A0000000i84o'; // reassigns ownership via hardcoded Id
Task tsk = new Task(); // Create the new task and populate it with data.
tsk.WhoId = l.Id;
tsk.ActivityDate = System.today();
tsk.Status = 'Completed';
tsk.Subject = 'Ownership Transferred';
tsk.Type = 'Other';
taskList.add(tsk); // add the task to the list.
} //close if statement
else {
l.OwnerId='005A0000000i84z';
Task tsk = new Task();
tsk.WhoId = l.Id;
tsk.ActivityDate = System.today();
tsk.Status = 'Completed';
tsk.Subject = 'Ownership Transferred';
tsk.Type='Other';
taskList.add(tsk);
} //close else
} //close for-loop
try {
insert taskList;
} catch (system.dmlexception e) {
System.debug('Tasks not inserted: ' + e);
}
try {
update scope;
} catch (system.dmlexception e) {
System.debug('Scope not updated: ' + e);
}
} //close execute method
global void finish(Database.BatchableContext BC) {
AsyncApexJob a = [Select Id, Status, NumberOfErrors, JobItemsProcessed,
TotalJobItems, CreatedBy.Email
from AsyncApexJob where Id =
:BC.getJobId()];
// Create and send an email with the results of the batch.
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setToAddresses(new String[] {a.CreatedBy.Email});
mail.setReplyTo('[email protected]');
mail.setSenderDisplayName('Lead Reassignment Results');
mail.setSubject('Lead Reassignment ' + a.Status);
mail.setPlainTextBody('The batch apex job processed ' + a.TotalJobItems +
' batches with ' + a.NumberofErrors + ' failures.');
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
} //close finish method
} //close class
Revision: 33856
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at October 14, 2010 10:30 by leeclint
Initial Code
global class LeadReassignOnActivityHistory implements Database.Batchable<sObject>{
private Date reassignDate = System.Today() - 10; // Sets the cutoff period on which you want to protect Leads
global Iterable<sObject> start(Database.BatchableContext BC) {
// This set will hold the Id's of the Leads that we will reassign.
Set <ID> LeadIds = new Set <ID>();
// Query all the Leads in your database and sub-query all existing Activities that match your criteria (i.e. Type), and return the newest one.
List <Lead> startLeads = new List <Lead>([Select (Select WhoId, ActivityDate FROM ActivityHistories WHERE ActivityType='Call' OR ActivityType='Ownership Transferred' ORDER BY ActivityDate DESC Limit 1) FROM Lead]);
// Iterate through the list of leads returned above.
for (Lead l : startLeads) {
//for each lead, iterate through its related Activities
for (ActivityHistory activity : l.ActivityHistories) {
// if the Activity is older than the reassignDate variable you set above, then this lead's ID will be added to the list that will be reassigned.
if (activity.ActivityDate < reassignDate) {
LeadIds.add(activity.WhoId);
}
} // close inner for-loop
} //close outer for-loop
// Using the list of ID's above, query the database for all related leads and get the necessary fields.
List <Lead> leadsToReassign = new List <Lead>([Select Id, Club_Location__c, OwnerId FROM Lead WHERE Id IN :LeadIds]);
// Return this list of leads, which will get passed to our execute() method below.
return leadsToReassign;
} //close start method
global void execute(Database.BatchableContext BC, List <Lead> scope) {
// This list of tasks will be used to hold tasks for insert.
List <Task> taskList = new List<Task>();
// Iterate through the scope of Leads that were passed through to the execute method and transfer ownership based on the location.
// This example only has two locations.
// Create a Task that's associated with each Lead, this can be used so that we don't reassign the same Lead every day if no activity is being logged.
for(Lead l : scope) {
if(l.Club_Location__c == 'Evans Road') {
l.OwnerId = '005A0000000i84o'; // reassigns ownership
Task tsk = new Task(); // Create the new task and populate it with data.
tsk.WhoId = l.Id;
tsk.ActivityDate = System.today();
tsk.Status = 'Completed';
tsk.Subject = 'Ownership Transferred';
tsk.Type = 'Other';
taskList.add(tsk); // add the task to the list.
} //close if statement
else {
l.OwnerId='005A0000000i84z';
Task tsk = new Task();
tsk.WhoId = l.Id;
tsk.ActivityDate = System.today();
tsk.Status = 'Completed';
tsk.Subject = 'Ownership Transferred';
tsk.Type='Other';
taskList.add(tsk);
} //close else
} //close for-loop
try {
insert taskList;
} catch (system.dmlexception e) {
System.debug('Tasks not inserted: ' + e);
}
try {
update scope;
} catch (system.dmlexception e) {
System.debug('Scope not updated: ' + e);
}
} //close execute method
global void finish(Database.BatchableContext BC) {
AsyncApexJob a = [Select Id, Status, NumberOfErrors, JobItemsProcessed,
TotalJobItems, CreatedBy.Email
from AsyncApexJob where Id =
:BC.getJobId()];
// Create and send an email with the results of the batch.
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setToAddresses(new String[] {a.CreatedBy.Email});
mail.setReplyTo('[email protected]');
mail.setSenderDisplayName('Lead Reassignment Results');
mail.setSubject('Lead Reassignment ' + a.Status);
mail.setPlainTextBody('The batch apex job processed ' + a.TotalJobItems +
' batches with ' + a.NumberofErrors + ' failures.');
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
} //close finish method
} //close class
Initial URL
Initial Description
Batch Apex class that allows you to reassign leads based on ActivityHistory.
Initial Title
Reassign Leads in Salesforce - APEX language
Initial Tags
Initial Language
Java