企业网站设计与规划论文/推广关键词
目录
一、概述
二、分配的三种方式
1、流程图指定
2、使用流程变量
3、使用节点监听器
三、总结
一、概述
在使用流程时,最核心也最重要的一点便是人员分配,哪些人可以看到,哪些人可以处理等等业务都是基于人员分配而来。Activiti的人员分配大致有三种方式,下面分别一一介绍。
二、分配的三种方式
1、流程图指定
就是在配置流程定义的时候就为环节指定处理人,如下:
前面系列的所有案例都是采用这种方式,作为演示来说简单方便,但是在xml中写死处理人是非常不可取,在实际应用时,Activiti大多作为底层引擎使用,上层流程图设计、模型配置等等一切信息可能都是由业务方自行设置,业务方在配置的时候虽然也是通过先设置处理人范围,然后最后可能是由上一处理人指派、主动认领、随机分配、发起人指定等等多种方式来分配环节的处理人,所以真正在Activiti执行的时候需要灵活分配处理人,一般都是通过第二种方式。
2、使用流程变量
定义流程图时以变量的形式分配处理人,实际流转时需要透传变量以便Activiti自动解析替换,配置如下:
使用时与前面系列都类似,在流程流转时将变量作为参数传进去即可,此处就不贴代码了。
3、使用节点监听器
首先需要自定义一个监听类,实现Activiti的TaskListener接口:
package activiti.activiti.listener;import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;/*** Created by xujia on 2020/2/6*/
public class AssigneeListener implements TaskListener {/*** 设置任务的处理人* @param delegateTask*/@Overridepublic void notify(DelegateTask delegateTask) {delegateTask.setAssignee("张三");}
}
然后在流程图地方进行配置:
实现那边填上自定义类的全路径,这边再介绍一下TaskListener的事件类型,一共有四类,关于其具体执行顺序放到下文讲:
- create:任务创建。
- assignment:任务被委派给某人后,即只在设置处理人且处理人发生变化时触发。
- complete:在任务完成后,且被从运行时数据(runtime data)中删除前触发。
- delete:在任务将要被删除之前发生。
xml中主要区别如下:
<userTask id="sid-042D76FB-6812-4099-A8E1-3CCC4A8D1896" name="直属经理审批" default="sid-A37138F4-6D40-4EB7-961A-0242D63D8F9D"><extensionElements><activiti:taskListener event="create" class="activiti.activiti.listener.AssigneeListener"></activiti:taskListener></extensionElements></userTask>
配置完后运行代码测试就会发现处理人已被正确的设置为"张三",在流程启动创建任务时"张三"被正确赋值进去
@Testpublic void multiBranchDemoTest() {// 1、发布流程Deployment deployment = repositoryService.createDeployment().name("多分支请假流程").addClasspathResource("processes/vocationDemo2.bpmn20.xml").deploy();// 2、启动一个流程实例ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("vocation", variables);}
三、总结
方式一比较死板,不适合实际使用,后面两种都比较灵活,在实际使用时都可选择,个人认为还是使用变量比较好,毕竟在流程流转时就指定