美文网首页
一劳永逸的流程集成方案

一劳永逸的流程集成方案

作者: 爱余星痕 | 来源:发表于2019-10-13 09:14 被阅读0次

    外部系统需要对接流程引擎,多个表单总要对接多次,这个重复的工作量很多,这样会给开发带来很不方便的工作?
    有没有办法流程只集成一次就可以呢?
    或者有些人说,我用表单引擎就可以了。表单引擎确实是好东西,但万一没有呢,而且表单引擎对于页面有一定的局限性,且扩展,管理不方便。
    那怎么处理?
    回答之前先说明两件事情:

    1. 流程审批过程中的表单数据一般用于审批流程,只有流程结束后,表单数据才真正落地。所以一般流程中的表单数据,业务是不在乎的。
    2. 流程中的表单数据是变化的,不可能每个表单字段都映射到表的每一个字段中,所以从考虑通用性方案,全部表单数据都以大字段(text)存储.
      到这里,方案就很清晰了,流程业务表单的数据,我用一个大字段存储,无论他有多少个字段,我只放在一个text字段里。
      数据库表设计如下:
    字段 类型 描述
    id varchar(36) 主键
    instance_data mediumtext 表单内容
    status varchar(2) 表单状态
    form_url varchar(200) 表单URL
    form_id varchar(200) 表单ID,用来区分哪个表单,如加班及请假等
    attachment_id varchar(20) 附件ID

    后面就是以流程引将将表单的内容存储过来即好。
    也有人问,我还是想将大字段的内容存储进对应的表,怎么办?
    其实也有办法,在保存表单字段时,将字段内容广播出来即可
    示例代码如下:

       @Override
        @Transactional
        public OaWorkflowCommonInstance insert(OaWorkflowCommonInstance record) {
            this.mapper.insert(record);
            SpringContextUtils.getApplicationContext().publishEvent(new OaWorkflowCommonInstanceEvent(record, MethodType.ADD, record.getId()));
            return record;
        }
    
    
        @Override
        @Transactional
        public Integer update(OaWorkflowCommonInstance record) {
            Integer result= this.mapper.updateById(record);
            SpringContextUtils.getApplicationContext().publishEvent(new OaWorkflowCommonInstanceEvent(record, MethodType.UPDATE, record.getId()));
            return result;
        }
    

    这里插入更新时,都将表单数据广播出来,后面只要自己捕捉这个事件就可以了
    之后就自己写页面就可以了,后端基本上不用开发了。
    我用自己做的流程引擎写了两个示例,给大家示例一下,都只要写页面就可以了

    • 请假流程:


      image.png
    • 加班流程:


      image.png

      大家做流程集成时,参考这写方案就可以了。

    相关文章

      网友评论

          本文标题:一劳永逸的流程集成方案

          本文链接:https://www.haomeiwen.com/subject/sjdhmctx.html