一种基于Activiti的流程表单数据渲染和存取方法与流程

文档序号:21638723发布日期:2020-07-29 02:49阅读:1828来源:国知局
一种基于Activiti的流程表单数据渲染和存取方法与流程

本申请涉及activiti流程引擎,表单数据的存取以及动态表单的渲染方法。



背景技术:

基于activiti引擎的流程默认动态表单渲染方式,渲染时先去判断global变量中是否有表单变量的值,如果没有找到,则渲染失败。所以为了之后流程的节点渲染都成功,目前主要采用如下方法:

方法一是在流程开始时的启动表单就显示出所有的表单变量,继而初始化所有的表单变量;

方法二是动态表单中变量默认值使用空字符串表示。

方法一的缺陷是,如果之后的动态表单需要新增内容,那么需要修改启动节点的表单,进行表单变量的初始化,增加了修改表单的成本。

方法二的缺陷是,因为动态表单的变量默认值是空字符串,使用渲染表单方法也无法回显变量。因为表单中没有变量名称对应流程中的变量值,无法实现查看历史任务表单。



技术实现要素:

鉴于现有技术中的上述缺陷或不足,本发明提供了一种可以查看历史数据的基于activiti的流程表单数据渲染方法。

本发明采用的技术方案是:

一种基于activiti流程引擎的表单数据渲染方法,该方法为:一种基于activiti流程引擎的表单数据渲染方法,其特征在于,该方法为:渲染动态表单时,获取表单key和流程变量两个参数,并根据流程中的上下文以及表单key获取流程中的表单页面,其中,表单中的变量使用变量名表示,流程变量存储在global和task存储区中。然后根据变量名判断表单中定义的变量是否存在流程变量中。若存在则替换表单页面的变量,若不存在则将变量替换为空字符串,继而返回渲染的页面,完成渲染。

基于该渲染方法,可在流程中的任一节点都查看到之前所有已完成节点的表单内容,并且如果要在某个流程节点添加新内容,无需修改别的节点表单。

进一步地,所述渲染方法通过activiti流程引擎自定义的command机制建立任务实现。

进一步地,表单数据的存储具体为:

流程启动节点中,后端将表单变量存储在流程global中;任务节点中,后端将可编辑的表单变量存储在流程global中,同时获取所有的global变量并存在task中。其中,global变量以流程id和变量名作为key。

进一步地,所述流程变量可以为global变量或task变量,所述task变量以该节点所有变量的变量名和taskid作为key。

一种基于activiti流程引擎的表单数据存取方法,包括如下步骤:

(1)设置表单中的变量使其用变量名表示。

(2)使用者在前端发起流程。后端收到请求,使用表单key获取对应的表单并通过acitiviti流程引擎获取上下文的数据。后端数据中的变量名和流程id拼接构成global存储区的查询key,查看global存储区的变量。再根据变量名判断表单中定义的变量是否存在global存储区中:

a.若存在,取到对应的值,替换表单中的变量。

b.若不存在,则使用空字符串替换表单中的变量。

(3)后端完成表单中所有变量的替换,将渲染过的动态表单返回给前端,前端进行展示。

(4)使用者在前端展示的表单中编辑数据并提交表单,将表单变量传给后端。

(5)后端对表单变量进行处理:查看global存储区是否相应变量名对应的值.

a.若不存在,在global中创建该变量名,并且对应的value为表单对应的值。

b.若存在,直接将值更新为表单中的值。

(6)将该节点所有变量的变量名结合taskid,构建新的key,对应的value为变量名在global中的值。将键值对存入task中。

重复步骤2-6完成对流程中所有节点的数据存取。

进一步地,如果要查看历史节点数据,则在步骤2中,使用对应节点的task变量渲染表单即可,具体如下:

使用者在前端发起查看某一节点的历史数据。后端收到请求,通过acitiviti流程引擎获取上下文的数据。后端将数据中的变量名和taskid拼接构成task存储区的查询key,查看task存储区的变量。再根据变量名判断表单中定义的变量是否存在task存储区中:

a.若存在,取到对应的值,替换表单中的变量。

b.若不存在,则使用空字符串替换表单中的变量。

后端完成表单中所有变量的替换,将渲染过的动态表单返回给前端,前端展示该节点的历史数据。

有益效果:

本发明方法中,对每个表单中展示的内容不相同,而且可以根据需求经常变换表单内容。针对这种有变换表单内容需求类型的流程,查看每个任务的表单就是大众需求。本发明方法既可实现查看每个流程的历史任务表单,又可以最小成本的改变表单内容。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1为本发明一种可以查看历史数据的基于activiti的流程表单数据存取方案流程图。

图2为适合本方案的一种典型流程:入职流程。该流程中的人事、行政、it节点,根据实际情况有经常变动的需求,比如增加,减少页面的元素等。

图3为入职流程中的部门经理审批的表单页面。该表单页面上面部分表示不可编辑变量,下面部分表示可编辑变量。

图4为整个已完成入职流程的流程记录信息。点击查看按钮,可查看节点的历史表单内容。

图5入职流程中部门经理审批节点的历史表单内容。

具体实施方式

下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与发明相关的部分。

