`
Merrygrass
  • 浏览: 166749 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

【转】动态表单设计与实现

    博客分类:
  • ui
 
阅读更多

 

动态表单的意义
  对于动态表单的探讨现在越来越多了。原因无非是表单在信息管理系统中的重要作用,基本上采用表单+流程就可以实现一个OA系统。然而数量众多的表单和易变动性让开发人员感到疲惫。为了让开发人员把注意力集中在业务流程上来,也可以让系统操作人员参与到表单的管理,就出现了动态表单技术。

信息管理系统

   通常情况下,表单加流程,就构成了一个信息管理系统。
   在对信息管理系统的探索中我们发现,按业务的量和成熟度,我们可以将业务系统是分为大业务系统和小业务系统。大业务具有业务量大且成熟稳定的特点。而小业务大部分也是新业务,具有业务量小和动态多变的特点。这些特点主要体现在业务流程和表单上的不同。

业务特点

   往往对新业务没有一个很好的系统支持,因为新业务的特性是市场前景不明,业务量小,表单和业务流程都随着业务的发展不断在变,越具有快速成长性的新业务可能变化更多。为一个新的业务开发一个独立的系统支持,从业务运营者角度看成本大,从系统开发者角度看难度更大。通常只有当新业务逐步发展,逐步稳定下来,业务量上去了,变成了一个大业务,才可以考虑建立独立系统支持或者移植到原有的大业务系统中去。所以对许多新业务的系统支持上比较薄弱。
  从现状来看,由于新业务没有系统支持,所以大部分采用各种excel表单的方式进行管理,一项业务的办理都是通过excel表单的流转。当然比纸制的要先进。不过,无序和低效表现得比较明显。 
  从技术上讲,新业务系统的开发需要解决可定制表单和流程的技术难题。本篇主要讨论如何为多变的表单提供一个解决方案。 我们看到许多业务都是由表单驱动,比如申请开通业务填写申请单,业务实施填写施工单。不过,随着业务的发展,这些表单包括字段和显示格式都在变。很显然,固定表单的开发无法满足这类用户业务需求。而作为软件开发者在做需求分析的时候,希望通过要求用户签字确认的方式来限制用户需求的变化,这样的做法不合情理,技术没有真正为生产服务。那么如何在新业务的发展阶段支持业务中多变的表单呢,我们就提出了动态表单


动态表单的实现思路

   分析一个表单,主要包含字段、数据,和表现形式这三个元素。数据和字段是成对出现的,可以进行格式化存入数据库或者xml文档。而表现形式可以采用html作为表单模板。现在html功能强大,可以表现复杂的表格。在没有OA系统的时候大部分表格是用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

 

分享到:
评论

相关推荐

    动态表单系统设计与实现

    动态表单系统设计与实现【硕士学位毕业论文

    基于SSH框架的动态表单设计与实现

    ### 基于SSH框架的动态表单设计与实现 #### 概述 在现代Web应用系统中,用户对表单的需求不断变化,这要求系统具备动态、灵活、安全且高效的表单设计方法,以便于管理和维护。文章《基于SSH框架的动态表单设计与...

    JAVA动态表单设计,自定义表单,自定义数据

    服务层负责处理与动态表单相关的业务逻辑,例如表单的创建、更新、删除操作,以及与后端数据库的交互。这部分代码通常使用Java的面向服务架构(SOA)设计,确保高内聚、低耦合。 7. **设计核心(design-core)** ...

    动态表单的简单实现

    动态表单是一种根据业务需求能够动态生成和修改的表单,常见于Web应用中,尤其在数据录入、信息收集...不过,这个简单的动态表单实现已经为我们提供了一个基本框架,从中可以学习到动态表单设计的核心思想和技术实现。

    基于bootstrap的动态表单的实现

    它允许用户通过拖放方式来构建表单,支持多种表单元素,包括输入框、下拉选择框、复选框和单选框等,极大地简化了表单设计的过程。 1. **输入框(input)**:输入框是最常见的表单元素,用于收集用户的文本数据。在...

    基于SSH框架的动态表单设计与实现.pdf

    基于SSH框架的动态表单设计与实现.pdf

    前后端分离的终端自适应动态表单设计1

    【标题】中的“前后端分离的终端自适应动态表单设计1”指的是在Web开发中采用前后端分离架构,以适应不同终端设备显示的动态表单设计方法。 【描述】中提到的"Ajax带来的SPA(单页面应用)"是指利用Ajax技术实现的...

    基于Infopath实现WEB动态表单

    研究者还提出了WEB动态表单转换引擎的设计思路,通过***编写的转换逻辑来实现Web表单的转换。具体实现通过四个步骤:上传表单模板、解包模板、分析和转换模板以及存储转换结果。这四个步骤能够帮助实现一个可以在...

    动态表单:VUE动态表单

    总结来说,Vue+Iview的动态表单方案充分利用了Vue的数据驱动特性和Iview的组件化优势,实现了高度定制化和灵活的表单设计。开发者可以通过学习和掌握这些知识点,提升Web应用的用户体验和开发效率。在实际项目中,...

    工作流动态表单设计图(jbpm)

    工作流动态表单设计是企业信息化管理中的一个重要环节,它允许用户根据业务需求自定义工作流程中的表单,实现流程与表单的紧密关联。在本文中,我们将深入探讨使用jbpm实现工作流动态表单设计的相关知识点。 首先,...

    C# winfrom 自定义表单设计器

    自定义表单设计器是开发过程中的一项重要工具,它允许开发者在运行时动态构建和修改表单布局。这个特定的C#实现是一个组件,可以嵌入到其他应用程序中,提供设计表单的功能。 **3. XML保存和加载表单** 为了在不同...

    JavaScript实现的可视化表单设计器源码.zip

    JavaScript实现的可视化表单设计器源码。实现的可视化表单设计器。基于Vue的可视化表单设计器,让表单开发简单而高效。 特性如下: 可视化配置页面 提供栅格布局,并采用flex实现对齐 一键预览配置的效果 一键生成...

    基于Vue和Element UI的动态表单组件设计源码

    基于Vue和Element UI的动态表单组件设计源码,该项目包含217个文件,主要文件类型有95个Vue前端文件,78个JavaScript文件,10个json配置文件,6个gif动画文件,5个Markdown文档,5个HTML页面文件,4个CSS样式文件,3...

    EXT4.3实现动态表单全动态

    在本文中,我们将深入探讨EXT4.3如何实现动态表单以及与之相关的动态grid功能。 1. **EXT4.3动态表单**: - **组件化设计**:EXT4.3中的表单基于组件模型,可以方便地创建、添加、删除和修改表单字段。通过`Ext....

    表单的动态填写打印(含有动态表格)

    你可以设计包含动态表格的表单模板,然后使用其提供的API(应用程序接口)来控制表单字段和表格的行为。例如,通过编程方式,你可以实现表格行的动态添加和删除,以适应不同数量的数据。 至于Pdf,这是一种广泛使用...

    一款高效的Vue 3低代码表单、工作流表单,包含表单设计器和表单渲染器,可视化设计,一键生成源码

    这款解决方案的核心是它的表单设计器和表单渲染器,两者协同工作,使得开发者无需编写大量代码即可创建出复杂且功能丰富的用户界面。下面我们将深入探讨这个工具的各个方面。 首先,Vue 3作为框架的基础,提供了...

    ext表单设计器,常用表单拖拉实现

    6. **数据绑定**:表单字段可以与后台数据源绑定,实现动态数据加载和提交,这在大数据应用和CRUD操作中尤为常见。 7. **表单验证**:内置的验证机制确保用户输入的数据符合预定规则,提高了数据的准确性和一致性。...

    activiti工作流动态表单,外置表单,普通表单demo

    activiti三种表单的demo实现 运行方式: 1,修改连接的数据库 2,sql文件在resources\sql下 3,访问地址http://localhost:8080/activiti-demo/main/index

    自定义表单设计思路.docx

    ### 自定义表单设计思路详解 #### 一、概述 自定义表单系统的设计目标是为了更好地与现有的工作流系统相结合,提升工作效率与灵活性。本文档将深入探讨自定义表单设计的关键点及其实施策略。 #### 二、基础功能...

    基于 ElementUI 的表单设计器

    综上所述,"基于ElementUI的表单设计器"——f-render为开发者提供了一个高效、便捷的表单开发解决方案,涵盖了Vue.js、ElementUI、动态表单设计、数据验证等多个重要知识点。掌握这些技能,不仅可以提高开发速度,还...

Global site tag (gtag.js) - Google Analytics