当前位置: 首页 > 后端技术 > Java

流程表初体验

时间:2023-04-02 10:36:43 Java

@[toc]有小伙伴在星球上催我好几次了。今天宋哥就来和大家聊一聊流程中的表格。1.表单分类整体上,我们可以将表单分为三种不同的类型:动态表单:在这种表单定义方式中,我们可以配置表单中各个字段的可读性、可写性和必填信息,但不能定义一个完整的表单页。外部表单:对于外部表单,我们只需要定义表单的key即可。至于这个key对应的表单是什么样子的,由开发者维护。内置表单:这是内置的表单定义和渲染引擎。松哥用之前的一个案例,不用写代码,看看Flowable给我们提供了哪些功能?这是本文中使用的表格。另外需要小伙伴们注意,Flowable中有很多不同类型的节点,但是只有起始节点和任务节点支持表单定义,其他节点不支持表单定义。2.动态窗体今天我们先来看看动态窗体的玩法。假设我有如下的请假流程:在第一个任务节点,需要填写请假的基本信息,然后我们选中这个节点,然后点击动态表单属性,如下图:然后就可以开始动态表单属性的配置了:我这里一共配置了四个属性。这些属性的含义应该很容易理解,就不一一赘述了。接下来,让我们下载流程图。下载流程的XML文件后,我们可以看到UserTask节点中多了flowable:formProperty标签。现在,如果我想将UserTask节点中的动态表单属性复制到启动节点中,直接复制即可,如下:<flowable:formPropertyid="days"name="daysofleave"type="long"required="true"><可流动的:形式Propertyid="days"name="请假天数"type="long"required="true">可以看到startEvent和第一个userTaskNext中有flowable:formProperty标签,根据我们之前说过,让我们部署这个过程。部署完成后,我们可以查询到流程中的动态表单信息,如下:@AutowiredFormServiceformService;@Testvoidtest01(){();StartFormDatastartFormData=formService.getStartFormData(pd.getId());System.out.println("startFormData.getDeploymentId()="+startFormData.getDeploymentId());System.out.println("startFormData.getFormKey()="+startFormData.getFormKey());ListformProperties=startFormData.getFormProperties();for(FormPropertyfp:formProperties){字符串值=fp.getValue();字符串id=fp.getId();布尔可读=fp.isReadable();布尔可写=fp.isWritable();布尔值required=fp.isRequired();字符串名称=fp.getName();FormType类型=fp.getType();字符串键="";如果(输入安装anceofEnumFormType){key="values";}elseif(typeinstanceofDateFormType){key="datePattern";}对象信息=type.getInformation(key);logger.info("value:{},id:{},readable:{},writeable:{},required:{},name:{},info:{}",value,id,readable,writable,required、姓名、信息);}}小伙伴们可以看到,这个查询是通过流程定义来查询的,所以这里查询的信息其实和流程实例无关,只是简单的查看启动节点需要输入哪些动态表单,以及这些动态表单的类型.最终输出日志如下:3.用一个表单启动实例动态表单,其实有点像普通变量。在启动的时候,我们可以通过表单服务类来启动。代码如下:@Testvoidtest02(){ProcessDefinitionpd=repositoryService.createProcessDefinitionQuery().processDefinitionKey("FormDemo01").latestVersion().singleResult();Mapvars=newHashMap<>();vars.put("开始时间","2022-10-1010:10");vars.put("结束时间","2022-10-1210:10");vars.put("原因","玩两天");vars.put("天数","3");ProcessInstancepi=formService.submitStartFormData(pd.getId(),vars);}如您所见,我们在这里使用formService.submitStartFormData方法启动流程实例。启动时传入vars变量,流程实例启动成功后,我们可以在ACT_RU_VARIABLE表中看到这些动态表单的信息。从这里你可以看到我们刚刚保存的数据。4.查询任务上的表单现在我们的流程已经到了提交请假申请的步骤了。当我们绘制流程图时,提交请假申请。此UserTask也具有动态形式。前面启动流程时传递的动态表单信息,现在已经传递到提交请假申请的步骤,我们可以通过以下方式查询:@Testvoidtest03(){tasktask=taskService.createTaskQuery().singleResult();TaskFormDatataskFormData=formService.getTaskFormData(task.getId());ListformProperties=taskFormData.getFormProperties();for(FormPropertyfp:formProperties){字符串值=fp.getValue();字符串id=fp.getId();布尔可读=fp.isReadable();布尔可写=fp.isWritable();布尔值required=fp.isRequired();字符串名称=fp.getName();FormType类型=fp.getType();字符串键="";if(typeinstanceofEnumFormType){key="values";}elseif(typeinstanceofDateFormType){key="datePattern";}对象信息=type.getInformation(key);登录fo("value:{},id:{},readable:{},writeable:{},required:{},name:{},info:{}",value,id,readable,writable,required,name,信息);}}可以看到,可以调用formService.getTaskFormData方法传入TaskId进行查询。这时候查询到的内容就会有价值:可能有朋友会说,这和使用变量不一样。啊,变量不也是一样吗?变量是分散的,形式是完整的。上面代码中,一个方法可以提取所有的表单信息,然后遍历即可。另外需要注意的是,如果提交请假单中的动态表单与启动节点中的动态表单不一致,则可以获取请假单节点中动态表单中的数据,其他数据无法获取通过表格。以上例为例,startEvent中有startTime、endTime、reason、days四个动态表单属性。如果请假申请提交中只有reason和days两个动态表单属性,那么只能获取这两个动态表单属性。,等动态表单属性可以通过变量获取。5、保存并完成对于UserTask上的表单,我们可以先通过以下方式提交表单数据:@Testvoidtest04(){Tasktask=taskService.createTaskQuery().singleResult();Mapvars=newHashMap<>();vars.put("开始时间","2022-10-1111:11");vars.put("结束时间","2022-10-1911:11");formService.saveFormData(task.getId(),vars);}该方法只保存动态表单变量,不完成当前Task。如果想在提交表单变量的同时完成当前UserTask,方法如下:@Testvoidtest04(){Tasktask=taskService.createTaskQuery().singleResult();Mapvars=newHashMap<>();vars.put("开始时间","2022-10-1111:11");vars.put("结束时间","2022-10-1911:11");formService.submitTaskFormData(task.getId(),vars);}这个方法会在提交表单变量的同时完成当前的UserTask。好了,这就是宋哥给大家介绍的关于动态表单的~动态表单的用法很简单,很多朋友不明白为什么要用表单,难道不能用变量吗?从技术上讲,变量当然是可以的,但是变量是一个一个的,是分散的,而形式是整体的,是作为一个整体来存储和检索的。只是这个。

最新推荐
猜你喜欢