/* * 为了代码写起来简单,设置为一次最多只能执行一条数据 * 这个batch是用作更新历史数据使用: * 找出来有延期任务的源任务; * 找一个源任务是当前源任务的最新延期任务, * 把这个延期任务的日报一览和报告一览信息带过来 * ' and id != \'a3V10000001LYO6\'' ' and id != \'a3V10000001Kp2S\'' ' and id != \'a3V10000001L7vt\'' ' and id != \'a3V10000001KUUb\'' ' and id != \'a3V10000000dgSW\'' ' and id != \'a3V10000000dXyV\'' ' and id != \'a3V10000000dXya\'' * * */ global class modifyInitTaskBatch implements Database.Batchable { public string taskID; global modifyInitTaskBatch(string taskID){ this.taskID = taskID; } global modifyInitTaskBatch() { } // 检索有延期任务的任务,不包括已经因为离职,所以已经关闭的任务 global Database.QueryLocator start(Database.BatchableContext bc) { String query = 'SELECT Id,Name,delayTask__c, Daily_Report__c , Event__c FROM task__c ' +'where delayTask__c !=null and delayTaskP__c = null ' + ' and taskStatus__c != \'06 关闭\''; if(string.isNotBlank(taskID)){ query += ' and ID = \'' + taskID + '\''; } return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, List tasklist) { main(tasklist); } @TestVisible private void main(List tasklist){ // 因为每次只有一个初始任务赋值,所以这里取第一个; task__c tempTask = tasklist[0]; // 预计要更新的任务List List updateTaskList = new List(); //找所有源任务是当前源任务的延期任务,最新的排在前面 list delayTaskList = [select id , Daily_Report__c , Event__c , Daily_Report_Status__c, event_Status__c from task__c where Initial_Task__c = :tempTask.id order by Activity_Date__c desc NULLS last]; if(delayTaskList.size() > 0){ //找一个源任务是当前源任务的最新延期任务, //把它的日报一览和报告一览赋值给当前源任务 task__c lastTask = delayTaskList[0]; tempTask.Daily_Report__c = lastTask.Daily_Report__c; tempTask.Event__c = lastTask.Event__c; //如果这个最新的延期任务的报告已经提交申请或者已经被批准 //那么就照这个这个更新源任务的状态2, //如果报告一览的状态没值,那么就更新为完成, //如果报告一览的状态有值并且是取消,那么就更新为取消; if(lastTask.Daily_Report__c != null && (lastTask.Daily_Report_Status__c.equals('申請中') || lastTask.Daily_Report_Status__c.equals('承認'))){ if(lastTask.event_Status__c == null){ tempTask.taskStatus__c = '03 完成'; }else if(lastTask.event_Status__c.equals('取消')){ tempTask.taskStatus__c = '04 取消'; } } // 更新这个任务 update tempTask; } } global void finish(Database.BatchableContext BC) { } }