首页 > 编程知识 正文

动态表单思路,activiti表单设计器

时间:2023-05-05 18:37:40 阅读:13305 作者:2591

动态表单的意义

对动态表单的探讨现在越来越多。 这是因为,除了表单在信息管理系统中的重要作用外,基本上只要采用表单流程就能够实现OA系统。 但是,很多表格和易更改性会让开发人员疲惫不堪。 为了让开发人员专注于业务流程,让系统操作员参与表单的管理,出现了动态表单技术。

表单和流程通常构成信息管理系统。

在信息管理系统的探索中发现,根据业务的量和成熟度可以将业务系统分为大业务系统和小业务系统。 大业务具有业务量大、成熟稳定的特点。 小业务大部分也是新业务,具有业务量小、动态变化的特点。 这些特点主要体现在业务流程和表单的不同。

新业务往往没有适当的系统支持。 因为新业务的特性是市场前景不明、业务量少、表单和业务流程都随着业务的发展而不断变化,越是具有快速成长性的新业务,变化就越多。 为新业务开发独立的系统支持,从业务运营者的角度来看成本较高,从系统开发人员的角度来看难度较大。 通常,只有在新业务逐渐发展、逐渐稳定、业务量上升、成为大业务时,才能考虑建立独立的系统加以支持,或者移植到原来的大业务系统中。 因此,对许多新业务的系统支持很弱。

目前,由于新业务没有系统支持,大多采用各种表格方式进行管理,单个业务的处理通过表格进行。 当然比纸制先进。 但是,无序和低效表现得比较明显。

从技术上讲,开发新的业务系统需要解决可定制表单和流程的技术难题。 本文介绍如何为不断变化的表单提供解决方案。 我们发现很多业务都是以表格为主导的,比如申请开始业务并填写申请书,实施业务并填写施工单等。 但是,随着业务的发展,这些表格包括字段和显示格式。 很明显,固定表单的开发不能满足这类用户的业务需求。 作为软件开发人员进行需求分析时,希望通过要求用户签字确认来限制用户需求的变化,这是没有道理的,技术实际上并不服务于生产。 那么,我们提出了一个动态表单,如何在新业务发展阶段支持业务中不断变化的表单。动态表单的实现思路

分析一个表单,主要包括字段、数据和表示形式三个要素。 数据和字段成对显示,可以设置格式并保存到数据库或xml文档中。 表现形式可以采用html作为表单模板。 目前,html功能强大,可以呈现复杂的表格。 在没有办公自动化系统的时候,大多数表单都是以word或excel格式创建的,他们具有另存为html的功能。

设计动态表单模型,基本思路应该是数据与表示的分离。 忽略表现层,在一个表单中包含的几个字段和填写的数据。 动态是指这些字段名可能会发生变化,数量可能会发生增减。

如何实现表现层? 一种想法也是动态地生成表现层。 实现表单设计器,将所需的字段类型从字段库中拖动到适当的位置,保存生成表单,并允许系统从此表单中输入数据。 但是,即使我们能够完美地制作这个设计师,定义表现层的这个过程也非常繁琐,可能还需要考虑印刷的效果。 所以对于复杂的表格,这个方法是不可取的,必须改变想法。

从现状来看,由于excel表格已经存在,所以表现表示已经确定。 这是静态的。 可以插入字段名标签和数据项标签,并进行少量修改以适应动态表单字段名和数据项。 然后实现“成形解析器”。 从该预定义模板中提取字段名和数据项生成动态表单,并将该模板作为展示页面。 从用户交互的角度来看,基于现有的excel表单进行设计显然很简单,即使是新表单,在excel中设计界面也比我们实现的设计师更简单、更准确,还有电缆打印效果。 从实现来看,动态表单解析器比设计器更简单,更符合需求。 解析器的想法是可取的。

解析器的实现是解析特殊处理的html文件,在技术上可以使用强正则表达式。

数据标签的设计

生活中我们需要使用各种表格,填写各种表格。 表单的作用是以一定的格式填写数据并组织数据。 忽略表示形式(如排序顺序),表单由多个字段名和要紧跟在其后输入的数据组成,字段和数据始终一一对应。 需要输入的数据有多种类型,但常用的是文本、单选和多选。 在设计动态表单解析器时,必须使用特定字符组成的标签来表示字段、数据字段和各种类型的数据字段。 我们在总结html分析的实践中,总结出了以下比较合适的标记表示。

文本框样式:“#字段名#”@ @

单选按钮样式:“#字段名# @a1; a2; a3@

复选框样式: #字段名# @b1、b2、b3@

文本字段样式: #字段名# @textarea@

在同一表格中应该避免使用相同的字段名; “#”之间的字段是系统识别的字段。 “#”和“@”对字段名称和输入字段必须是左右数组的关系,“#”和“@@”都必须是左右数组。

考虑多个表单之间可能存在的数据继承关系。 为了便于填写,我希望您填写表格。对于b,一些数据将从填写好的表格a继承。 两个表单的#字段名#必须相同。

考虑到统计和打印显示查找等需要。需要把一些特殊的字段定义成关键字。在设计表单时候要字段名称要与关键字保持一致。



表单数据的查询
  动态表单如何实现方便的查询。比较动态表单的数据和固定表单的数据结构,一个固定表单是存放一条记录,这条记录是包含了表单内的n个字段,而一个动态表单,是一个字段一条记录,所以有n条记录。所以针对动态表单的查询,是需要牺牲效率。如何提高效率,可以设置一些关键字段,这些字段和表单信息在一起。针对关键字段的查询效率就高很多了。



