一、流程圖
流程圖中任務節點的配置:
配置設定任務負責的組
使用 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()//
三、配置設定任務負責的組(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();