/* wql apex作业总批量为1时,是正常的不会走finish里,不创建计划的作业. apex作业总批量为0时,说明电子签收Batch停了,需要重新执行Batch创建计划的作业. 1.该batch主要用于监控15分钟的签收单的计划作业的batch 2.未来可增加条件,监控其他对象的计划的作业 */ global class monitorUpdateESignBatch implements Database.Batchable < sObject > , Database.Stateful{ //参数变量 public String likeStr; public String tempLikeStr; //执行标识 public Boolean executeFlag = true; //无参构造 public monitorUpdateESignBatch() { } //未来扩展用 有参构造 // public monitorUpdateESignBatch(String likeStr) { // this.likeStr = likeStr; // } global Database.QueryLocator start(Database.BatchableContext bc) { //查询 所有的计划的作业 String query = 'SELECT Id, CronJobDetailId, CronExpression, CronJobDetail.Name,NextFireTime FROM CronTrigger '; //未来拓展用 查询作业名为其他的计划的作业 // if(String.isNotBlank(likeStr)){ // tempLikeStr = likeStr; // }else{ // tempLikeStr = 'updateESignFormSchedule00%'; // } tempLikeStr = 'updateESignFormSchedule00%'; query += ' WHERE CronJobDetail.Name Like :tempLikeStr'; return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, List ctList) { if(ctList.size()>0){ for(CronTrigger c:ctList){ //list 不为0有计划的作业 没有下次运行的时间 也重新执行 if(c.NextFireTime !=null){ executeFlag = false; break; } } } } global void finish(Database.BatchableContext BC) { //标识为true时,重新执行该计划的作业 system.debug('executeFlag:'+executeFlag); //①list 为0 表示计划的作业上没有签收单的计划作业 //②list 不为0有计划的作业 没有下次运行的时间 也重新执行 if(executeFlag){ Database.executeBatch(new updateESignBatch(), 100); } } }