Activiti的分配任务负责人(八)
1分配任务负责人
1.1 固定分配
在进行业务流程建模时指定固定的任务负责人
在 properties 视图中,填写 Assignee 项为任务负责人。
注意事项
由于固定分配方式,任务只管一步一步执行任务,执行到每一个任务将按照 bpmn 的配置去分配任
务负责人。
1.2 表达式分配
1.2.1 UEL 表达式
Activiti 使用 UEL 表达式, UEL 是 java EE6 规范的一部分, UEL(Unified Expression Language)即
统一表达式语言, activiti 支持两个 UEL 表达式: UEL-value 和 UEL-method。
UEL-value 定义如下:
assignee 这个变量是 activiti 的一个流程变量。
或
user 也是 activiti 的一个流程变量, user.assignee 表示通过调用 user 的 getter 方法获取值。
UEL-method 与 UEL-value 结合
再比如:
${ldapService.findManagerForEmployee(emp)}
ldapService 是 spring 容器的一个 bean, findManagerForEmployee 是该 bean 的一个方法, emp 是 activiti
流程变量, emp 作为参数传到 ldapService.findManagerForEmployee 方法中。
其它
表达式支持解析基础类型、 bean、 list、 array 和 map,也可作为条件判断。
如下:
${order.price > 100 && order.price < 250}
1.2.2 使用流程变量分配任务
定义任务分配流程变量
/** * 启动流程实例,动态设置assignee */ public class AssigneeUEL { public static void main(String[] args) { //1.得到ProcessEngine对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到RuntimeService对象 RuntimeService runtimeService = processEngine.getRuntimeService(); //3.设置assignee的取值 用户可以在界面上设置流程的执行人 Map<String,Object> map = new HashMap<>(); map.put("assignee0","zhangsan"); map.put("assignee1","lishi"); map.put("assignee2","wangwu"); //4.启动流程实例,同时还要设置流程定义的assignee的值 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday2", map); //5.输出 System.out.println(processEngine.getName()); } }
注意事项
由于使用了表达式分配,必须保证在任务执行过程表达式执行成功,比如:
某个任务使用了表达式${order.price > 100 && order.price < 250},当执行该任务时必须保证 order 在
流程变量中存在,否则 activiti 异常
1.3 监听器分配
任务监听器是发生对应的任务相关事件时执行自定义 java 逻辑 或表达式。
任务相当事件包括:
Create:任务创建后触发
Assignment:任务分配后触发
Delete:任务完成后触发
All:所有事件发生都触发
java 逻辑 或表达式:
表达式参考上边的介绍的 UEL 表达式,这里主要介绍监听类使用
public class MyTaskListener implements TaskListener { @Override public void notify(DelegateTask delegateTask) { delegateTask.setAssignee("zhangsan"); } }
注意事项
使用监听器分配方式,按照监听事件去执行监听类的 notify 方法,方法如果不能正常执行也会影响
任务的执行
注:实战中还是通过UEL表达式比较多