1. 程式人生 > >Activiti 學習筆記11:接收活動(receiveTask,即等待活動)

Activiti 學習筆記11:接收活動(receiveTask,即等待活動)

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

一、流程圖

這裡寫圖片描述

二、演示程式碼

package jiankunking.receiveTask;

import java.io.InputStream;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import
org.activiti.engine.repository.Deployment; import org.activiti.engine.runtime.Execution; import org.activiti.engine.runtime.ProcessInstance; import org.junit.Test; public class ReceiveTaskTest { ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /**部署流程定義(從inputStream)*/
@Test public void deploymentProcessDefinition_inputStream(){ InputStream inputStreamBpmn = this.getClass().getResourceAsStream("receiveTask.bpmn"); InputStream inputStreamPng = this.getClass().getResourceAsStream("receiveTask.png"); Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署物件相關的Service
.createDeployment()//建立一個部署物件 .name("接收活動任務")//新增部署的名稱 .addInputStream("receiveTask.bpmn", inputStreamBpmn)// .addInputStream("receiveTask.png", inputStreamPng)// .deploy();//完成部署 System.out.println("部署ID:"+deployment.getId());// System.out.println("部署名稱:"+deployment.getName());// } /**啟動流程例項+設定流程變數+獲取流程變數+向後執行一步*/ @Test public void startProcessInstance(){ //流程定義的key String processDefinitionKey = "receiveTask"; ProcessInstance pi = processEngine.getRuntimeService()//與正在執行的流程例項和執行物件相關的Service .startProcessInstanceByKey(processDefinitionKey);//使用流程定義的key啟動流程例項,key對應helloworld.bpmn檔案中id的屬性值,使用key值啟動,預設是按照最新版本的流程定義啟動 System.out.println("流程例項ID:"+pi.getId());//流程例項ID 101 System.out.println("流程定義ID:"+pi.getProcessDefinitionId());//流程定義ID helloworld:1:4 /**查詢執行物件ID*/ Execution execution1 = processEngine.getRuntimeService()// .createExecutionQuery()//建立執行物件查詢 .processInstanceId(pi.getId())//使用流程例項ID查詢 .activityId("receivetask1")//當前活動的id,對應receiveTask.bpmn檔案中的活動節點id的屬性值 .singleResult(); /**使用流程變數設定當日銷售額,用來傳遞業務引數*/ processEngine.getRuntimeService()// .setVariable(execution1.getId(), "彙總當日銷售額", 21000); /**向後執行一步,如果流程處於等待狀態,使得流程繼續執行*/ processEngine.getRuntimeService() .signal(execution1.getId()); /**查詢執行物件ID*/ Execution execution2 = processEngine.getRuntimeService()// .createExecutionQuery()//建立執行物件查詢 .processInstanceId(pi.getId())//使用流程例項ID查詢 .activityId("receivetask2")//當前活動的id,對應receiveTask.bpmn檔案中的活動節點id的屬性值 .singleResult(); /**從流程變數中獲取彙總當日銷售額的值*/ Integer value = (Integer)processEngine.getRuntimeService()// .getVariable(execution2.getId(), "彙總當日銷售額"); System.out.println("給老闆傳送簡訊:金額是:"+value); /**向後執行一步,如果流程處於等待狀態,使得流程繼續執行*/ processEngine.getRuntimeService() .signal(execution2.getId()); } }

三、小結

當前任務(一般指機器自動完成,但需要耗費一定時間的工作)完成後,向後推移流程,可以呼叫runtimeService.signal(executionId),傳遞接收執行物件的id。