/* 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<CronTrigger> 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);
|
}
|
}
|
}
|