Queueable Class:
public class ExecuteBatchQueueableJobUpdate implements Queueable {
List<task> lstTasksToInsertAsynchronously = new List<task>();
public boolean isTrue{set;get;}
//Constructor
public ExecuteBatchQueueableJobUpdate(List<task> lstTasks, boolean isInsert){
lstTasksToInsertAsynchronously = lstTasks;
isTrue = isInsert;
}
public void execute(QueueableContext context) {
try{
//Invoking batch job
if(isInsert){
BatchDMLClassForTasks.batchUpdateSObjects(lstTasksToInsertAsynchronously);
}else{
BatchDMLClassForTasks.batchUpdateSObjects(lstTasksToInsertAsynchronously);
}
}
catch(Exception objEx){
System.debug(LoggingLevel.ERROR,objEx.getStackTraceString() +'\n'+ objEx.getMessage());
}
}
}
Helper class to insert or update from Queueable:
public class BatchDMLClassForTasks {
// insert sobjects
public static void batchInsertSObjects(List<SObject> sObjs) {
if(!sObjs.isEmpty()) {
try {
BatchInsertTasks batch = new BatchInsertTasks(sObjs, true);
Database.executeBatch(batch, 150);
} catch (Exception e) {
System.debug('Error inserting SObjects');
}
}
}
// update sobjects
public static void batchUpdateSObjects(List<SObject> sObjs) {
if(!sObjs.isEmpty()) {
try {
BatchInsertTasks batch = new BatchInsertTasks(sObjs, false);
Database.executeBatch(batch, 130);
} catch (Exception e) {
System.debug('Error inserting SObjects');
}
}
}
}
Batch class:
public class BatchInsertTasks implements Database.Batchable<sObject> {
private List<sObject> objectsToInsert = new List<sObject>();
private boolean isInsertTasks;
public BatchInsertTasks(List<sObject> objects, boolean isInsert){
this.objectsToInsert = objects;
this.isInsertTasks = isInsert;
}
public Iterable<sObject> start(Database.BatchableContext BC) {
return this.objectsToInsert;
}
public void execute(Database.BatchableContext BC, List<task> scope){
if(this.isInsertTasks){
Database.insert(scope);
}else{
Database.update(scope);
}
}
public void finish(Database.BatchableContext BC) {}
}
Reuse of Queueable class in another classes
if(!lstTaks.isEmpty()){
System.enqueueJob(new ExecuteBatchQueueableJob(lstTasksToInsertAsynchronously, true));
}