Created
April 12, 2019 18:14
-
-
Save SalesforceBobLightning/920b641bd281a9f7eefbfbdfffd9f6f2 to your computer and use it in GitHub Desktop.
Salesforce Apex Chained Queueable with String's rather than ID's
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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