1、固定分配

直接定死任务处理人进行处理

2、表达式分配

UEL-value

支持UEL表达式进行配置进行处理,是动态的
例如:${assignee}

可以在流程节点中添加动态表达式作为动态的分配
UEL表达式需要在一开始进行赋值才能启动流程实例

UEL-method

${userBean.getUserId()}
userBean是Spring中的一个bean,该表达式标识为调用该对象的方法


UEL-method和UEL-value结合

${userService.getUserById(userId)}
userId为传入的流程变量,userService为Spring中的Bean类
其中userId作为参数传入该方法中

其他

表达式支持多种解析多种基础类型
bean,list,array,map,……

例如:
${order.price>20&&order.price<100}

3、监听器分配

可以用监听器完成负责人的指定
在流程设计的时候就不需要指定assignee

在listener中新建一个监听器

监听器类型:任务监听器 执行监听器 全局监听器

任务监听器

主要监听用户节点的执行动态,总共有4个生命周期

  • create:任务创建后触发
  • assignment:任务分配后触发
  • delete:任务完成后触发
  • delete:任务删除时触发

    image.png


监听器类型

image.png

  • java类
  • 表达式
  • 委托表达式

例如:
自定义Java 类监听器
实现TaskListener 接口
重载其中的notify方法,在其中进行逻辑的触发

  1. /**
  2. * <p>
  3. * 自定义任务监听器
  4. * </p>
  5. *
  6. * @author xupu
  7. * @since 2022/2/28 16:46
  8. */
  9. public class MyTaskListener implements TaskListener {
  10. protected static Logger logger = LoggerFactory.getLogger(TaskListener.class);
  11. @Override
  12. public void notify(DelegateTask delegateTask) {
  13. //可以在此设置流程变量
  14. //默认是create级别,可以进行判断事件类型进行不同的处理
  15. log.info("事件执行顺序===========================================================");
  16. if ("create".equals(eventName)) {
  17. log.info("创建:create=========");
  18. //在此指定流程执行人
  19. delegateTask.setAssignee("");
  20. } else if ("assignment".endsWith(eventName)) {
  21. log.info("指派:assignment========");
  22. } else if ("complete".endsWith(eventName)) {
  23. log.info("完成:complete===========");
  24. } else if ("delete".endsWith(eventName)) {
  25. log.info("销毁:delete=============");
  26. }
  27. }
  28. }

然后在流程定义中进行绑定监听器

image.png

4、办理任务

需要事先查询任务是否存在
存在才能进行处理