一、部署流程定義
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/** 部署流程定義(從inputStream) */
@Test
public void deploymentProcessDefinition_inputStream() {
InputStream inputStreamBpmn = this.getClass().getResourceAsStream("sequenceFlow.bpmn");
InputStream inputStreamPng = this.getClass().getResourceAsStream("sequenceFlow.png");
Deployment deployment = processEngine.getRepositoryService()// 與流程定義和部署對象相關的Service
.createDeployment()// 建立一個部署對象
.name("連線")// 添加部署的名稱
.addInputStream("sequenceFlow.bpmn", inputStreamBpmn)//
.addInputStream("sequenceFlow.png", inputStreamPng)//
.deploy();// 完成部署
System.out.println("部署ID:" + deployment.getId());//
System.out.println("部署名稱:" + deployment.getName());//
注意:如果将流程圖放置在和java類相同的路徑,需要配置
點選remove按鈕,移除*/.java
二、啟動流程執行個體
/** 啟動流程執行個體 */
@Test
public void startProcessInstance() {
// 流程定義的key
String processDefinitionKey = "sequenceFlow";
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
三、查詢我的個人任務
/** 查詢目前人的個人任務 */
@Test
public void findMyPersonalTask() {
String assignee = "趙六";
List<Task> list = processEngine.getTaskService()// 與正在執行的任務管理相關的Service
.createTaskQuery()// 建立任務查詢對象
/** 查詢條件(where部分) */
.taskAssignee(assignee)// 指定個人任務查詢,指定辦理人
// .taskCandidateUser(candidateUser)//組任務的辦理人查詢
// .processDefinitionId(processDefinitionId)//使用流程定義ID查詢
// .processInstanceId(processInstanceId)//使用流程執行個體ID查詢
// .executionId(executionId)//使用執行對象ID查詢
/** 排序 */
.orderByTaskCreateTime().asc()// 使用建立時間的升序排列
/** 傳回結果集 */
// .singleResult()//傳回惟一結果集
// .count()//傳回結果集的數量
// .listPage(firstResult, maxResults);//分頁查詢
.list();// 傳回清單
if (list != null && list.size() > 0) {
for (Task task : list) {
System.out.println("任務ID:" + task.getId());
System.out.println("任務名稱:" + task.getName());
System.out.println("任務的建立時間:" + task.getCreateTime());
System.out.println("任務的辦理人:" + task.getAssignee());
System.out.println("流程執行個體ID:" + task.getProcessInstanceId());
System.out.println("執行對象ID:" + task.getExecutionId());
System.out.println("流程定義ID:" + task.getProcessDefinitionId());
System.out.println("########################################################");
}
}
}
四、完成我的任務
/** 完成我的任務 */
@Test
public void completeMyPersonalTask() {
// 任務ID
String taskId = "67504";
// 完成任務的同時,設定流程變量,使用流程變量用來指定完成任務後,下一個連線,對應sequenceFlow.bpmn檔案中${message=='不重要'}
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("message", "重要");
processEngine.getTaskService()// 與正在執行的任務管理相關的Service
.complete(taskId, variables);
System.out.println("完成任務:任務ID:"
說明:
1)使用流程變量,設定連線需要的流程變量的名稱message,并設定流程變量的值
對應:
流程會按照指定的連線完成任務。
五、總結
1、一個活動中可以指定一個或多個SequenceFlow(Start中有一個,End中沒有)。
* 開始活動中有一個SequenceFlow 。
* 結束活動中沒有SequenceFlow 。
* 其他活動中有1條或多條SequenceFlow
2、如果隻有一個,則可以不使用流程變量設定codition的名稱;
如果有多個,則需要使用流程變量設定codition的名稱。message表示流程變量的名稱,‘不重要’表示流程變量的值,${}中間的内容要使用boolean類型的表達式,用來判斷應該執行的連線。