当前位置:首页 » 《关注互联网》 » 正文

Flowable框架中的【表单】

21 人参与  2024年09月26日 16:40  分类 : 《关注互联网》  评论

点击全文阅读


关于流程中,必不可少的一处就是表单。无论是开始表单还是任务表单,无论是VUE的还是react语言的。表单是工作流中必不可少的一处。之前我项目使用的是activiti7框架开发的一套工作流,后来感觉不是很好用于是就换成了flowable6.8版本。activiti7框架中使用的表单是手搓的,也就是直接在流程设计中将表单粗略写出来,然后再做回显,这种方式显然很蠢。于是在换成flowable6.8的时候我将表单单独抽离出来使他更完善。

1.自定义表单

这是我项目大佬移植过来的一个React语言的一个自定义表单界面。我们可以根据流程自定义表单样式,如长宽高以及表单的具体字段设置。

我们可以给表单设置默认值,设置key,设置默认值,设置是否禁用,甚至隐藏。

KEY:在整个流程中都起到了至关重要的作用后面会提到。

下图是自定义表单对应的JSON格式,用于我们后期回显数据使用

2.数据库中的表单表

我们需要一张表用来存储自定义的表单

form_id:主键ID

form_name:表单名

content:上图的json格式

3.流程中使用表单

在我们设计好表单后,我们就可以在流程中使用。

在我当前项目中规定开始节点任务节点可以使用表单,其他节点无法使用,并且开始节点必须有表单,任务节点可以没有

此时当我们选择好表单后可以查看对应的bpmn文件(也就是该流程图对应的xml文件)

如图所示,可以看到我开始节点和另外两个任务节点都设置了表单。

flowable:formKey="key_1805806756846706692"

注意:formkey:"key_180...."

        此处对应的就是表单,但是我设计的表单中并没有key_作为前缀。这是交由前端设置的前缀。

4.流程部署时存储表单数据

在设计完流程并且选择好表单后,我们就可以保存该流程然后部署流程

但是常规的流程部署是调用框架的API完成的,下图中的model参数是

Model model = repositoryService.getModel(modelId);该方法查询回的一个模型对象

在部署时我们需要将该流程绑定的表单也存储起来,这时候我们就有需要表单和流程部署表(简称表单部署表)的中间表用来存储该数据。

deploy_id:流程的部署ID

form_key:我们自己画的表单的主键ID

node_key:流程节点id

form_name:表单名称

node_name:流程节点名称

content:表单的json格式。

此时,我们需要在代码中实现一个流程和表单的绑定,也就是往表单部署表中增加数据。

代码只简略复制一些有需要可以私信我

/** * 保存流程实例关联表单 * * @param deployId  部署ID * @param bpmnModel bpmnModel对象 * @author  */@Overridepublic boolean saveInternalDeployForm(String deployId, BpmnModel bpmnModel) {    List<WfDeployForm> deployFormList = new ArrayList<>();    // 获取开始节点    StartEvent startEvent = ModelUtils.getStartEvent(bpmnModel);    if (ObjectUtil.isNull(startEvent)) {        throw new RuntimeException("开始节点不存在,请检查流程设计是否有误!");    }    // 保存开始节点表单信息    WfDeployForm startDeployForm = buildDeployForm(deployId, startEvent);    if (ObjectUtil.isNotNull(startDeployForm)) {        deployFormList.add(startDeployForm);    }    // 保存用户节点表单信息    Collection<UserTask> userTasks = ModelUtils.getAllUserTaskEvent(bpmnModel);    if (CollUtil.isNotEmpty(userTasks)) {        for (UserTask userTask : userTasks) {            WfDeployForm userTaskDeployForm = buildDeployForm(deployId, userTask);            if (ObjectUtil.isNotNull(userTaskDeployForm)) {                deployFormList.add(userTaskDeployForm);            }        }    }    // 批量新增部署流程和表单关联信息    return saveBatch(deployFormList);

上文的代码就是将部署的流程ID和表单存储起来,我们看一下数据库

注意:content:就是我们设计表单的那个json格式。

我们需要每次部署的时候都将该表单的json格式保存一份,这样为了防止表单后期被修改导致我们获取不到之前的样式。

5.发起流程

发起时,我们流程设置的开始表单则会弹出,我们需要填写表单的相关数据。这些输入框我们可以在表单设计的时候自定义哪些必填哪些非必填

当我们提交后流程启动,此时在待办处可以看到我们填写的数据。

(下篇会讲解表单的数据存储和回显如何实现)


点击全文阅读


本文链接:http://zhangshiyu.com/post/164968.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1