现在的位置: 首页 > 综合 > 正文

自定义表单原理和实现思路(未完待续)

2013年10月11日 ⁄ 综合 ⁄ 共 2153字 ⁄ 字号 评论关闭
自定义表单的实现方法浅谈
2008年05月29日 星期四 11:32

自定义表单的用途比较广泛,在OA的自定义工作流程中、CMS功能扩展、自定义调查中都将涉及到。为什么要使用自定义表单呢?试想一下,如果某个系统中没有自定义表单功能,而要实现增加功能或系统扩展,会怎么样?这时只能依靠界面设计师与程序员配合再做一个表单及编写代码来处理表单,处理表单的代码是枯燥而机械重复的,因为这样的代码无非是一些增、删、改、插,对一般的程序员来说,似乎太简单了;对一个项目来讲,如果客户需要的表单很多,可想而知,这样的代码将会有多少重复的,虽然生成代码的工具不少,可以减少一些工作量,但也会让整个系统变的更庞大,维护也不是那么方便,假如客户要加个数据项或改个什么的,整个项目又得重新编译。诚然,开发一套自定义表单系统是需要耗费不稍精力,占用一些项目时间,但有了这个平台之后,对以后的其他项目开发或者系统本身的功能扩展还是有很大帮助的。

上面列举了一些自定义表单的种种好处,我们应该怎么实现它呢。自定义表单就是将上面的情况进行抽象,通过表单的定义自动创建/修改自定义数据表、动态生成数据表操作的SQL语句并执行。当然首先要知道一般的自定义表单系统包含哪些功能。我想的话,可分为这样几部分:表单定义管理部分、表单呈现/提交部分、表单数据查看/管理部分。

表单定义管理:表单基本信息管理(表单名称、描述)、表单存储表字段管理、表单布局设计、表单数据验证定义、表单字段关联/子表单管理、表单字段编辑框行为管理。

表单基本信息定义比较简单就不说了。

表单存储表字段定义:定义表单中用到的数据项,包括字段名、字段类型、长度、默认值、编辑框类型、是否允许为空、是否自增长字段、分组名称、是否在列表中显示等信息。编辑框类型一般有:文本框、文本域、复选框、单选框、列表框、时间日期选择、文件上传框等;这里定义的是表单主表字段,注意每张表单仅针对一张表,否则操作多张表的SQL不容易处理,涉及到主从表的情况可用子表单来处理。

表单布局设计:这一步是很关键也是较难实现,简单的做法是做一个表单模板,那么表单中的数据项说明、编辑框、数据验证就都可以用内部变量来代替,系统可提供自动生成表单的功能,用户也可以自己手工修改,当然能够提供一个表单设计器就完美了,使用起来就更方便的了。

表单数据验证定义:定义需要验证字段的规则,验证规则,可用正则表达式的方式来定义,系统内部可自带一些常用的验证规则,复杂的情况可能会出现各字段之间的值进行比较的情况。

表单字段关联/子表单管理:定义表/表单之间的关联信息,即主键外键信息。

表单字段编辑框行为定义:主要负责处理字段值发生变化时引发的其他编辑框事件,比如连动下拉框、从选择值中返回值并赋予其他字段编辑框、其他编辑框的隐藏等。

表单运行时呈现及提交

根据表单定义的布局及其他设置呈现表单,并一起生成验证、行为用到的JS代码。如果填写表单时,先填主表信息,然后填写从表信息,多个表单之间要进行跳转,保存的临时表单值可采用SESSION进行传递,最后一起提交,提交时先写入主表信息,并返回主键值(如果存在主从表的话),然后写从表数据。

表单数据管理

可根据字段配置信息显示表单的数据列表,并进行管理,这一步实现比较简单。

最近参与一个项目,客户要求提供自定义表单的功能。主要的要求是:能够对表单的字段进行增删改,对显示表单的格式可以灵活定制。由于客户的表单变动可能比较频繁,所以决定实现自定义表单功能。初步设想出以下两种自定义表单的解决方案,目前只涉及到表单的显示方案。

 请大家讨论一下两种方案的优劣,使用哪种较好。也欢迎大家提出更好的解决方案。

HTML


  概述:采用
HTML模板方式。对于每一种样式的表单定义HTML模板;在模板中定义Web页面的HTML界面代码,在需要读到数据库数据的地方用特殊字符代替;当用户访问页面时,先从数据库中取得所有相关数据,然后根据指定的模板路径读入HTML文档内容,通过“模板标记解析器”用取得的数据替换掉模板中的特殊标记,然后将整个HTML文档显示出来。

 

XML + XSLT方案

       概述:采用XML描述数据,XSLT定义XML数据显示格式。通过XSLT来控制数据的显示;查询数据库返回XML格式数据,将XML保存到临时文件,通过XSLT来解析XML数据文件生成HTML代码,最终将HTML代码显示到前台页面中。
 
  对于第二种方式,我正好有个简单的Demo:/Files/Infinity/Demo.rar,请直接用浏览器打开“Test.xml”文档,即可看到XML + XSLT方案的效果。
模板方案

表单项模板表(ItemTemplate):包含数据类型(按照数据类型对应到数据库中不同的表中去) 、数据长度 、UI配置信息、关联实体、关联条件等;

表单模板表(FormTemplate):包含集合items(each item为ItemTemplate)、表单名称、UI配置信息等;

 

表单项表(Item):包含template(ItemTemplate)+value等信息;

表单表(Form):包含template(FormTemplate)、录入时间等信息,items集合(each item为Item);

抱歉!评论已关闭.