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 學習筆記13:分配組任務筆記
- activiti學習筆記二筆記
- Activiti工作流-筆記2筆記
- activiti學習筆記(四)managementService筆記
- Activiti 學習筆記 小結筆記
- Activiti工作流學習筆記(四)——工作流引擎中責任鏈模式的建立與應用原理筆記模式
- Activiti 學習筆記七:連線(SequenceFlow)筆記
- Activiti 學習筆記五:流程變數筆記變數
- Activiti Exploer工作流控制檯使用指南!使用Activiti Explorer定義部署執行工作流
- 14.管理角色(筆記)筆記
- Activiti 學習筆記12:分配個人任務筆記
- activiti學習記錄
- Activiti學習筆記一:建立資料庫表筆記資料庫
- Activiti 學習筆記八:排他閘道器(ExclusiveGateWay)筆記Gateway
- Activiti 學習筆記六:流程執行歷史記錄筆記
- Activiti工作流學習筆記(三)——自動生成28張資料庫表的底層原理分析筆記資料庫
- com學習筆記(1)基礎介面的定義筆記
- 【學習筆記】組合數學筆記
- Activiti 學習筆記一到六小結筆記
- Activiti 學習筆記九:並行閘道器(parallelGateWay)筆記並行ParallelGateway
- Object C學習筆記3-物件的使用和定義Object筆記物件
- Activiti 學習筆記四:流程例項、任務的執行筆記
- 我的C#學習筆記14C#筆記
- Xilinx約束學習筆記(二)—— 定義時鐘筆記
- Activiti學習筆記二:簡單順序流演示demo筆記
- Solidity語言學習筆記————14、動態位元組陣列Solid筆記陣列
- 組合語言學習筆記組合語言筆記
- bootstrap學習筆記 Bootstrap 列表組boot筆記
- MYSQL學習筆記14: 函式MySql筆記函式
- 學習筆記14:模型儲存筆記模型
- Activiti 學習筆記11:接收活動(receiveTask,即等待活動)筆記
- 【Python學習】學習筆記 14-15 字串Python筆記字串
- 組合最佳化 學習筆記筆記
- 向量定義筆記筆記
- 關於SQLServer2005的學習筆記——自定義分組的實現SQLServer筆記
- numpy的學習筆記\pandas學習筆記筆記