Flowable6.8-表单信息的存储 (表单的数据回显在下篇讲述)

1.为何使用表单?

我的简单理解为表单就是将简单的业务存储在整个流程中,随去随用随改。并且可以配合条件表达式使用,也可以单纯作为用户信息的流程所展示。

2.表单的语言

在我的项目中,表单是由前端语言决定的,分为Vue和React两个版本。当前项目使用的技术是React。(如果需要Vue的表单、相关处理工具类可以私信我)

3.表单数据的存储

3.1.设计表单

在一个工作流中,我们首先需要经历【设计流程---->部署流程----->新建流程】这三个步骤

表单在设计流程的时候由设计者选择表单(在我当前的项目中,流程启动节点必须绑定表单)

项目中同时提供一个表单设计模块供用户自定义表单,其中包含表单样式如:长宽高、图标、是否禁用、隐藏、默认值等操作

其中重要一点则是表单的每一个元素都有一个单独的元素key,该key在流程启动的时候存储至流程中,所以我们可以在流程中任何地方获取到这个表单中填写的数据.

在部署流程的时候,将流程选择的表单新增添加至表单流程关联表,并且将表单的信息也存储下来,这样如果后期表单的样式变了不会影响之前的表单

3.2发起流程时表单的作用

在新建流程的时候,将我们设计的表单展示出来供用户填写相关信息

在上述中我说过,一个表单的每一个元素都有一个单独的key,用户填写的数据则是value。

所以表单实际上就是一个Map<key,value>,传值的时候后端的的确是用一个map来接收

提交后前端传值

这个审核人填写的1,13代表的是用户的userId,此处前端还没写好所以有点简陋,我们不要在意这么多

后端接收参数

所以在流程新建的时候,我们获取到了表单的信息后直接存储至当前流程中。

runtimeService.startProcessInstanceById(procDef.getId(), variables);
调用该API即可发起流程,当然发起流程的方式还有很多,比如用流程key启动runtimeService.startProcessInstanceByKey()

这个Map就会被交给框架处理,用来保存变量,当前这个map的作用不仅是用来存储表单的值,也可以用来替换BPMN中的占位符

我在表单中设计了一个审核人的元素,该元素的key和这个bpmn中的占位符是一致的。所以在流程启动的时候可以直接进行替换,将此处的用户替换为我选择的审核人userId。

我们来看一下bpmn对应的xml文件

所以表单的用户不仅仅可以让流程中用户展示的信息好看,更重要的是可以使流程更加灵活,还可以配合条件表达式使用(上篇我有讲述过地址为:https://blog.youkuaiyun.com/Russell_b/article/details/140120998?spm=1001.2014.3001.5501

4.流程启动后表单及相关数据存储

流程启动后,表单和相关的数据就存储至act_ru_variable表中

可以看到其中有TYPE_和NAME_字段,该字段分别为数据类型和数据名称。

下方的TEXT_则是数据值。

我们在当前流程中,只需要根据流程业务实例ID就可以获取到当前流程中所包含的所有变量,也就是根据PROC_INST_ID_。

如果流程中使用了监听器,在监听器实现 ExecutionListener接口 后重写notify方法后,该方法的参数也可以获取。

该参数提供了许多API

获取当前流程所有的变量
Map<String, Object> variables = execution.getVariables();

获取指定变量的值
execution.getVariable(String key);

获取当前流程业务实例ID
String processInstanceId = execution.getProcessInstanceId();

设置流程变量的值(记住流程中变量就是一个map,map的特性需要知道,考验基本功的时候到了)
execution.setVariable(String key, OBject value);

下篇讲述表单的数据回显和历史流程的页面展示,如有需要请私信(无偿)

前端暂时还没写好,简略看下即可

### Flowable 中绑定表单的方法 在Flowable工作流引擎中,绑定表单是一个重要的功能,它使得流程中的不同节点能够与特定的表单相连接,从而方便用户输入必要的信息。这不仅提高了用户体验,也增强了系统的灵活性。 #### 使用内置表单属性进行绑定 一种简单的方式是在BPMN 2.0 XML文件中通过设置`formKey`属性来直接指定表单的位置或标识符[^4]。例如,在定义某个用户任务时: ```xml <userTask id="task1" name="填写申请表" flowable:assignee="${initiator}" formKey="applyForm"> </userTask> ``` 这里`formKey`指向了名为`applyForm`的表单资源。这种方式适用于简单的场景,其中表单相对固定不变。 #### 动态加载外部HTML/CSS/JS形式的表单 对于更复杂的需求,则可能需要采用动态加载的方式来处理。具体做法是先将所需的HTML、CSS以及JavaScript文件上传至Flowable UI平台下的表单管理区域[^5]。之后,在对应的任务节点配置里指明要使用的表单ID或者URL路径即可完成关联操作。 #### 利用Java API编程方式集成自定义表单逻辑 除了上述两种较为直观的办法外,还可以借助于Flowable提供的API接口编写专门的服务类来进行更加精细控制。比如可以在服务端渲染JSON格式的数据结构作为响应体返回给前端展示层,进而利用AJAX技术实现实时交互效果[^3]。 ```java // 创建一个新的流程实例并传入初始变量 ProcessInstance pi = runtimeService.startProcessInstanceByKey("my-process", variables); // 获取当前活动的任务列表,并附加额外参数(如表单链接) List<Task> tasks = taskService.createTaskQuery().processInstanceId(pi.getId()).list(); for (Task t : tasks) { Map<String, Object> formData = new HashMap<>(); String formUrl = "http://example.com/forms/" + t.getTaskDefinitionKey() + ".html"; formData.put("formUrl", formUrl); // 将表单地址存入任务上下文中以便后续调用 taskService.setVariables(t.getId(), formData); } ``` 以上三种途径均可有效达成Flowable工作流引擎同各类表单之间的紧密耦合关系,开发者可以根据实际项目需求选取最适合的一种方案实施应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值