V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ezeroone
V2EX  ›  程序员

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

  •  
  •   ezeroone · 2022-05-15 00:33:55 +08:00 · 1728 次点击
    这是一个创建于 953 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    我想到了三种方式:

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

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

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

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

    有些审批流程,例如发起调岗、加工资这种要涉及多张业务表,确实适合采用方案一
    pkupyx
        7
    pkupyx  
       2022-05-15 13:53:22 +08:00
    工作流引擎?看看 jbpm 或者 activiti 呗。
    kaf
        8
    kaf  
       2022-05-16 10:03:20 +08:00
    @ezeroone 其实看你业务场景,一个 oa 流程中表单对象就是他填的内容,数据库字段可能还有他的关联流程字段,起草人等字段,这个流程审批生效过后,比如你这个用户需要关联其他服务做业务,最好再创建一个表,拷贝关键的用户属性字段过去,而像一些请假条,加班申请这种,本身就是一个归档文档,有扩展业务也只是单独查文档,就没必要再单独复制
    kekeones
        9
    kekeones  
       2022-05-20 00:40:42 +08:00
    直接在表单加状态,表单和流程分开
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   903 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:03 · PVG 06:03 · LAX 14:03 · JFK 17:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.