赞
踩
我的简单理解为表单就是将简单的业务存储在整个流程中,随去随用随改。并且可以配合条件表达式使用,也可以单纯作为用户信息的流程所展示。
在我的项目中,表单是由前端语言决定的,分为Vue和React两个版本。当前项目使用的技术是React。(如果需要Vue的表单、相关处理工具类可以私信我)
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.csdn.net/Russell_b/article/details/140120998?spm=1001.2014.3001.5501)
流程启动后,表单和相关的数据就存储至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);
下篇讲述表单的数据回显和历史流程的页面展示,如有需要请私信(无偿)
前端暂时还没写好,简略看下即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。