向大家咨询一个流程引擎表单存储的问题

2022-05-15 00:33:55 +08:00
 ezeroone

用什么方式存流程审批的表单?求大佬赐教

现在在做 HRM 系统,使用 MySql ,当用户新增或编辑员工信息时,可以保存草稿或提交表单 。提交表单后通过流程引擎走审批流程,审批通过后向员工信息表写入。

问题是用户提交的表单该如何用数据库保存呢?

我想到了三种方式:

  1. 再建一套和员工信息表字段一样的表,用来存用户提交的表单和草稿。 问题是 员工信息有很多例如工作经历、附件这种一对多的关系,需要单独建表,而且 HRM 系统以后也会涉及很多审批流程,如果全都单独建一套表用来存表单,感觉维护起来会比较繁琐

2.不用建单独的表,直接在员工信息表里加状态字段,用来区分审批的表单、草稿和正式的员工信息。 问题是 这么做,就把表单、草稿数据和正式的数据混在一起,以后的所有查询都要带上状态字段了, 而且员工的工作经历、附件这类表是不是也要加上状态字段?

3.直接把用户提交的表单序列化成 JSON,存到一个单独的表 text 字段里。
问题是 表单字段多次迭代后,可能以前版本的表单会反序列化失败

1729 次点击
所在节点    程序员
9 条回复
acehowxx
2022-05-15 05:30:55 +08:00
就用 3 啊,多次迭代改需求的问题本来就管不了啊。定好规则,改的时候只能新加,不能修改就完事了。如果非要修改,说明白之前的会无法序列化显示就行了啊。2.0 的 api 不兼容 1.0 了的情况不有的是吗。
Chad0000
2022-05-15 08:01:42 +08:00
方案 3 ,同时加上版本号,这样使用对应的版本加载就可以。
potatowish
2022-05-15 09:16:38 +08:00
实际中使用方案二比较多。
只需要在员工信息表加状态,其他附加信息表不需要单独加状态,关联主表就好了。
用来审批、保存草稿、正式的数据混在一块这个说法不妥,你就把他们都当成正式数据就好了,即使是正式数据后面也可能会更改,不需要区分,只需要关注状态。
kaf
2022-05-15 11:07:19 +08:00
上家做 oa 引擎,表单就是表单,不耦合流程状态,流程流转的时候关联流程版本去变更流程状态。实现上面,抽象出流程,流程流转,表单三个主要对象来操作。草稿,审批,正式数据为同一张表,如果实际有需要可以流程结束之后把正式数据保存在需要的业务表里
ezeroone
2022-05-15 12:28:00 +08:00
@potatowish 感谢回答,确实不用在附加信息表单独加状态
ezeroone
2022-05-15 12:41:17 +08:00
@kaf 感谢回答,我理解的您提到的“正式数据”指的是审批通过之后的表单,业务表指的是我举例中的员工信息表?所以是方案一?

有些审批流程,例如发起调岗、加工资这种要涉及多张业务表,确实适合采用方案一
pkupyx
2022-05-15 13:53:22 +08:00
工作流引擎?看看 jbpm 或者 activiti 呗。
kaf
2022-05-16 10:03:20 +08:00
@ezeroone 其实看你业务场景,一个 oa 流程中表单对象就是他填的内容,数据库字段可能还有他的关联流程字段,起草人等字段,这个流程审批生效过后,比如你这个用户需要关联其他服务做业务,最好再创建一个表,拷贝关键的用户属性字段过去,而像一些请假条,加班申请这种,本身就是一个归档文档,有扩展业务也只是单独查文档,就没必要再单独复制
kekeones
2022-05-20 00:40:42 +08:00
直接在表单加状态,表单和流程分开

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/852879

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX