基于元数据的通用表单动态生成技术
2013-10-15张桂平
张桂平
(连云港杰瑞深软科技有限公司,江苏 连云港 222006)
0 引言
随着信息化建设的迅速发展,可利用的信息日益增多,在大型电子信息系统中,庞大的、各式各样的数据需要在平台中展示和维护。如果按照每个库表结构单独进行静态设计表单界面,对于成百上千的表而言,界面的排版工作量之大,产生界面和代码文件之多,必然导致出错率随之增高,而且还不便于维护。而一般经常使用的数据类型是文本型、字符串型、时间型、数值型这4种类型的数据,在界面的显示方式主要使用一般编辑框、下拉框型编辑框、时间型编辑框和文本编辑框这几种控件。如果遇到如OraclE中的BLOB、RAW等字段类型,则可以另行再作特殊处理,当然,也可以按照本文所介绍的实现方法另外开发一类含有BLOB或RAW型数据的通用表单页面。
从数据类型着手,可以通过从元数据中直接取得数据的类型、长度及其他相关描述信息,编写代码执行后,动态产生表单页面,这样不仅能提高软件的开发效率,降低软件运行的出错率,提高软件的复用率,而且还能使系统更加人性化,例如用户可以自己通过调整元数据的有关信息,得到想要的表单设计页面。而如何通过调用统一接口,利用元数据中对原始数据的描述信息,按照一定规则自动生成表单是本文讨论所要介绍的重点内容。
1 解决方案
一般认为,元数据是关于数据的数据,但这种定义还是过于简单和笼统。实际上,在不同领域对同一个数据会用不同的元数据来进行描述。在数据仓库领域中,元数据包括记录数据项的业务描述信息,能支持系统对数据的管理和维护;在软件构造领域中,元数据则被定义为通过其数据的修改来改变程序的行为的数据。本文所指的元数据类似于软件构造领域中的元数据,比如通过修改元数据中是否隐藏、选择控件类型、页面数、列摆放数等内容,在代码执行时,会调用这些信息来得到不同的结果。
本文所介绍的通用表单动态生成技术建立在元数据基础之上,主要步骤如下:
(1)建立元数据库表结构,记录数据库中各库表的信息,包括数据库类型、表名、字段名、字段标题、字段类型、字段大小、是否为空、是否唯一、引用值、缺省值等库表本身信息,这些信息只需从库表字典中提取即可,无需手工输入。在此基础上再添加序号、是否只读、控件类型、是否隐藏、列摆放数等属性信息,这几个信息根据需要可进行手工设置。
(2)设计公用表单界面,即用户通过接口函数中的表名,提取元数据中库表相应的信息,按照一定的规则创建表单界面。表单界面如何设计是关键,即根据元数据所记录的库表信息结合一定的约束条件来进行设计,例如根据元数据中的“数据库类型”选择相应的数据源连接接口,计算所要显示的字段个数和控件类型来设计界面的大小。其中,控件类型主要分编辑控件、下拉框控件、时间编辑控件及文本框控件4种类型,也是界面产生哪类控件的依据。另外,用户可根据元数据中序号来设置界面中字段摆放的次序和位置,而列摆放数分为1、2、3种类型,表示表单界面编辑框一行所要放置的个数。
(3)依据数据库类型选取数据库连接方式,如果使用的是Oracle数据库,则可以用Oracle的第三方控件连接数据库的方式;如果使用的是SQLServer数据库,则可使用ODBC连接方式。利用元数据可以将几种异构数据库有机地集成在一起,然后各自读取相应库表中的数据,并将数据暂存于DATASET中,再根据控件所关联库表中的字段名在界面中显示相应的数据,也可以通过增加、修改功能进行数据维护。通过统一接口函数中所提供的数据源类型、表名、唯一索引值和是否增加状态来读取库表中的数据,并对数据进行维护和提交。
具体流程如图1所示。
2 实现方法
2.1 建立元数据
通用表单是依据元数据中所提供的信息而产生的,因此,在生成表单之前,必须建全元数据中的信息。
图1 通用表单实现流程图
在Oracle数据库中,建立元数据表结构来存放各源数据表的信息和其它一些属性信息,主要包括列名、列标题、数据类型、不能为空、缺省值、隐藏、数据长度、是否主键、是否唯一、数据精度、唯一性索引名称、只读、引用id、列摆放数、控件类型、序号等内容。为了便于用户使用,需要对元数据的定义单独开发一个模块,供用户从数据库系统中提取源数据信息,并设置一些表单界面所需要的信息。具体的实现方法与普通维护库表数据类似,其界面布局如图2所示。
图2 元数据定义界面
2.2 数据显示
首先静态创建一个公用表单窗体,上面只需放置DATASET控件和DATASOURCE控件,而表单界面所摆放的控件及数据显示功能都通过代码执行来动态生成。
DATASET可当成内存中的数据库,它是不依赖于数据库的独立数据集合,只需根据接口所传的数据表名进行动态绑定源数据表,即可提取库表中的数据暂存于其中,作为数据源数据本地的一个副本。
表单生成代码设计时,表单界面设置的高度、宽度依据显示字段的个数、类型和元数据中列摆放数来确定的。如设置一行编辑框控件(包括时间编辑框、下拉框)的高度是35像素,文本框的高度是200像素,界面的大小可根据列摆放数、显示的编辑框数、文本框数来计算表单界面的高度,本文所使用的编辑框控件是复合控件,将label与平常所用的数据库控件集成在一起的,使用时只需绑定数据源的列名,label的caption值就会自动获取列标题。主要算法如下:
代码执行后生成表单界面效果如图3所示。
图3 动态生成表单界面
2.3 数据维护
在生成通用表单界面时,通过上一个界面传过来的标识参数来设置该表单处于增加或修改状态。在表单生成后,对表单界面上的各栏目数据进行维护时,只要数据没有提交,这些数据都存放于DATASET中,系统会根据元数据中所提供字段的是否为空、是否唯一、数据精度等属性对输入的数据进行合法性判断,无需通过数据库系统中返回的约束条件或错误信息进行判断,这样更能提高程序的执行效率。操作保存功能按钮后,才由DATASET提交给数据库系统。
3 结束语
在大型信息系统中,面对大量的各类数据在平台中进行展示、维护是一个必不可少的重要功能。如今元数据的运用在各个领域越来越深入,本文通过元数据提供的源数据信息和自设置属性来实现源数据库中的数据在通用表单中展示、维护的功能。通用表单动态生成技术的使用,不但能大大减少软件设计的工作量,简化了代码的编写,也大大地减少了软件文件的大小,而且还能提高软件的可靠性和可维护性。
如果数据表的字段特别多,一个页面排列不下时,可在元数据中再增加“页面数”属性,让数据进行分页显示,具体实现方法类似,在界面中增加PAGE控件,让编辑框控件的父类指向PAGE页即可。
[1]Jack Melnick.Oracle Call Interface Programmer’s Guide,10g Release 2(10.2)[EB/OL].http://docs.oracle.com/cd/B19306_01/appdev.102/b14250/toc.htm,2005-11-01.
[2][美]Scott Mitchell,Steve Walther.ASP.NET 权威指南[M].汤涛译.北京:中国电力出版社,2011.
[3]岳庆生.Delphi高级编程指南[M].北京:清华大学出版社,2010.
[4]蔡昭权,卢庆武,郑宗晖,等.基于元数据的快速开发平台设计与实现[J].计算机工程,2009,35(9):60-62.
[5]站长之家用户.Openbiz技术开发手册之Metadata元数据[EB/OL].http://www.chinaz.com/web/2012/0412/245481.shtml,2012-04-12.
[6]博客园.Oracle date类型字段处理的功能介绍[EB/OL].http://www.bitscn.com/pdb/oracle/201004/184032.html,2010-04-08.
[7]路川,胡欣杰,阎文丽.Oracle 10g宝典(2版)[M].北京:电子工业出版社,2010.
[8]黄正宏.数据库查询优化的有效措施研究[J].信息与电脑:理论版,2011(11):15-20.
[9]彭丹.分布式元数据管理[J].现代计算机:下半月版,2007(8):58-59.
[10]Ray Liscbner.Delphi技术手册[M].北京:中国电力出版社,2009.
[11]Eric Harmonr.Delphi COM深入编程[M].北京:机械工业出版社,2006.
[12]Eric Harmonr.Delphi/Klyix数据库开发[M].北京:机械工业出版社,2008.
[13]赛迪网—软件世界.元数据管理——企业信息化发展建设的润滑剂[EB/OL].http://www.cnetnews.com.cn/2008/0915/1127082.shtml,2008-09-15.
[14]Sno_hite.元数据的概念及作用[EB/OL].http://rsjy.org/3329.html,2012-09-02.