09给任务指定办理人的方式,
分享于 点击 5496 次 点评:91
09给任务指定办理人的方式,
一、流程图

二、分配个人任务的方式
1、直接指定办理人

说明:这样分配办理人不够灵活,因为项目开发中任务的办理人不要放置在XML当中实际开发中办理人是不固定的。
2、使用流程变量指定办理人
2.1 流程图中的设置

说明:在Activiti中#{username}和${username}的意义是一样的。
2.2 流程运行
//部署流程 @Test public void bushu() { InputStream inputStream = this.getClass().getResourceAsStream("TaskMan.zip"); ZipInputStream zipInputStream = new ZipInputStream(inputStream); RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment deploy = repositoryService.createDeployment().name("请假流程") .addZipInputStream(zipInputStream).deploy(); System.out.println("部署成功:部署ID"+deploy.getId()); } //启动流程,在启动时就带入办理人的流程变量 @Test public void startProcess() { RuntimeService runtimeService = processEngine.getRuntimeService(); Map<String,Object> vars = new HashMap<String,Object>(); vars.put("username", "张三"); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess",vars); System.out.println("流程启动成功,流程实例ID为:"+processInstance.getId()); } //任务查询 @Test public void findTask() { TaskService taskService = processEngine.getTaskService(); Task task = taskService.createTaskQuery().taskAssignee("张三").singleResult(); System.out.println("张三的任务ID:"+task.getId());//张三的任务ID:2505 } //完成任务,并制定下一任务办理人 @Test public void doTask() { TaskService taskService = processEngine.getTaskService(); Map<String,Object> vars = new HashMap<String,Object>(); vars.put("username", "李四"); taskService.complete("2505",vars);}
3、使用类指定办理人(使用监听器指定办理人)
作用:当任务到达相应的节点时,会触发监听,让监听器去指定下个任务的办理人。
3.1 创建监听器类(实现TaskListener接口)
//监听器 public class TaskListenerImpl implements TaskListener {@Override public void notify(DelegateTask delegateTask) { System.out.println("流程到了指定节点"); delegateTask.setAssignee("李四"); } }
3.2 流程图的变化
设置第二个节点的办理人为空:
为第二个节点添加监听器:

流程运行到此节点之后,会触发监听器,为此节点设置办理人。
4、总结
个人任务及三种分配方式:
1,在taskProcess.bpmn中直接写 assignee=“张三丰"
2,在taskProcess.bpmn中写 assignee=“#{userID}”,变量的值要是String的。
使用流程变量指定办理人
3,使用TaskListener接口,要使类实现该接口,在类中定义,
delegateTask.setAssignee(assignee);// 指定个人任务的办理人
使用任务ID和办理人重新指定办理人:
processEngine.getTaskService().setAssignee(taskId, userId);
相关文章
- 暂无相关文章
用户点评