本发明提供了一种基于activiti流程引擎的表单数据渲染方法,该方法为:一种基于activiti流程引擎的表单数据渲染方法,其特征在于,该方法为:渲染动态表单时,获取表单key和流程变量两个参数,并根据流程中的上下文以及表单key获取流程中的表单页面,其中,表单中的变量使用变量名表示,流程变量存储在global和task存储区中。然后根据变量名判断表单中定义的变量是否存在流程变量中。若存在则替换表单页面的变量,若不存在则将变量替换为空字符串,继而返回渲染的页面,完成渲染。

使用该表单渲染方式,若其中一个流程节点需添加新内容,无需修改其他节点表单,直接修改对应表单内容即可。避免了使用activiti原生渲染方式时的报错问题。

优选地,所述渲染方法通过activiti流程引擎自定义的command机制建立任务实现。

自定义一个任务去渲染动态表单。自定义任务需要两个参数,一个为表单key,一个为流程变量。自定义任务根据流程中的上下文以及传入的表单key获取流程中的表单页面,再判断表单中定义的变量是否存在流程变量中。若存在则替换表单页面的变量,若不存在则将变量替换为空字符串,继而返回渲染的页面。

上述方法中,表单数据的存储具体为:前端将启动表单变量传给后端,后端将表单变量存储在流程global中;任务节点前端将可编辑部分的表单变量传给后端,后端将其存储在流程global中,同时获取所有的global变量并存在task中。其中,global变量以流程id和变量名作为key,每次存储在global都会覆盖之前的变量,在整个流程过程中,global变量都是唯一存在。不可编辑部分的表单变量不用传给后端,可以减少接口传输的成本。并且,本方法中,将每个任务节点获得的global变量备份至task中,每个task都可以存储一份task状态的全量流程变量。后端通过搜索表单key并使用task变量渲染表单返回给前端即可实现查看历史表单数据。

其中,表单中的变量名不能以空字符串表示,都用变量符号表示,如:${name},使用这个方式,在查看历史任务表单时,后端渲染表单,才会正确地回显出历史task变量。

另外,具体地,本发明还提供了一种基于activiti流程引擎的表单数据存取方法,图1为本发明一种可以查看历史数据的基于activiti的流程表单数据存取方法流程图,如图1所示,本方法包括如下步骤:

(1)设置表单中的变量使其用变量名表示。。

(2)使用者在前端发起流程。后端收到请求,使用表单key获取对应的表单并通过acitiviti流程引擎获取上下文的数据。后端将数据中的变量名和流程id拼接构成global存储区的查询key,查看global存储区的变量。再根据变量名判断表单中定义的变量是否存在global存储区中:

a.若存在,取到对应的值,替换表单中的变量。

b.若不存在,则使用空字符串替换表单中的变量。

(3)后端完成表单中所有变量的替换,将渲染过的动态表单返回给前端,前端进行展示。

(4)使用者在前端展示的表单中编辑数据并提交表单,将表单变量传给后端。

(5)后端对表单变量进行处理:查看global存储区是否相应变量名对应的值.

a.若不存在,在global中创建该变量名,并且对应的value为表单对应的值。

b.若存在,直接将值更新为表单中的值。

(6)将该节点所有变量的变量名结合taskid,构建新的key,对应的value为变量名在global中的值。将键值对存入task中。

重复步骤2-6完成对流程中所有节点的数据存取。

下面,结合具体的入职流程对本发明作进一步的说明。

如图2所示,为通过activiti流程引擎创建的入职流程,该流程中包括流程启动节点、部门负责人审批节点、it开通入职账号节点、行政办理入职手续节点、人事录入完整信息节点、it设备发放节点、it取消入职账号节点、创建oa账号等等,在创建流程时,每个节点均设置相应的表单key。每个页面上看到的字段都使用变量表示,如工位号${placenumber}等。使用者发起流程时,使用表单key获取对应的表单并通过acitiviti流程引擎获取上下文的数据。并通过本发明方法进行表单渲染并展示在前端,图3为部门负责人审批节点的任务表单页面,使用者在前端输入需要填写的信息后(图2中的资源分配)提交表单,将可编辑部分(图2中资源分配)的表单变量传给后端,后端将其存储在流程global中,同时获取所有的global变量并存在task中。由于每个节点的数据均备份至task中,可以查看每个节点的任务表单,如图3所示,为入职流程的流转记录,点击图中查看按钮,发起查看某一节点的历史数据,后端收到请求,通过acitiviti流程引擎获取上下文的数据。后端将数据中的变量名和taskid拼接构成task存储区的查询key,查看task存储区的变量。再根据变量名判断表单中定义的变量是否存在task存储区中:

a.若存在,取到对应的值,替换表单中的变量。

b.若不存在,则使用空字符串替换表单中的变量。

后端完成表单中所有变量的替换,将渲染过的动态表单返回给前端,前端展示该节点的历史数据,如图5所示。

通过以上方案,前端可以在如图3中的流转记录,点击图中查看按钮,通过该渲染方法,可以显示如图5中的历史表单内容。并且可以根据需求任意增删节点中的字段,而无需修改其他节点内容。比如图2入职流程中的人事录入完整信息节点中添加一个新的字段,则无需修改其他节点表单,直接修改对应表单内容即可。避免了使用activiti原生渲染方式时的报错问题。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1