something like this, assuming updating an account is what triggers your code above.

global class Trades_CascadeAccountsBatchable implements Database.Batchable<sObject>, Database.Stateful {

/*run this batch the first time with this
Database.executeBatch(new Trades_CascadeAccountsBatchable(‘SELECT id FROM Account WHERE Number_Of_Trades > XXXX’,’Trades_CascadeAccountsBatchable run 2′), 1);
*/

global string query;
global string nextBatch;

global Trades_CascadeAccountsBatchable(string q, string nb){

//what is the criteria for running this on an account?
if(q != null)query = q;
else query = ‘select Id from Account where ParentId = null’;

//for the second run
nextBatch = nb;

}

global Database.QueryLocator start(Database.BatchableContext batchableContext){
return Database.getQueryLocator(query);
}

global void execute(Database.BatchableContext batchableContext, Account[] accountList) {

account.Rollup_Trades__c = null;

update accountList;
//does this update make the rest of your code run?
}

global void finish(Database.BatchableContext batchableContext) {

//if nextBatch is ‘Trades_CascadeAccountsBatchable run 2’ then run it
if(nextBatch == ‘Trades_CascadeAccountsBatchable run 2’){
//put in here the query to pull the rest of the accounts, with lower number of trades
Database.executeBatch(new Trades_CascadeAccountsBatchable(‘SELECT id FROM Account WHERE Number_Of_Trades <= XXXX’,null), 200);
}

}
}

Written by 

Salesforce MVP | Lightning Champion | 16x Salesforce Certified | Application Architect | 6x Trailhead Ranger | Techforce Services | Australia

Leave a Reply

Your email address will not be published. Required fields are marked *

*