Activiti 学习笔记14:工作流定义的角色组
2016-09-14 21:23
323 查看
一、流程图
流程图中任务节点的配置:
分配任务负责的组
使用 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 学习笔记14:工作流定义的角色组
- 工作流学习笔记——Activiti流程定义管理三步曲
- Activiti学习笔记3 — 流程定义
- android 学习笔记14- 项目实战 基类抽取 标题定义 界面滑动
- Activiti工作流开发学习笔记(一)
- 工作流学习——Activiti流程定义管理三步曲
- Activiti工作流开发学习笔记(一)
- Activiti学习笔记五 流程定义的管理(二)
- Activiti工作流开发学习笔记(一)
- Activiti工作流开发学习笔记(一)
- Activiti工作流框架学习笔记(一)
- Activiti学习笔记三:管理流程定义
- Activiti学习笔记三:管理流程定义
- Activiti工作流开发学习笔记(一)
- Java学习笔记14:接口只用于定义类型
- 工作流学习——Activiti流程定义管理三步曲
- Activiti学习笔记四 流程定义的管理(一)
- Activiti工作流开发学习笔记(一)
- 14. JAVA 枚举(Enum、类集EnumMap&EnumSet 、实现接口、定义抽象方法) ----- 学习笔记
- Activiti工作流开发学习笔记(一)