电子表单系列谈之表单数据处理

  袁永福( http://www.xdesigner.cn ) 2007-8-16

点击下载其表单工具概念版本

一般的电子表单工具都要求能自动显示和保存关系型数据库中的数据,比如可以使用SQL语句查询数据填充文本框,或者查询一批数据填充到列表框中的列表项目。而且还要求能更新数据库,能把用户输入的数据保存到数据库中,可以新增,修改和删除数据库记录。为实现这种功能,表单工具在定制表单模板的时候得设置读取数据和更新数据库用的SQL语句,或者设置表单数据输入元素和数据库字段的映射关系,运行时得直接连接数据库,执行SQL更新语句更新数据。但随着时代的进步,这种做法在开发和运行中暴露出一些问题。

对于目前的比较庞大而复杂的信息管理系统,很多系统都采用三层架构或多层结构,此处只讨论有代表性的三层架构。在三层架构中,程序代码根据功能分为三个大部分,数据库处理层,业务逻辑层和数据显示层(用户界面层)。其中数据库处理层专门处理底层数据库,维护基础的数据结构。业务逻辑层则调用数据库层获得数据并根据需要进行处理,而数据显示层则从业务逻辑层获得数据并显示出来。

这种三层架构结构复杂,但程序灵活,适于团体开发,而且维护简单,能比较方便的控制数据访问的安全和限制,因此三层结构目前有很大的影响力。对于三层的数据库信息管理系统,只有数据处理层能直接访问数据库,其他的程序模块是不能的。

电子表单工具是用来显示和输入数据的,从功能上说应当是三层结构中的用户界面层,它应当只能从业务逻辑层获得数据,不应当从数据库层获直接连接数据库获得数据的,更不应当跳过业务逻辑层来直接更新数据库。但目前一些表单工具却如此这样作,破坏了三层结构的原本的意义。一般来说,用户界面层直接查询数据库获得数据,只是影响了三层结构,数据库结构发生改变,而用户界面层没有随之更新,则最多只是不能正确的显示数据,没有其他的影响;但用户界面层直接更新数据库,新增修改或删除数据库记录,这应当是破坏了三层结构,当数据库结构发生改变而用户界面层没有随之更新,则用户界面层可能会破坏数据库,导致数据错误和数据丢失。对于客户而言,最重要的是数据而不是应用系统,应用系统可以更换,可以崩溃,但数据绝不能错误或丢失。因此从客户的利益和软件的安全性着想,使用电子表单工具直接更新数据库应当慎重考虑。

一些电子表单工具具备能自动更新数据库记录的功能,但在现在的软件开发过程中,这种功能要求日渐不重要。这是因为越多越多的开发人员使用各种成熟的对象-数据库映射框架,或者使用各种代码生成器来生成操作低层数据库的代码,而且各个公司对此有各自的规范和传统,表单工具不应对此进行过多的干涉。

综上所述,表单工具是处于用户界面,用于显示和输入数据的,在三层架构中属于用户界面层,按照三层架构的基本规范,用户界面层是不能直接读取和更新底层数据库的。因此电子表单不应当直接更新数据库,而是向三层架构的业务逻辑层提供数据。

此处表单工具使用XML文档和应用系统交换表单数据,应用系统将需要显示的数据组织成一个XML文档,然后传递给表单工具用户界面,在用户界面中,用户确认输入表单数据后,表单工具将表单数据组织成一个XML文档返回给应用系统,应用系统将进行后续处理。

在表单文档中,每一个可以输入数据的表单元素都有一个“数据引用“的属性,该属性就说明了表单工具如何保存在XML文档中。该属性的格式类似XPath字符串,可以包含多个XML节点名称,名称之间由”/”分隔开来。

比如对于一个文本框,若数据引用为Employees/Address,则表单数据保存在XML文档根节点的名为Employess子节点的名为Address的子节点下。生成的XML片断可能为

<XFormValue >
   
<Employees>
      
<Address>文本值</Address>
   
</Employees>
</XFormValue>

若这个文本框的数据引用为Employees/@Address,则表单数据保存在XML文档根节点的名为Employess的子节点的名为Address的属性中。此时生成的XML片断可能为

<XFormValue >
   
<Employees Address=”文本值” />
</XFormValue>

意,这里的数据引用是模拟XPath的,不是真的XPath,只能设置各级XML元素的名称,若出现XML属性则放置在最后,而且没有判断条件。

在实际应用中,使用电子表单的最终目的一般是显示和编辑数据库记录的,此时则可以设置表单元素的数据引用为“表名/字段名。则生成的表单XML文档可以如下

<XFormValue >
   
<Employees>
      
<Address>复兴门 245 号</Address>
      
<BirthDate>1968-12-8 0:00:00</BirthDate>
      
<City>北京</City>
      
<Country>中国</Country>
      
<EmployeeID>1</EmployeeID>
      
<Extension>5467</Extension>
      
<FirstName></FirstName>
      
<Goal>2000</Goal>
      
<HireDate>1992-5-1</HireDate>
      
<HomePhone>(010) 65559857</HomePhone>
      
<LastName></LastName>
      
<Sex>2</Sex>
      
<Title>4</Title>
      
<TitleOfCourtesy>女士</TitleOfCourtesy>
   
</Employees>
   
<Customers>
      
<Address>大崇明路 50 号</Address>
      
<City>天津</City>
      
<CompanyName>三川实业有限公司</CompanyName>
      
<ContactName>刘小姐</ContactName>
      
<ContactTitle>销售代表</ContactTitle>
      
<Country>中国</Country>
      
<CustomerID>ALFKI</CustomerID>
      
<Email>Silva@lisboncycle.com</Email>
   
</Customers>
</XFormValue>

很明显,对于这样的XML文档,从根节点出发,第一层子节点的名称就是数据表的名称,第二层子节点的名称就是数据表各个字段的名称。这样很容易将XML文档中的节点映射到数据库表和字段上,因此容易开发一个将XML文档的数据更新到数据库的通用例程。而且在应用系统中,可以将所有的根据电子表单数据更新数据库的代码集中起来。

下一篇讲讲表单工具用户可用性。

posted on 2007-08-16 09:55  袁永福 电子病历,医疗信息化  阅读(3410)  评论(4编辑  收藏  举报

导航