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