ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

JeecgBoot 工作流实战:用 Activiti 和表单设计器跑通一条请假审批流

JeecgBoot 工作流实战:用 Activiti 和表单设计器跑通一条请假审批流 JeecgBoot 工作流实战用 Activiti 和表单设计器跑通一条请假审批流【免费下载链接】jeecg-boot【低代码v2.0一句话即可生成整个系统】企业级AI低代码平台一键生成前后端代码甚至整个系统。 AI Skills 一句话画流程、设计表单、生成报表、大屏。内置 AI应用平台涵盖AI聊天、知识库、流程编排、MCP插件等兼容主流大模型。引领AI低代码「Skills 生成 → 在线配置 → 代码生成 → 手工合并-AI修改」开发模式解决 Java 项目 90% 重复工作提高效率又不失灵活。项目地址: https://gitcode.com/GitHub_Trending/je/jeecg-boot刚接手 JeecgBoot 想搭审批功能最容易卡住的地方是两件事Activiti 引擎怎么接进业务代码以及审批人打开任务时为什么看到的是一张空白表单。这篇文章就按落地一条请假审批流的真实路径把这两个问题一次讲透顺带把表单权限和几个高频坑一起处理掉。先想清楚这条审批流到底要什么业务诉求很朴素员工提交一张请假单填上姓名、天数、起止时间和原因审批人接到任务看到的必须是这张单据的完整内容而不是空壳流程走完单据状态同步更新。拆开看需要三块能力拼起来流程引擎Activiti 负责节点流转、任务分配和状态推进表单设计器JeecgBoot 内置的 Online 表单能力让单据结构可以在线配置、动态发布改字段不用重启业务实体你自己的表比如请假单负责存真实数据。仓库里已经有一条完整的参考实现就是流程测试模块jeecg-boot/jeecg-boot-module/jeecg-module-demo实体和服务都在 org.jeecg.modules.demo.test 包下后面所有代码都能在里面找到对应位置。建议直接拿它当模板抄。引擎怎么接依赖、建表一步到位依赖坐标很简单业务模块的 pom.xml 里加一行dependency groupIdorg.activiti/groupId artifactIdactiviti-spring-boot-starter/artifactId /dependencystarter 会把 Spring 集成配好基本不用写额外配置。建表不用手动拼脚本执行仓库里的初始化 SQL 即可——mysql -u root -p jeecg-boot/db/jeecgboot-mysql-5.7.sql这一步同时干了两件事业务表含 joa_demo建好Activiti 自己那套 ACT_ 开头的引擎表也一并建好省去了单独初始化引擎库的麻烦。请假单实体怎么设计表单和流程变量如何绑定先看实体 JoaDemo对应 joa_demo 表。核心就这几列private String name; // 请假人 private Integer days; // 请假天数 private Date beginDate; // 开始时间 private Date endDate; // 结束时间 private String reason; // 请假原因 private String bpmStatus; // 流程状态真正值得注意的不是字段本身而是bpmStatus 这个桥——它把业务表和流程引擎的状态串起来列表页靠它展示单据当前走到哪了。为什么表单数据要进流程变量因为 Activiti 的任务只认变量不认你的表。如果启动流程时不带数据审批人打开任务就只有空白表单。JeecgBoot 的做法是把实体序列化后塞进变量里审批端再取出来渲染MapString, Object variables new HashMap(); variables.put(formData, JSON.toJSONString(entity)); runtimeService.startProcessInstanceByKey(procDefKey, variables);用 JSON 而不是拼一堆零散变量好处是前后端交互直接透传以后表单加字段也不用改启动代码。启动流程放在 service 层参考 JoaDemoServiceImpl 的实现思路先按 id 查出实体把 bpmStatus 置为运行中再带着上面的变量调 runtimeService 启动entity.setBpmStatus(1); // 运行中流程生命周期用两个常量收口FLOW_STATUS_RUNNING运行中和 FLOW_STATUS_FINISH已完成。引擎状态和业务表的 bpmStatus 各记一份展示时以业务表为准即可。审批时表单权限如何控审批页打开表单不是无条件放行这里用到 CommonConstant 里的三个常量位置在 jeecg-boot/jeecg-boot-base-core 的 org.jeecg.common.constant 包DESIGN_FORM_URL_STATUS_PASSED表单 URL 授权已通过的状态值。校验时先查该表单 URL 的授权状态只有等于这个值才允许展示否则拒绝DESIGN_FORM_TYPE_MAIN主表类型DESIGN_FORM_TYPE_SUB子表类型。最后两个常量决定的是查哪张表——复杂业务常用主表 子表结构比如报销单 明细行类型不同查询路径就不同。校验本身不复杂核心就一句DESIGN_FORM_URL_STATUS_PASSED.equals(getFormAuthStatus(url))通过了才把表单内容交给审批页没通过就拦住避免越权看到不该看的单据。两个高频坑的排查思路坑一审批完表单数据没跟着变。根因通常是流程变量和表单数据两边各自更新、不同步。解法是在流程状态更新的方法里补一段同步逻辑让变量里的 formData 和表单表数据保持一致改完立刻验证一次审批 → 刷新单据的闭环。坑二子表数据在审批页查不出来。主表查询规则一般现成就能用但子表需要走表单设计器专用的关联查询规则按 DESIGN_FORM_TYPE_SUB 把子表和主表关联起来再查别拿主表规则硬套。收尾从请假单到你自己的单据建议把流程测试模块直接当模板新业务照抄实体结构和启动流程的写法只换字段和 procDefKey一天能跑通一条审批流。表单结构后续想加字段走 Online 表单设计器在线改、动态发布就行不用动代码、不用重启——这基本就是这套 Activiti 表单设计器集成方式最省事的用法。【免费下载链接】jeecg-boot【低代码v2.0一句话即可生成整个系统】企业级AI低代码平台一键生成前后端代码甚至整个系统。 AI Skills 一句话画流程、设计表单、生成报表、大屏。内置 AI应用平台涵盖AI聊天、知识库、流程编排、MCP插件等兼容主流大模型。引领AI低代码「Skills 生成 → 在线配置 → 代码生成 → 手工合并-AI修改」开发模式解决 Java 项目 90% 重复工作提高效率又不失灵活。项目地址: https://gitcode.com/GitHub_Trending/je/jeecg-boot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表