动态表单之间的关系
  假设,一个业务进程有AB两个表单。为方便使用,A表单中某些字段的数据(比如业务编号)填写完后,B表单中相同字段需要继承下来。如何解决这个问题。在制作表单模板的时候,需要注意的是相同字段名称的书写方式要相同,比如不能多一个空格之类的。然后在程序实现B表单的填写时候读取A表单的数据,在相同字段对应的位置显示。


动态表单的局限性
  动态表单可维护性好,可以在很多信息管理系统中得到应用。但是毕竟是动态的,要损失掉效率。当系统数据量大,而且业务及表单结构稳定的情况下,固定表单是更好的方式。所以动态表当的适用范围是,是具有业务量小和动态多变的特点的业务系统,通常是一些新业务或是小业务。

动态表单的特殊应用
  假设我们只需关注字段和数据,而不必关注表单的表现形式,或只需要简单的按顺序排列字段就可以满足需要。也没有复杂的业务的概念,表单之间没有复杂的数据继承的关系,独立表单就可以作为业务的流转实体。这样就可以去掉了表单模板的部分和业务概念的部分,这个动态表单模型就更加简化。只需要操作Form,FormPattern,FormData,Field四个对象就可以了。这个模型的应用还是广泛存在的,比如学生的档案信息。

动态表单数据库设计

业务表t_service
一个业务包含了多个工单样式
表字段 
id:业务编号
departmentId :业务管理单位(中心节点)
serviceName:业务名称 
serviceType:业务类型,初始化14种业务
formPatternCount:工单样式数量,默认0 
pictureFilename:业务流程图片文件 
isAnnexAllowed:是否允许上传附件;0不允许,1表示允许
workingDay:任务计划总施工时间 
version:版本号。定义业务名称相同时候提示并自动生成一个新的版本,如果存在新的版本则在申请业务的时候给出最新版本。统计报表按业务名称相同 。 定义一个新版本的业务,旧版本自动作废。
Locked: 是否锁定,锁定后不能被申请 
creator:创建人
dateCreated:创建时间
dateUpdated:更新时间,字段更新,表示表单也更新, 
modifier:修改人


工单样式表t_formPattern
记录表单样式
根据模版生成表单样式。
表字段 
id:编号
templateId:模版编号,空或-1或模版不存在也表示不使用模版
formPatternType:表单样式类型,申请单 applicationForm,施工单 workingForm
formPatternName:表单名称
serviceId:业务编号,在系统中需要选定业务上传模版生成表单样式。 creator:创建人
dateCreated:创建时间
dateUpdated:更新时间,字段更新,表示表单也更新, 
modifier:修改人

工单表t_form 
表单实体,继承自表单样式,可以填写数据。 
申请单相对与一个业务是唯一的,如果是工单,没有状态。
表字段 
id:表单编号,系统自动生成的流水号
formPatternId:表单样式编号
serviceId:业务编号,来自formPattern.serviceId,为了查询方便增加
formNumber 工单业务编号,工单编号是实际流转中的工单唯一标识。实施管理员输入,如果已经存在相同编号,系统需要提醒 
applicationId:申请(单)编号,表示该表单对应的申请单编号,来自Form.id and formPattern.formPatternType= applicationForm creator:创建人
dateCreated:创建时间
dateUpdated:更新时间,字段更新,表示表单也更新, 
modifier:修改人

字段表t_field 
记录表单定义的字段。字段包含有类型,枚举型数据去字点表查
表字段 
id:编号
formPatternId:表单样式编号
filedName:字段名称,从模版中提取出来
fieldTag:数据标签,用于与模版上的标签匹配,如果是 @@表示,使用序列关联
inputType:字段输入类型,输入框 text,下拉框(枚举型)select。单选radio,多选checkbox 
creator:创建人
dateCreated:创建时间
dateUpdated:更新时间,字段更新,表示表单也更新, 
modifier:修改人

模版表t_template 
定义表单的模版,表单通过模版打印。 
通过excle导出html文件,上传。
样式规则:
字段名称使用“#字段名称#”表示
字段名称对应的填写数据处使用“@@”表示
如果是枚举型的字段使用“@枚举域1; 枚举域2; 枚举域3@”表示
表字段 
编号id
模版名称templateName
模版路径filename
原文件名称sourceFilename 
creator:创建人
dateCreated:创建时间
dateUpdated:更新时间,字段更新,表示表单也更新, 
modifier:修改人

数据表t_formData 
用于存放字段内的数据,字段内容支持最大1000个字符
表字段 
id:编号
fromId:表单编号。 
fieldId:字段编号
content:数据内容,支持最大1000个字符 
creator:创建人
dateCreated:创建时间
dateUpdated:更新时间,字段更新,表示表单也更新, 
modifier:修改人

T_keyfield关键字段表 
需要中fromdata.content表中读到数据利用触发器tr_formdata_keyfield写到form表中去,
表字段
Id
KeyfieldName:关键字段名字,例如“#工单编号#”
mappingTable:对应表,例如“t_form,t_application”
mappingField:在t_Form表中对应的字段 例如“formNumber”
mappingCondition:表的条件,例如where id = v_formid and id<>applicationid;
disable:是否执行,1表示执行,2表示不执行
如果需要更新两个表,写两条记录,如果没有对应表则不其作用
触发器代码,例如
if v_fieldname='#工单编号#' then
update t_form
set formnumber = v_content,
modifier = v_modifier,
dateupdated = sysdate
where id = v_formid and id<>applicationid;
end if;
if v_fieldname='申请单号#' then
update t_form
set formnumber = v_content,
modifier = v_modifier,
dateupdated = sysdate
where id = v_formid and id=applicationid;
update t_application
set applicationnumber = v_content,
dateupdated = sysdate,
modifier = v_modifier
where applicationid = v_formid;
end if;




 

 

转自 : http://www.chasion.com/freeform.asp

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。