static void LIL_TestRunDependency(Args _args)  
 {  
   BatchHeader       batchHeader   = BatchHeader::getCurrentBatchHeader();  
   List          list      = new List(Types::Class);  
   ListEnumerator     le;  
   LIL_WhoAmIController  batchTask,prev;  
   Counter         i;  
   BatchInfo        batchInfo;  
   
   batchHeader = batchHeader::construct();  
   
   batchHeader.parmCaption("Task dependency execution");  
   
   //creo 10 instaze della mia classe, ciascuna con il suo id  
   for(i = 0; i < 10; i++)  
   {  
     batchTask = new LIL_WhoAmIController(classStr(LIL_WhoAmIService),  
                        methodStr(LIL_WhoAmIService, printWhoAmi));  
   
     batchTask.parmWhoAmi(i);  
   
     batchTask.init();  
   
     //in caso di sysoperation è neccessario impostare execution mode = Synchronous  
     //altrimenti le dipendence non vengono rispettate e i task partono tutti  
     //allo stesso momento  
     batchTask.parmExecutionMode(SysOperationExecutionMode::Synchronous);  
   
     batchInfo = batchTask.batchInfo();  
   
     batchInfo.parmCaption(strFmt("Task N%1",batchTask.parmWhoAmi(i)));  
   
     list.addStart(batchTask);  
   }  
   
   //Creazione dipendenze  
   le = list.getEnumerator();  
   while (le.moveNext())  
   {  
     batchTask = le.current();  
   
     if(!prev)  
     {  
       //il primo task non avarà voncoli  
       batchHeader.addRuntimeTask(batchTask,BatchHeader::getCurrentBatchTask().RecId);  
     }  
     else  
     {  
       //i successivi dipendono dal precedente  
       batchHeader.addRuntimeTask(batchTask,BatchHeader::getCurrentBatchTask().RecId);  
       batchHeader.addDependency(prev,batchTask,BatchDependencyStatus::FinishedOrError);  
     }  
   
     prev = le.current();  
   }  
   
   batchHeader.save();  
   
   info("Done");  
 }  
Se lanciamo il job ed aspettiamo la fine dell'esecuzione dei 10 task, possiamo vedere il risultato in batch history:
L'esecuzione ha generato 10 tasks. il Task "N0" come vediamo non ha condizioni. Tutti gli altri dipendono dal precedente, Ad esempio il task N5 dipende dal task N4 e così via.

 
Complimenti, ottimo post!
RispondiElimina