Activiti 學習筆記八:排他閘道器(ExclusiveGateWay)
一、流程圖
二、演示程式碼
package ExclusiveGateWayTest;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
public class ExclusiveGateWayTest {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/** 部署流程定義(從inputStream) */
@Test
public void deploymentProcessDefinition_inputStream() {
InputStream inputStreamBpmn = this.getClass().getResourceAsStream("exclusiveGateWay.bpmn");
InputStream inputStreamPng = this.getClass().getResourceAsStream("exclusiveGateWay.png");
Deployment deployment = processEngine.getRepositoryService()// 與流程定義和部署物件相關的Service
.createDeployment()// 建立一個部署物件
.name("排他閘道器")// 新增部署的名稱
.addInputStream("exclusiveGateWay.bpmn", inputStreamBpmn)//
.addInputStream("exclusiveGateWay.png", inputStreamPng)//
.deploy();// 完成部署
System.out.println("部署ID:" + deployment.getId());//
System.out.println("部署名稱:" + deployment.getName());//
}
/** 啟動流程例項 */
@Test
public void startProcessInstance() {
// 流程定義的key
String processDefinitionKey = "exclusiveGateWay";
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 = "3904";
// 完成任務的同時,設定流程變數,使用流程變數用來指定完成任務後,下一個連線,對應exclusiveGateWay.bpmn檔案中${money>1000}
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("money", 200);
processEngine.getTaskService()// 與正在執行的任務管理相關的Service
.complete(taskId, variables);
System.out.println("完成任務:任務ID:" + taskId);
}
}
三、小結
1) 一個排他閘道器對應一個以上的順序流
2) 由排他閘道器流出的順序流都有個conditionExpression元素,在內部維護返回boolean型別的決策結果。
3) 決策閘道器只會返回一條結果。當流程執行到排他閘道器時,流程引擎會自動檢索閘道器出口,從上到下檢索如果發現第一條決策結果為true或者沒有設定條件的(預設為成立),則流出。
4) 如果沒有任何一個出口符合條件,則丟擲異常
5) 使用流程變數,設定連線的條件,並按照連線的條件執行工作流,如果沒有條件符合的條件,則以預設的連線離開。例如:
則執行連線:
如果使用流程變數設定:
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("money", 800);
processEngine.getTaskService()// 與正在執行的任務管理相關的Service
.complete(taskId, variables);
則執行連線:
演示程式碼及流程圖下載:http://download.csdn.net/detail/xunzaosiyecao/9625679
本文部分內容整理自itcast講義,在此表示感謝。
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- Springcloud原始碼學習筆記1—— Zuul閘道器原理SpringGCCloud原始碼筆記Zuul
- activiti學習筆記二筆記
- activiti學習筆記(四)managementService筆記
- Activiti工作流基礎學習筆記筆記
- activiti學習記錄
- JavaScript學習筆記(八)—— 補JavaScript筆記
- 八步部署NGINX Plus API閘道器NginxAPI
- HexMap學習筆記(八)——水體筆記
- hive學習筆記之八:SqoopHive筆記OOP
- ES6學習筆記(八)【class】筆記
- Redis學習筆記八:叢集模式Redis筆記模式
- 吳恩達機器學習筆記——八、神經網路吳恩達機器學習筆記神經網路
- 機器學習學習筆記機器學習筆記
- 暢購商城(八):微服務閘道器和JWT令牌微服務JWT
- Janusec應用安全閘道器(WAF閘道器)
- Ceph物件閘道器,多區域閘道器物件
- Golang 學習筆記八 錯誤異常Golang筆記
- Java學習筆記——第八天Java筆記
- PHP 第八週函式學習筆記PHP函式筆記
- 工作學習筆記(八)去重校驗筆記
- Java IO學習筆記八:Netty入門Java筆記Netty
- 機器學習筆記機器學習筆記
- 什麼是閘道器?閘道器的作用是什麼,閘道器的作用詳解
- 閘道器GatewayGateway
- gateway 閘道器Gateway
- node學習筆記第八節:模組化筆記
- 《機器學習初步》筆記機器學習筆記
- 裝飾器學習筆記筆記
- 《springcloud 二》微服務動態閘道器,閘道器叢集SpringGCCloud微服務
- API閘道器,企業級閘道器可擴充套件API套件
- 機器學習整合學習—Apple的學習筆記機器學習APP筆記
- API 閘道器 KongAPI
- Zuul路由閘道器Zuul路由
- kong閘道器部署
- Ocelot閘道器(二)
- Ocelot閘道器(三)
- 微服務閘道器微服務
- 《C++ Primer》學習筆記(八):標準 IO 庫C++筆記
- 飛機的 PHP 學習筆記八:資料庫PHP筆記資料庫