warm-flow 1.2.8 版本更新,新增办理人变量表达式和条件表达式支持 spel


warm-flow 1.2.8版本更新,新增办理人变量表达式和条件表达式支持spel

  • 【升级注意事项】

    • 本次升级,内置json库snack3方式,改为spi方式加载,业务项目中存在哪种json就会使用哪种的实现, 支持顺序按顺序加载一种:snack3、jackson、fastjson、gson,并且目前只实现了这四种,可扩展
    • 如在未集成snack3库的环境下,还需要使用snack3库,需要单独使用(原组件使用snack3库)
      
      org.noear
      snack3
      3.2.88
      
      
  • 更新日志

    • [feat] json库支持snack3、jackson、fastjson和gson,并且支持扩展
    • [feat] 增加办理人变量表达式,支持${xxx}替换和spel,并支持扩展
    • [feat] ListenerVariable监听器变量新增FlowParams字段,方便开始监听器全局传递参数
    • [feat] 终止新增对开始和完成监听器的支持
    • [update] springboot项目的条件表达式默认支持spel
    • [update] 历史记录改为单条保存,删除重复代码
    • [update] 修改FlowUserDao的bean名称
    • [update] 中间节点拆分为或签,会签,票签
    • [fix] 修复历史记录创建时间相等,导致流程图渲染异常
    • [fix]修复Mybatis逻辑删除变成真实删除的缺陷 @xiarigang
    • [refactor] 重构id生成器,支持orm默认策略,删除数据填充默认实现类,改为匿名类

部分更新内容介绍

1、增加办理人变量表达式

1.1、默认办理人变量策略

前端页面设置变量

  • 比如:@@default@@|${handler1},role:1,1
  • @@default@@|${handler1}中@@default@@表示默认办理人变量策略,handler1是需要被流程变量中替换的标识
  • role:1,1表示办理人角色和具体办理人

后端代码设置变量


// 流程变量
Map variable = new HashMap<>();
variable.put("handler1", "100");
flowParams.variable(variable);

Instance instance = insService.skipByInsId(testLeave.getInstanceId(), flowParams);

1.2、spel办理人变量策略

前端页面设置变量

  • 比如:@@spel@@|#{@user.evalVar(#handler2)}
  • #{@user.evalVar(#handler2)}是spel表达式,#handler2是方法入参变量,可以不设置

后端代码设置变量

/**
 * 用户类
 */
@Component("user")
public class User {

/**
 * spel办理人变量表达式
 * @param handler2 办理人
 * @return String
 */
public String evalVar(String handler2) {
return handler2;
}
}

// 流程变量
Map variable = new HashMap<>();
variable.put("handler2", "101");
flowParams.variable(variable);

Instance instance = insService.skipByInsId(testLeave.getInstanceId(), flowParams);

2、监听器变量新增FlowParams字段

ListenerVariable监听器变量新增FlowParams字段,方便开始监听器全局传递参数

@Component
public class GlobalStartListener implements Listener {


private static final Logger log = LoggerFactory.getLogger(GlobalStartListener.class);

/**
 * 设置办理人id、所拥有的权限等操作,也可以放到业务代码中办理前设置,或者局部监听器
 * @param listenerVariable 监听器变量
 */
@Override
public void notify(ListenerVariable listenerVariable) {
log.info("全局开始监听器");

FlowParams flowParams = listenerVariable.getFlowParams();
LoginUser user = SecurityUtils.getLoginUser();
// 设置当前办理人id
flowParams.setHandler(user.getUser().getUserId().toString());

// 设置办理人所拥有的权限,比如角色、部门、用户等
List permissionList = flowParams.getPermissionFlag();
if (StringUtils.isEmpty(permissionList)) {
permissionList = new ArrayList<>();
}

List roles = user.getUser().getRoles();
if (Objects.nonNull(roles)) {
permissionList.addAll(roles.stream().map(role -> "role:" + role.getRoleId()).collect(Collectors.toList()));
}
permissionList.add("dept:" + SecurityUtils.getLoginUser().getUser().getDeptId());
permissionList.add(user.getUser().getUserId().toString());
flowParams.setPermissionFlag(permissionList);

log.info("全局开始监听器结束;{}", "开启流程完成");
}
}

3、条件表达式默认支持spel

springboot项目的条件表达式默认支持spel

  • 前端配置如#{@user.eval(#flag)}表达式,入库前要拼接前缀,方便区分表达式类型,最终为@@spel@@|#{@user.eval(#flag)}
  • #flag为变量和以下方法入参命名一致,可不设置入参
@Component("user")
public class User {

/**
 * spel条件表达:判断大于等4
 * @param flag 待判断的字符串
 * @return boolean
 */
public boolean eval(String flag) {
BigDecimal a = new BigDecimal(flag);
BigDecimal b = new BigDecimal("4");
return a.compareTo(b) > 0;
}
}

/**
 * 新增OA 请假申请
 *
 * @param testLeave OA 请假申请
 * @return 结果
 */
@Override
public int insertTestLeave(TestLeave testLeave, String flowStatus)
{
FlowParams flowParams = FlowParams.build().flowCode(getFlowType(testLeave));
// 流程变量
Map variable = new HashMap<>();
variable.put("flag", String.valueOf(testLeave.getDay()));
flowParams.variable(variable);

Instance instance = insService.start(id, flowParams);
return instance != null? 1 : 0;
}

warm-flow介绍

