/*
|
* 为了确保不出现101问题,一次最多只能执行一条数据
|
* 这个batch是用作更新历史数据使用
|
* 找出来有延期任务的源任务;
|
* 把源任务(最开始的这个任务)带到它延期任务廉的任何一个任务去;
|
* 查查被动任务,概率很低,但是可能存在超过60天的问题,所以在更新以后需要找一圈任务超过60天的情况;
|
*/
|
global class addInitTaskBatch implements Database.Batchable<sObject> {
|
public string taskID;
|
global addInitTaskBatch(string taskID){
|
this.taskID = taskID;
|
}
|
global addInitTaskBatch(){
|
}
|
// 检索有延期任务的任务,不包括已经因为离职,所以已经关闭的任务
|
global Database.QueryLocator start(Database.BatchableContext BC) {
|
String query = 'SELECT Id,Name,delayTaskP__c, Daily_Report__c , Event__c FROM task__c '
|
+'where delayTaskP__c != null '
|
+ ' and taskStatus__c != \'06 关闭\'';
|
if(string.isNotBlank(taskID)){
|
query += ' and ID = \'' + taskID + '\'';
|
}
|
System.debug('query:'+query);
|
return Database.getQueryLocator(query);
|
}
|
global void execute(Database.BatchableContext BC, List<task__c> tasklist) {
|
main(tasklist);
|
}
|
@TestVisible
|
private void main(List<task__c> tasklist){
|
// 预计要更新的任务List
|
list<task__c> updateTaskList = new list<task__c>();
|
// 因为每次只有一个初始任务赋值,所以这里取第一个;
|
task__c initTask = tasklist[0];
|
System.debug('initTask:'+initTask);
|
//用作循环递归找所有延期任务,每次都拿最新的延期任务
|
//如果这个值是空的那么就可以跳过不执行
|
id tempTaskid = initTask.delayTaskP__c;
|
while (!string.isblank(tempTaskid)){
|
task__c tempTask =
|
[select id,delayTaskP__c,Initial_Task__c from task__c
|
where id = : tempTaskid
|
];
|
// 赋值初始任务,然后计入要更新的延期任务当中
|
System.debug('tempTask:'+tempTask);
|
initTask.Initial_Task__c = tempTask.id;
|
updateTaskList.clear();
|
updateTaskList.add(initTask);
|
tempTaskid = tempTask.delayTaskP__c;
|
|
}
|
System.debug('updateTaskList:'+updateTaskList);
|
if(updateTaskList.size()>0){
|
update updateTaskList;
|
}
|
}
|
global void finish(Database.BatchableContext BC) {
|
}
|
}
|