Activiti 學習筆記14:工作流定義的角色組
一、流程圖
流程圖中任務節點的配置:
分配任務負責的組
使用 candidate groups 屬性指定 任務負責組
程式碼:
<userTask id=“usertask1” name=“審批” activiti:candidateGroups=“部門經理”>
</userTask>
其中部門經理表示一個使用者組的角色
二、測試程式碼
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/** 部署流程定義(從inputStream) */
@Test
public void deploymentProcessDefinition_inputStream() {
InputStream inputStreamBpmn = this.getClass().getResourceAsStream("task.bpmn");
InputStream inputStreamPng = this.getClass().getResourceAsStream("task.png");
Deployment deployment = processEngine.getRepositoryService()// 與流程定義和部署物件相關的Service
.createDeployment()// 建立一個部署物件
.name("任務")// 新增部署的名稱
.addInputStream("task.bpmn", inputStreamBpmn)//
.addInputStream("task.png", inputStreamPng)//
.deploy();// 完成部署
System.out.println("部署ID:" + deployment.getId());//
System.out.println("部署名稱:" + deployment.getName());//
/** 新增使用者角色組 */
IdentityService identityService = processEngine.getIdentityService();//
// 建立角色
identityService.saveGroup(new GroupEntity("總經理"));
identityService.saveGroup(new GroupEntity("部門經理"));
// 建立使用者
identityService.saveUser(new UserEntity("張三"));
identityService.saveUser(new UserEntity("李四"));
identityService.saveUser(new UserEntity("王五"));
// 建立使用者和角色的關聯關係
identityService.createMembership("張三", "部門經理");
identityService.createMembership("李四", "部門經理");
identityService.createMembership("王五", "總經理");
System.out.println("新增組織機構成功");
}
/** 啟動流程例項 */
@Test
public void startProcessInstance() {
// 流程定義的key
String processDefinitionKey = "task";
ProcessInstance pi = processEngine.getRuntimeService()// 與正在執行的流程例項和執行物件相關的Service
.startProcessInstanceByKey(processDefinitionKey);// 使用流程定義的key啟動流程例項,key對應helloworld.bpmn檔案中id的屬性值,使用key值啟動,預設是按照最新版本的流程定義啟動
System.out.println("流程例項ID:" + pi.getId());// 流程例項ID
System.out.println("流程定義ID:" + pi.getProcessDefinitionId());// 流程定義ID
}
/** 查詢當前人的個人任務 */
@Test
public void findMyPersonalTask() {
String assignee = "小A";
List<Task> list = processEngine.getTaskService()// 與正在執行的任務管理相關的Service
.createTaskQuery()// 建立任務查詢物件
/** 查詢條件(where部分) */
.taskAssignee(assignee)// 指定個人任務查詢,指定辦理人
// .taskCandidateUser(candidateUser)//組任務的辦理人查詢
/** 排序 */
.orderByTaskCreateTime().asc()// 使用建立時間的升序排列
/** 返回結果集 */
.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 findMyGroupTask() {
String candidateUser = "李四1";
List<Task> list = processEngine.getTaskService()// 與正在執行的任務管理相關的Service
.createTaskQuery()// 建立任務查詢物件
/** 查詢條件(where部分) */
.taskCandidateUser(candidateUser)// 組任務的辦理人查詢
/** 排序 */
.orderByTaskCreateTime().asc()// 使用建立時間的升序排列
/** 返回結果集 */
.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 = "7504";
processEngine.getTaskService()// 與正在執行的任務管理相關的Service
.complete(taskId);
System.out.println("完成任務:任務ID:" + taskId);
}
/** 查詢正在執行的任務辦理人表 */
@Test
public void findRunPersonTask() {
// 任務ID
String taskId = "6204";
List<IdentityLink> list = processEngine.getTaskService()//
.getIdentityLinksForTask(taskId);
if (list != null && list.size() > 0) {
for (IdentityLink identityLink : list) {
System.out.println(identityLink.getTaskId() + " " + identityLink.getType() + " "
+ identityLink.getProcessInstanceId() + " " + identityLink.getUserId());
}
}
}
/** 查詢歷史任務的辦理人表 */
@Test
public void findHistoryPersonTask() {
// 流程例項ID
String processInstanceId = "6201";
List<HistoricIdentityLink> list = processEngine.getHistoryService()//
.getHistoricIdentityLinksForProcessInstance(processInstanceId);
if (list != null && list.size() > 0) {
for (HistoricIdentityLink identityLink : list) {
System.out.println(identityLink.getTaskId() + " " + identityLink.getType() + " "
+ identityLink.getProcessInstanceId() + " " + identityLink.getUserId());
}
}
}
/** 拾取任務,將組任務分給個人任務,指定任務的辦理人欄位 */
@Test
public void claim() {
// 將組任務分配給個人任務
// 任務ID
String taskId = "7504";
// 分配的個人任務(可以是組任務中的成員,也可以是非組任務的成員)
String userId = "張三";
processEngine.getTaskService()//
.claim(taskId, userId);
}
三、分配任務負責的組(IdentityService)
/**在部署流程定義和啟動流程例項的中間,設定組任務的辦理人,向Activiti表中存放組和使用者的資訊*/
IdentityService identityService = processEngine.getIdentityService();//認證:儲存組和使用者資訊
identityService.saveGroup(new GroupEntity("部門經理"));//建立組
identityService.saveGroup(new GroupEntity("總經理"));//建立組
identityService.saveUser(new UserEntity(“小張”));//建立使用者
identityService.saveUser(new UserEntity("小李")); //建立使用者
identityService.saveUser(new UserEntity("小王")); //建立使用者
identityService.createMembership("小張", "部門經理");//建立組和使用者關係
identityService.createMembership("小李", "部門經理");//建立組和使用者關係
identityService.createMembership(“小王”, “總經理”);//建立組和使用者關係
表結構介紹:
act_id_group:角色組表
act_id_user:使用者表:
act_id_membership:使用者角色表
指定組任務的辦理人,查詢組任務
String userId = “張三”;//張三,李四可以查詢結果,王五不可以,因為他不是部門經理角色
List<Task> list = processEngine.getTaskService()//
.createTaskQuery()//
.taskCandidateUser(userId)//指定組任務查詢
.list();
四、activiti 小結
演示程式碼下載:http://download.csdn.net/detail/xunzaosiyecao/9630841
本文部分內容整理自itcast講義,在此表示感謝。
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- Activiti工作流基礎學習筆記筆記
- activiti學習筆記二筆記
- activiti學習筆記(四)managementService筆記
- Activiti Exploer工作流控制檯使用指南!使用Activiti Explorer定義部署執行工作流
- Activiti工作流學習筆記(四)——工作流引擎中責任鏈模式的建立與應用原理筆記模式
- activiti學習記錄
- 我的C#學習筆記14C#筆記
- Activiti工作流學習筆記(三)——自動生成28張資料庫表的底層原理分析筆記資料庫
- Solidity語言學習筆記————14、動態位元組陣列Solid筆記陣列
- MYSQL學習筆記14: 函式MySql筆記函式
- 學習筆記14:模型儲存筆記模型
- 【Python學習】學習筆記 14-15 字串Python筆記字串
- Xilinx約束學習筆記(二)—— 定義時鐘筆記
- 強化學習-學習筆記14 | 策略梯度中的 Baseline強化學習筆記梯度
- leetcode學習筆記14 Longest Common PrefixLeetCode筆記
- 組合數學學習筆記筆記
- 【學習筆記】組合數學筆記
- 2020-11-14springboot學習筆記03Spring Boot筆記
- KnockoutJS學習筆記14:KonckoutJS click繫結JS筆記
- iOS學習筆記14 網路(三)WebViewiOS筆記WebView
- Git 分支的建立與切換 —— Git 學習筆記 14Git筆記
- Adaptive AUTOSAR 學習筆記 14 - 車輛診斷APT筆記
- activiti7 獲取流程定義的xmlXML
- 吳恩達機器學習筆記 —— 14 無監督學習吳恩達機器學習筆記
- numpy的學習筆記\pandas學習筆記筆記
- Python學習筆記-基礎篇(14)-安裝第三方模組Python筆記
- 《Java核心技術 卷I》學習筆記10:使用預定義類Java筆記
- 組合最佳化 學習筆記筆記
- Nginx 學習筆記--程式與模組Nginx筆記
- Activiti工作流-實戰篇(用Activiti框架快速開發我們的工作流)框架
- C#學習筆記(一)--- 物件導向的思想和類的定義、物件的建立C#筆記物件
- 林軒田機器學習基石課程學習筆記14 — Regularization機器學習筆記
- activiti工作流引擎元件元件
- java Activiti 工作流引擎 SSM 框架模組設計方案JavaSSM框架
- Centos學習筆記14 – java程式啟動指令碼CentOS筆記Java指令碼
- Solidity語言學習筆記————14、左值運算子Solid筆記
- MySQL定時器EVENT學習筆記MySql定時器筆記
- iOS學習筆記--PresentedVC自定義彈窗iOS筆記
- Pytest學習筆記6-自定義標記mark筆記