[!IMPORTANT] Warm-Flow国产工作流引擎🎉,其特点简洁轻量但又不简单,五脏俱全,组件独立,可扩展,可满足中小项目的组件。

  1. 简洁易用:只有7张表,代码量少,可快速上手和集成
  2. 审批功能:支持通过、退回、任意跳转、转办、终止、会签、票签、委派和加减签、互斥和并行网关
  3. 监听器与流程变量:支持五种监听器,可应对不同场景,灵活可扩展,参数传递,动态权限
  4. 流程图:流程引擎自带流程图,可在不集成流程设计器情况下使用
  5. 条件表达式:内置常见的和spel条件表达式,并且支持自定义扩展
  6. 办理人变量表达式:内置${handler}和spel格式的表达式,可满足不同场景,灵活可扩展
  7. orm框架扩展:目前支持MyBatis、Mybatis-Plus、Mybatis-Flex和Jpa,后续会由社区提供其他支持,扩展方便
  8. 数据库支持:目前支持MySQL 、Oracle 和PostgreSQL,后续会继续支持其他数据库或者国产数据库
  9. 多租户与软删除:流程引擎自身维护多租户和软删除实现,也可使用对应orm框架的实现方式
  10. 支持角色、部门和用户等权限配置
  11. 同时支持spring和solon
  12. 兼容java8和java17,理论11也可以
  13. 官方提供基于ruoyi-vue封装实战项目,很实用

演示地址

  • admin/admin123

演示地址:http://www.hhzai.top

官网

http://warm-flow.cn


相關推薦

2024-10-25

y> <groupId>io.github.minliuhua</groupId> <artifactId>warm-flow-plugin-ui-sb-web</artifactId> <version>1.3.0</version> </dependency> 2. 后端放行部分路径 1、这两个路径需要放行,否则无法访问,/warm-flow-ui/**, /warm-flow/

2024-08-20

 warm-flow1.2.4版本更新 主要内容,具体详情和升级注意事项,请查看官网更新记录 [feat] 激活和挂起 [feat] 不同节点也支持配置审批表单路径 [feat] 支持接收外部流程状态,支持流程状态扩展 [feat] 新增spel条件表达式

2025-03-28

Warm-Flow过去、现在和未来都不会有商业版 Warm-Flow从24年2月加入Dromara开源社区,也正是由于加入他,Warm-Flow才等到更多人的关注和帮助。 同时吸引了不少贡献者,有的也成为了Warm-Flow的成员。 因此为了回馈大家,也是

2024-06-29

warm-flow1.2.0重大更新 本次版本改动比较大,带来了大家期待已久的会签、票签、转办、oracle和pg数据库适配等,并且做了相应的代码重构。也由于改动比较大,如果发现问题,可以及时提交issue,如果能帮助解bug和pr,非常感谢

2024-03-28

:778470567,微信:warm-houhou git地址:https://gitee.com/warm_4/warm-flow.git 已完成计划 v1.1.2 流程定义新增复制按钮 补齐sql脚本,完善文档 跳转条件获取方式变更为流程变量 感谢@Holly 监听器变量新增返回结点信息 感谢@Hol

2024-08-29

warm-flow 1.2.6版本更新 本次改动 流程状态:可接收外部传递,可以支持字符串 新增api:增加获取下个节点信息 id生成:支持其他位数的id,可以前端精度问题的序列化处理 v1.2.6 2024-08-28 【升级注意事项】 执行升级

2024-03-23

增加监听器,参数传递 git地址: https://gitee.com/warm_4/warm-flow.git demo项目: springboot:RuoYi-Vue-Warm-Flow |演示地址 solon:warm-sun |演示地址 快速开始 在开始之前,我们假定您已经: 熟悉 Java 环境配置及其开发 熟悉 关

2024-04-18

欢迎使用使用warm-flow监听器 更新记录 v1.1.5 支持自定义填充 新增配置文件,部分功能可配置 引入日志门面 v1.1.42 修复并行网关后面没有中间节点 修复开始任务记录代办,为保存流程状态 新增链式查询排序

2025-03-28

springboot-admin 3.4.1 => 3.4.2 修复重新登录404问题 update warm-flow 1.6.6 => 1.6.8 update mybatis-plus 3.5.10 => 3.5.11 update snailjob 1.3.0 => 1.4.0 update springboot-admin 3.4.2 => 3.4.5 update sms4j 3.3.3 => 3.3.4 功能更新 update 优

2024-09-21

无缝集成到项目中。 基于 SpEL(Spring Expression Language) 表达式,支持复杂的校验逻辑。 支持调用 Spring Bean,可在表达式中使用注入过的 Spring Bean。 校验时基于整个对象,支持对象内字段间的校验逻辑。 支持自定义校验注

2025-03-29

注注解 无需再找真实mapper标注 重写工作流模块 接入warm-flow工作流 移除flowable工作流(过于复杂 用不明白的人太多) 依赖升级 update springboot 3.2.11 => 3.4.4 update springboot-admin 3.2.3 => 3.4.5 修复重新登录404问题 update m

2024-03-01

不同orm框架和数据库扩展 git地址:https://gitee.com/warm_4/warm-flow.git demo项目: springboot:hh-vue |演示地址 solon:warm-sun |演示地址 快速开始 在开始之前,我们假定您已经: 熟悉 Java 环境配置及其开发 熟悉 关系型 数据库

2023-12-12

引擎 文档 源码 在线体验 模板性能测试 表达式引擎性能测试  性能优化指南  本次调整 *  修复自从2019年Beeetl2升级到Beetl3,不支持自定义方法提供的Context参数问题修复 public class MyUtil{ // 模板中 $

2025-04-16

SpEL Validator,一个基于 Spring 表达式的参数校验框架,用起来有点像 jakarta.validation,但语法更自由,表达力更强,支持各种复杂场景的参数校验。 这次 SpEL Validator 更新了一个实用又温柔的更新:支持国际化消息(i18n)啦!(