activiti 7 + springboot2(八) Activiti流程实例动态设置assignee执行人

(一)activiti流程图用流程变量设置节点执行人

 

Activiti 使用 UEL 表达式, UEL 是 java EE6 规范的一部分, UEL(Unified Expression Language)即统一表达式语言, activiti 支持两个 UEL 表达式: UEL-value 和 UEL-method。 

<!--UEL-value: user1 是一个流程变量 -->
<userTask activiti:assignee="${user1}" activiti:exclusive="true" id="_3" name="申请人提交申请"/>
 
<!--UEL-method: user 是一个流程变量对象, user1.assignee 表示通过调用 user1 的 getter 方法获取值  -->
<userTask activiti:assignee="${user1.assignee}" activiti:exclusive="true" id="_3" name="申请人提交申请"/>

 

(二)方法调用赋值

${userService.findUserById(userId)}

userService 是 spring 容器的一个 bean, findUserById 是该 bean 的一个方法, userId 是流程变量。

 

(三)监听器分配

任务监听器是发生对应的任务相关事件时执行自定义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("灭霸");
    }
}
复制代码

 

(四)程序中动态指定任务实例执行人代码

复制代码
    /**
     * 启动一个实例,动态设置设置assignee
     */
    @Test
    public void startProcessInstance() {
        //设置assignee,map键对应配置中的变量名
        Map<String,Object> map=new HashMap<>();
        map.put("user1","张三");
        map.put("user2","李四");
        map.put("user3","王五");

        //启动流程实例,同时还要设置流程定义的assignee的值
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess_1", map);
    }
复制代码
posted @   猪脚踏浪  阅读(7410)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2018-01-13 Elasticsearch 5.6.5 安装head插件
点击右上角即可分享
微信分享提示