程序员的故乡

 

转载: 微软的报表服务的使用

由于我们这个项目中使用微软的报表服务(Reporting Services)作为报表输出工具,本人也对它进行一点点研究,虽没有入木三分,但这点知识至少可以在大部分Reporting Service的场景中应用。

原先刚装上Reporting Service时还觉得有点神秘,毕竟在做这个项目前还没有真正接触这个微软用于代替水晶报表的报表工具,而且微软似乎还不满足于一个报表工具那么简单。

Reporting Services 是一种基于服务器的新型报表平台,部署在Microsoft® SQL Server 2000基础上,可用于创建和管理包含来自关系数据源和多维数据源的数据的表格报表、矩阵报表、图形报表和自由格式报表。可以通过基于 Web 的连接来查看和管理您创建的报表。

Reporting Services 提供了一套完整的服务、工具和应用程序编程接口 (API),您即使不是程序员也可以使用 Reporting Services。可以使用 Reporting Services 中包含的应用程序和工具来制作、发布和管理报表。此外,还提供了支持报表生存周期的各个阶段的工具或应用程序。程序员可以使用 API 将报表功能扩展或集成到自定义解决方案中。

本文主要简介Reporting Service开发中所涉及到的部分技术,首先我们可以从其是一个服务(Service)可知,它提供了Web Service接口,并且允许我们在报表中嵌入代码(必须是VB .Net),还可以引用基于.Net Framework的程序集。

在此主要讲Reporting Service开发相关技术的二个方面
 1.在自定义的应用程序中集成Reporting Service提供的报表服务
1.1生成报表展示组件

要想把Reporting Service的报表(RDL文件)集成到自定义的应用程序中,我们可以通过Reporting Service自带的一个报表展示组件,它可以通过对sample项目ReportViewer编译得到,默认为ReportViewer.dll

我们通过通过对sample项目ReportViewer进行编译,可以得用于在自定义应用程序集成RDL文件的组件,但如果我们需要在自定义应用程中传递参数给报表,用默认编译得到的ReportViewer.dll组件将不支持。接下来,我们要解决这个问题,如何将在自定义应用程中给报表参数赋值?
private void SetParameter(string name, string value)
{
    …
    …
}

  上图为ReportViewer.cs中的一个方法,此方法的作用将是给报表参数设置值,这时大家可能会很高兴,因为它提供了一个方法来支持,但当我们看到private时,我们也许高兴不起来了,微软基本安全考虑,默认状态下并不把传递参数的方法暴露出来。但往往实现应用与安全都是互斥的。

现在我们至少知道如何扩展该功能来达到我们的目的。

public void SetQueryParameter(string Name, string value)
{
    
this.SetParameter(Name, value);
}

我们新增一个public的方法SetQueryParameter,即可,如上图。再重新编绎一下,那么这个组件就具备了参数传递功能。

1.2把组件导入到工具箱

在工具箱中,选择Web窗体,选择右击菜单“添加/移除项”,在“Net Framework组件”项目中,点击“浏览”,选择我们之前生成的ReportViewer.dll文件。此时将会在工具箱中显示一个控件,如下图:


 1.3应用到我们的应用程序中

我们把控件拖到.aspx页面中,将会显示如下代码

<cc1:reportviewer
id="ReportViewer1"
runat="server" Format="HTML4.0"
Parameters="False" //在报表展示时不会显示报表自带参数
ServerUrl=""
ReportPath=""
></cc1:reportviewer>

我们可以设置ServerUrlReportPath属性来指定相应的报表服务器及报表RDL文件。

2.在报表中使用表达式、VB.NET代码、引用基于.Net Framework的程序集

2.1 嵌入代码(VB.net
您可以编写自定义代码,用在报表的表达式中。嵌入代码中的方法必须采用 Visual Basic .NET 编写,并且必须是基于实例的方法。下面图中显示了VB.net的一个方法。


这个报表中的代码段在本报表文件内都有效。
接下来我们要在报表的表达式中引用自定义编写的代码段,引用方法是通过Code来调用方法名,如下图。

2.2引用基于.Net Framework的程序集
要在报表设计中使用自定义程序集,您必须先创建程序集,让它可供报表设计器使用,再在报表中添加对该程序集的引用,然后在报表中使用一个表达式来引用该程序集中的方法。

要使用引用的程序集,必须把受托管的程序集引用到报表中,被引用的程序集也必须经过强名签字,如下图:


要引用表达式中的自定义代码,您必须调用自定义程序集中某个类的成员。调用方式取决于该方法是静态方法还是基于实例的方法。自定义程序集中的静态方法可在报表内全局使用。您可以通过命名空间、类和方法名称来访问表达式中的静态方法。例如:
=ClassLibrary1.Class1.ToChineseName1(Fields!EmpCode.Value)+"Test"

基于实例的方法可通过全局定义的 Code 成员使用。您可以通过先引用 Code 成员,再引用实例和方法名称来访问这些方法。例如:
=Code.objClass1.ToChineseName2(Fields!EmpCode.Value)+"Test"

以上方法只是在设计期的一些操作,要想我们引用的程序集成功运行在报表上,还需要进行安全、信任部署。如果需要在报表的设计期中的预览使用程序集,则需要把经过强名处理程序集(DLL),复制到C:\Program Files\Microsoft SQL Server\80\Tools\Report Designer(默认)目录下,如果报表被部署到报表服务器,您还必须向报表服务器部署这一自定义程序集,则需要把经过强名处理程序集(DLL),复制到C:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer\bin(默认) 目录下。

posted on 2005-09-05 10:59  程鑫  阅读(784)  评论(0编辑  收藏  举报

导航