Skip to content

Instantly share code, notes, and snippets.

@SalesforceBobLightning
Created April 12, 2019 18:14
Show Gist options
  • Save SalesforceBobLightning/920b641bd281a9f7eefbfbdfffd9f6f2 to your computer and use it in GitHub Desktop.
Save SalesforceBobLightning/920b641bd281a9f7eefbfbdfffd9f6f2 to your computer and use it in GitHub Desktop.
Salesforce Apex Chained Queueable with String's rather than ID's
public abstract class ChainedQueueable implements Queueable, Database.AllowsCallouts {
private Set<String> records;
public ChainedQueueable(Set<String> records) {
this.records = records;
}
public abstract void processRecord(String record);
public abstract ChainedQueueable createJob(Set<String> recordSet);
public void execute(QueueableContext context) {
if (records.size() == 0) {
return;
}
String record = getNextRecord();
processRecord(record);
processNextRecord();
}
private void processNextRecord()
{
enqueueJob(this.records);
}
private void enqueueJob(Set<String> recordSet) {
if (recordSet.size() == 0) {
return;
}
// create next job
ChainedQueueable job = createJob(recordSet);
// queue next job
Id jobId = System.enqueueJob(job);
System.debug(jobId);
}
public void enqueueJob() {
// queue job
Id jobId = System.enqueueJob(this);
System.debug(jobId);
}
private Id getNextRecord() {
// get next record
String record;
for(String item : records) {
record = item;
break;
}
// remove record
records.remove(record);
return record;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment