1. 分配任务负责人
1.1 固定分配
在进行业务流程建模时指定固定的任务负责人,在 properties 视图中,填写 Assignee 项为任务负责人。(实际业务中很少使用)
2. UEL表达式
Activiti 使用 UEL 表达式, UEL 是 java EE6 规范的一部分,UEL(Unified Expression Language)即统一表达式语言, activiti 支持两个 UEL 表达式: UEL-value 和 UEL-method。
2.1 UEL-value
<!--UEL-value: user是一个流程变量 -->
<userTask activiti:assignee="${user}" activiti:exclusive="true" id="_3" name="申请人提交申请"/>
<!--UEL-value: user 是一个流程变量对象, user.assignee 表示通过调用 user 的 getter 方法获取值 -->
<userTask activiti:assignee="${user.assignee}" activiti:exclusive="true" id="_3" name="申请人提交申请"/>
2.2 UEL-method
${userService.findUserById(userId)}
userService 是 spring 容器的一个 bean, findUserById 是该 bean 的一个方法, userId 是流程变量。
表达式支持解析基础类型、 bean、 list、 array 和 map,也可作为条件判断。
如下:
${order.price > 100 && order.price < 250}
3. 监听器分配
任务监听器是发生对应的任务相关事件时执行自定义java逻辑或表达式。
说明:
Create:任务创建后触发
Assignment:任务分配后触发
Delete:任务完成后触发
All:所有事件发生都触发
定义任务监听类,且类必须实现org.activiti.engine.delegate.TaskListener接口
package com.activiti.example;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
public class MyTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
delegateTask.setAssignee("pippen");
}
}
4. 程序中动态指定办理人代码
User user = new User();
user.setDeptId("lipeng");
user.setAccId("zhangxin");
user.setBranch("mww");
user.setChief("luowei");
Map<String, Object> map = new HashMap<>();
map.put("user", user);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(
"ys-work",
"19940818", map
);
System.out.println("流程启动:" + processInstance.getBusinessKey());
打赏