/** * Class名: AgencyShareUpdateBatch * 理由: 现在只有 Agency_Opportunity__c, 以后会有扩展的可能 */ //20230203 lt 计划的作业优化 --- 继承加“, Database.Stateful”,不然removeOtherSc方法空指针 global class AgencyShareUpdateBatch implements Database.Batchable, Database.Stateful { //20230203 lt 计划的作业优化 一小时两次 start private BatchEmailUtil.ScBean scB1; //20230203 lt 计划的作业优化 一小时两次 end global AgencyShareUpdateBatch() { } global Database.QueryLocator start(Database.BatchableContext bc) { //20230203 lt 计划的作业优化 一小时两次 start scB1 = BatchEmailUtil.setSc1('AgencyShareUpdateBatchSchedule', 0, 23, 0, '0 30 *', null); if (System.Test.isRunningTest() == false) { for(CronTrigger ct : [SELECT Id FROM CronTrigger WHERE CronJobDetail.Name =: scB1.scName]) { System.abortJob(ct.Id); } system.schedule(scB1.scName, scB1.scTime, new AgencyShareUpdateBatchSchedule()); } //20230203 lt 计划的作业优化 一小时两次 end return Database.getQueryLocator([SELECT Id , OCSM_Owner__c , Department_Class_Opp__c , Department_Class_Opp__r.OwnerId FROM Agency_Opportunity__c WHERE NeedShareBatch__c = true ]); } global void execute(Database.BatchableContext bc, List scope) { List updList = new List(); for (Agency_Opportunity__c nObj : scope) { if (nObj.Department_Class_Opp__c != null && nObj.OCSM_Owner__c != nObj.Department_Class_Opp__r.OwnerId) { nObj.OCSM_Owner__c = nObj.Department_Class_Opp__r.OwnerId; } updList.add(nObj); } update updList; } global void finish(Database.BatchableContext bc) { BatchEmailUtil.removeOtherSc('AgencyShareUpdateBatchSchedule', scB1.scName); //20230203 lt 计划的作业优化 // 如果前一个603的batch正在等待状态,则取消掉前一个batch的执行 List lstJobs = [SELECT Id FROM AsyncApexJob WHERE (Status = 'Queued' OR Status = 'Holding') AND ApexClass.Name = 'NFM603Batch']; for (AsyncApexJob job : lstJobs) { try { System.abortJob(job.Id); } catch(Exception ex ) { System.debug(ex); } } Id execBTId = Database.executebatch(new NFM603Batch(),1); } }