activiti-ReceiveTask

 接收任務(ReceiveTask)即等待任務,接收任務是一個簡單任務,它會等待對應消息的到達。當前,官方只實現了這個任務的java語義。 當流程達到接收任務,流程狀態會保存到數據庫中。在任務建立後,意味着流程會進入等待狀態,直到引擎接收了一個特定的消息, 這會觸發流程穿過接收任務繼續執行。java

 

    1、流程圖數據庫

 

                                           

                                                 圖一  等待任務流程圖app

 

     在這裏,咱們使用每日向老闆彙總當日銷售額爲例,來演示一下等待任務。this

 

     2、流程演示spa

 

 

[java] view plain copy.net

  1. package cn.gome.j_receiveTask;  
  2.   
  3. import java.io.InputStream;  
  4.   
  5. import org.activiti.engine.ProcessEngine;  
  6. import org.activiti.engine.ProcessEngines;  
  7. import org.activiti.engine.repository.Deployment;  
  8. import org.activiti.engine.runtime.Execution;  
  9. import org.activiti.engine.runtime.ProcessInstance;  
  10. import org.junit.Test;  
  11.   
  12. public class ReceiveTaskTest {  
  13.       
  14.     //流程引擎對象  
  15.     ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();  
  16.       
  17.     /**部署流程定義+啓動流程實例*/  
  18.     @Test  
  19.     public void deployementAndStartProcess(){  
  20.         InputStream inputStreamBpmn = this.getClass().getResourceAsStream("receiveTask.bpmn");  
  21.         InputStream inputStreamPng = this.getClass().getResourceAsStream("receiveTask.png");  
  22.           
  23.         //1.部署流程定義  
  24.         Deployment deployment = processEngine.getRepositoryService()  
  25.                 .createDeployment()//建立部署對象  
  26.                 .addInputStream("receiveTask.bpmn", inputStreamBpmn)  
  27.                 .addInputStream("receiveTask.png", inputStreamPng)  
  28.                 .deploy();  
  29.         System.out.println("部署ID:" + deployment.getId());  
  30.           
  31.         //2.啓動流程實例  
  32.         ProcessInstance pi = processEngine.getRuntimeService()  
  33.                 .startProcessInstanceByKey("receiveTask");//使用流程定義的key的最新版本啓動流程  
  34.         System.out.println("流程實例ID:"+pi.getId());  
  35.         System.out.println("流程定義ID:"+pi.getProcessDefinitionId());  
  36.           
  37.         //3.查詢執行對象表,使用流程實例ID和當前活動的名稱(receivetask1)  
  38.         String processInstanceId = pi.getId();//獲得流程實例ID  
  39.         Execution execution1 = processEngine.getRuntimeService()  
  40.                 .createExecutionQuery()  
  41.                 .processInstanceId(processInstanceId)//流程實例ID  
  42.                 .activityId("receivetask1")//當前活動的名稱  
  43.                 .singleResult();  
  44.           
  45.         //4.使用流程變量設置當日的銷售額  
  46.         processEngine.getRuntimeService().setVariable(execution1.getId(), "當日銷售額", 20000);  
  47.           
  48.         //5.向後執行一步  
  49.         processEngine.getRuntimeService()  
  50.             .signal(execution1.getId());  
  51.           
  52.         //6.查詢執行對象表,使用流程實例ID和當前活動的名稱(receivetask2)  
  53.         Execution execution2 = processEngine.getRuntimeService()  
  54.                 .createExecutionQuery()  
  55.                 .processInstanceId(processInstanceId)  
  56.                 .activityId("receivetask2")  
  57.                 .singleResult();  
  58.           
  59.         //7.獲取流程變量,給老闆發送短信  
  60.         Integer value = (Integer) processEngine.getRuntimeService()  
  61.                 .getVariable(execution2.getId(), "當日銷售額");  
  62.         System.out.println("給老闆發送短信:內容,當日銷售額:"+value);  
  63.           
  64.         //8.向後執行一步  
  65.         processEngine.getRuntimeService()  
  66.                 .signal(execution2.getId());  
  67.           
  68.         //9.判斷流程是否結束  
  69.         ProcessInstance nowPi = processEngine.getRuntimeService()  
  70.                 .createProcessInstanceQuery()  
  71.                 .processInstanceId(pi.getId())  
  72.                 .singleResult();  
  73.         if(nowPi == null){  
  74.             System.out.println("流程結束");  
  75.         }  
  76.     }  
  77.       
  78.       
  79. }  


     說明:與用戶任務(UserTask)不一樣的是,接收任務(ReceiveTask)建立後,會進入一個等待狀態,通常指機器自動完成,但須要耗費必定時間的工做,當完成工做後後,向後推移流程,在上面的代碼中也就是向下執行一步,使用runtimeService.signal(executionId),傳遞接收執行對象的id。對象

 

 

     3、數據庫表分析blog

 

     1.流程定義表:act_re_procdefip

     

 

    2.執行對象表:act_ru_execution:receiveTask1部署

 

 

    3.流程變量表:act_ru_variable

 

 

    4.執行對象表:act_ru_execution:receiveTask2

 

 

     總結:

     簡單介紹了一下等待任務,和咱們以前用戶任務不太同樣的是,在等待任務執行的時候,act_ru_task表中是沒有數據的,只有任務節點(UserTask),該表中才有數據。

本站公眾號
   歡迎關注本站公眾號,獲取更多信息