2006年3月 JOURNAL OF SHANGHAI SECOND POLYTECHNIC UNIVERSITY Mar. 2006 文章编号: 1001-4543(2006)01-0031-05
.NET 框架下基于XML 的Web 数据报表生成系统
崔良海1
汪 琴2
1
上海第二工业大学计算机与信息学院 上海 201209
2上海第二工业大学国际交流学院 上海 201209
摘 要基于XML 的通用的报表引擎可用在因特网环境中远程生成各式各样灵活的专业的企业报表整个报表引擎也是数据库系统的一个关键部分阐述了报表引擎的开发过程与使用的技术如.NET Framework XML Office Web Component ActiveX 等并展示了报表引擎的使用过程从中可以看出该引擎的强大功能可以说
该引擎的开发为整个商业智能模块的应用打下了良好的基础 关键词XML .NET Framework Web 报表
引擎
中图中图分类号分类号 TP311.13 文献标识码 B
0 引言
在开发商业智能处理系统时除了要能提供各种分析优化决策树等方法和工具来辅助各项管理决
策外
还需有完整的包含有数据库连接报表设计数据处理
预览打印等功能的报表解决方案而当
前众多的处理系统中往往忽略了后一部分须知一个完整的商业智能处理系统中一个很重要的部分就是如何利用系统的数据来定义编制出各种类型样式的报表[1]本文介绍的报表解决方案是.NET 框架下
基于XML 在网上远程提供对图表2D 3D 交叉表多维分析立方体等多种样式的支持[2]从而较好
地解决了连接数据库进行数据处理
报表设计
打印等问题
1 引擎架构
整个报表引擎可分为两部分报表设计部分和报表显示部分
报表设计部分Design-time 是传统的Windows 应用程序
能让用户设计和制作一张所需要的报表,
包括选择数据源
设计报表样式
设计图表等
报表显示部分
Run-time 则是Web 应用程序
可以得到最终数据填入后形成的报表并可打印
报表引擎的核心采用了基于XML 的架构当在Design-time 设计完一张报表后实际上引擎生成了一个描述这张报表信息的XML 文件[3]当用户观看报表时Run-time 取出这张报表的XML 文件进行解析读取报表的信息然后从数据库读取这张报表所需要的数据生成数据XML 文件[4]由报表的样式生成样式XML 文件
最后将这两个XML 文件进行组合
形成一张最终的报表架构图如图1所示
2 引擎设计中涉及的组件
2.1 .NET Framework
设计是建立在.NET 平台之上的.NET Framework 是 .NET 平台的程序设计模型用于构建和运行应用程序和XML Web services 这些组件使用标准的独立于平台的协议如 XML SOAP 和 HTTP
[5]
.NET Framework 由两个主要部分组成公共语言运行库和一个统一的类库集包括用于 Web 应用程序和 XML Web services 的 ASP.NET [6]用于智能客户端应用程序的 Windows 窗体和用于松耦合数据
收稿日期2005-06-16; 修回日期:2006-01-20 作者简介崔良海(1950)男上海人副教授主要研究领域为计算机网络
Web 编程
访问的 ADO.NET
图1 报表架构
Fig.1 Report structure
2.2 XML
整个Report引擎的核心是基于XML的
XML是一种描述型的标记语言其优点是既可以在这个文本文件中存储结构化数据也可以在其中存
储非结构化数据[4]也就是说它能包含和描述粗糙的文档数据就如它描述规则的表格数据一
样报表的所有信息都储存在XML文档中供生成报表时解析[3]
2.3 Office Web Component
报表引擎中的图表控件是采用Microsoft Office Web Component来实现的
Microsoft Office Web Component是用于向 Web 页添加电子表格图表和数据处理功能的ActiveX控件的集合
由于Office Web Component是完全可编程的因而在很多设计环境中都可使用这些组件来建立复杂的交互的和基于Web的解决方案[5]
共有三种Office Web Component Spreadsheet组件Chart组件和PivotTable组件本文的图表控件使用的
是Chart组件
Chart组件放置在用户窗体上以后若无法在设计时添加数据只需右键单击Chart组件然后单击快捷菜单中的属性工具箱命令即可以对Chart组件的格式进行局部修改Chart组件在用户窗体中应用后所有的数据和大部分的格式属性都必须通过编程设置
在运行时使用SetData方法来真正将数据写入Chart组件
2.4 ActiveX组件
浏览器的activex控件在实现报表引擎的打印功能时为了让每个可以浏览到报表的客户端都能打印报表就需用程序通过网
第23卷崔良海汪琴.NET框架下基于XML的Web数据报表生成系统33
页去修改客户端的注册表这样使用了ActiveX组件技术
ActiveX控件与JA V A的小应用程序在表面上很类似都能让网络开发商在他们的网址上放置一些小的
应用程序但实际上ActiveX控件与JAVA小应用程序有着完全不同的内涵
在用户看来ActiveX控件和其他类型的应用程序的唯一区别就在于ActiveX控件不能依赖于它本身而存在也就是说ActiveX控件不能像其他应用程序一样直接运行它必须作为应用程序的一部分比如作为Web页或者是其他类型的ActiveX的载体程序的一部分
其实ActiveX控件的主要特征之一是它可以方便地加入到支持COM组件对象模型Component Object Model的应用程序中
ActiveX控件实际上是在OLE控件的基础上附加一些功能而形成的同OLE一样ActiveX控件同样描述那些能在应用程序中共享的部分与OLE不同的是ActiveX控件能在Internet上共享
另外ActiveX能够在网络环境中支持OLE特性也就是说一旦OLE把应用程序装入系统来共享组件那么ActiveX就可以让应用程序在Internet上共享组件Internet的开发商仍可以在他们的Web页上加
入ActiveX控件如果控件已在用户系统中注册它就会自动地作为网页的一部分显示在用户的Web浏览器上
如果网页上的ActiveX控件没有在系统上注册该控件就会自动下载到用户的计算机上自动注册并自动显示在网页上在这方面ActiveX控件很像JA V A应用程序他们都能为网页提供编程内容ActiveX控件和JAVA应用程序都能被用做嵌入网页的小应用程序网页不再被限定为静态的内容
因此采用ActiveX技术我们可以通过网页修改客户端的注册表
3从数据库中读取数据并转换成特定格式XML文档的算法
由于从数据库中读出的数据是存在一个DataTable对象中的而报表引擎需要的是一个按分组对应的树结构状XML对象[4]因此需要一个算法来实现这一转换
因为分组情况是不定的总数也可变化因此我们通过一个递归函数FindNode来实现寻一条数据对应树上点位置的功能
当所有的数据都填入对应的树结点中后整个转换也就完成了
下面就是这个算法的部分源程序
public XmlNode FindNode(XmlNode root, DataRow dr, int groupindex)
{
if (groupindex == this._alGroup.Count)
root;
return
string groupname = this._alGroup[groupindex].ToString();
string groupvalue = "";
try
{
dr[groupname].ToString();
=
groupvalue
}
catch{}
foreach (XmlNode xn in root.ChildNodes)
{
34
上海第二工业大学学报2006年第1期
DataXMLConst.da_Group_GroupValue))
XMLTools.FindAttribute(xn,
==
if(groupvalue
{
dr,
++groupindex);
FindNode(xn,
return
}
}
XmlNode node = XMLTools.AddXmlChild(root, groupname);
groupvalue);
DataXMLConst.da_Group_GroupValue,
XMLTools.AddAttribute(node,
return FindNode(node, dr, ++groupindex);
}
4报表引擎的使用过程
以下是制作一张专业报表的全过程
首先在报表项目中新建一张报表其页面分为两部分占大部分的左边是具体制作报表的区域而右边是一个解决方案浏览器Solution Explorer类似于Visual Studio .NET列出了当前解决方案里的所有项目及项目中的所有文件供用户选择编辑
报表分为以下几个部分
报表头Report Header报表的开始部分
页眉Page Header报表每页的页眉
报表内容Details报表的详细内容例如数据表格等
报表尾Report Footer报表的结尾部分
页脚Page Footer报表每页的页脚
向设计区域添加报表的控件时只需简单地从工具箱ToolBox里拖动想要的控件到指定的位置就可以了可供报表选择的控件有以下几种
线Line报表中的线条可单独存在也可组成表格
静态文本ConstText报表中固定不变的文字如报表标题等
图片Image报表中的图片如报表上公司商标Logo等
统计项Aggregation报表中的统计值如总数总和平均值等
图表Chart报表中的图表比如柱状图饼图等由实际数值生成
每个控件都可以指定它的属性Property比如文本可以设定它的位置大小字体颜样式等
图表设置与Office中图表的设置非常相似先选择图表的种类Office支持的图表在这个报表引擎中几乎都支持如柱状图Column条状图Bar线图Line饼图Pie块状图Area等整张报表
完成之后经编译就可以在浏览器上看报表结果了
5 小结
基于因特网环境的各种数据库系统如何远程生成各式各样灵活的专业的企业报表是系统的一个关键部
分文章描述了基于XML等技术完成该报表引擎的开发过程与使用在实际使用过程中取得较好效果
第23卷崔良海汪琴.NET框架下基于XML的Web数据报表生成系统35
参考文献
[1] Inmon W H. Building the Data Warehouse[M]. (Third Edition)北京: 机械工业出版社 2005.
[2] 何月顺, 汤彬, 丁秋林等. 基于Web的数据挖掘技术的应用研究[J]. 计算机系统应用, 2005(5):93-95.
[3] 吴敏, 赵卫东. 基于XML技术的CAPP和PDM系统的集成框架[J]. 计算机应用研究, 2006(6):59-62.
[4] Birbect Mark. XML Professional[M]. (Second Edition), 北京: 机械工业出版社 2002.
[5] 官荷卿. Web服务事务的研究综述[J]. 计算机科学, 2005(5): 13-16.
[6] Duthie G Andrew. ASP.NET程序设计[M]. 北京清华大学出版社, 2002.
XML Based Web Report Generater in .NET Framework
CUI Liang-hai1W ANG Qin2
(1School of Computer and Information, Shanghai Second Polytechnic University, Shanghai
201209,P.R.China;
2School of international Exchange, Shanghai Second Polytechnic University, Shanghai 201209, P.R. China) Abstract: An XML-based generic report engine, which can be used to generate various kinds of enterprise reports on the web, is the key of a whole enterprise system. Describes the process and the technologies used in the engine development, like .NET Framework, XML, Office Web Component and ActiveX. Besides, the article also tells us the software architecture and design models of this engine; the architecture is based on .NET, XML, Web service and other standard, OS independent technologies. And from the last part, you can see the usage of this engine, which can prove that it is with good effect in real productive environment.
Keywords: XML.NET framework Web report report engine
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论