您可以向报表添加自定义函数,或添加对外部程序集中存在的函数的引用。对于 Microsoft.VisualBasic、System.Convert 和 System.Math 程序集,报表服务器会自动添加引用。对于其他程序集,可以使用“报表属性”对话框或在报表定义中使用 CodeModules 元素进行引用。
“报表属性”对话框也可以用于定义新的自定义函数。若要在报表定义中定义自定义函数,请使用 Code 元素。但是,无法向函数传递数据值集;特别要指出的是,不支持自定义聚合。
您可以编写自定义代码,在整个报表内的表达式中使用。可以采用以下两种方法执行此操作:在报表中嵌入代码或引用自定义程序集中的方法。对于复杂的函数,或在一个报表中多次使用的函数,可使用嵌入代码。若要在一个位置维护代码,或在多个报表间共享代码,则可以使用代码程序集。
![Reporting Service使用自定义代码或引用程序集 - xyq - xyq Reporting Service使用自定义代码或引用程序集 - xyq - xyq](http://i.msdn.microsoft.com/Platform/Controls/CollapsibleArea/resources/minus.gif)
若要在报表中使用代码,可向报表中添加代码块。代码块可以包含多个方法。嵌入代码中的方法必须采用 Microsoft Visual Basic 编写,并且必须是基于实例的方法。
有关如何在报表中添加代码的详细信息,请参阅如何向报表添加代码(报表设计器)。
嵌入代码中的方法可通过全局定义的 Code 成员使用。您可以通过引用 Code 成员和方法名称来访问这些方法。下面的示例调用 ToUSD 方法,该方法将 StandardCost 字段中的值转换为美元值:
若要引用自定义代码中的全局集合,请包含对内置 Report 对象的引用:
下面的示例显示如何定义某些自定义常量和变量。
尽管自定义常量不会出现在“表达式编辑器常量”视图(仅显示内置常量)中,但是可以从任何表达式向其中添加引用,如下面的示例所示。在表达式中,自定义常量被视为 Variant。
下面的示例包括函数 FixSpelling 的代码引用和代码实现,该函数用 Bicycle 替换 SubCategory 字段值中出现的所有 Bike 文本。
=Code.FixSpelling(Fields!SubCategory.Value)
嵌入报表定义之后,以下代码显示 FixSpelling 方法的实现。此自定义代码首次运行时,消息框将显示已替换的文本。此示例显示了如何引用 Microsoft .NET Framework StringBuilder 类和 System.Windows.Forms.MessageBox 类。您需要为 System.Windows.Forms 向报表属性添加引用。有关详细信息,请参阅如何向报表添加代码(报表设计器)和如何向报表添加程序集引用(报表设计器)。
有关全局对象集合以及初始化的详细信息,请参阅在表达式中使用全局集合和Initializing Custom Assembly Objects。
![Reporting Service使用自定义代码或引用程序集 - xyq - xyq Reporting Service使用自定义代码或引用程序集 - xyq - xyq](http://i.msdn.microsoft.com/Platform/Controls/CollapsibleArea/resources/minus.gif)
若要在报表中使用自定义程序集,您必须先创建程序集,使其可供报表设计器使用(把创建的程序集拷贝到"E:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies"下,本人是上面这个目录,看VS安装在哪了),然后在报表中添加对该程序集的引用,最后在报表中使用表达式来引用该程序集中包含的方法。如果报表部署到报表服务器,您还必须向报表服务器部署该自定义程序集(把创建的程序集拷贝到"C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin"下.这个是Reporting Service服务器所在目录,本人是上面这个目录.同事是MSSQL.3目录,没搞明白怎么回事)。
有关创建自定义程序集并使其可供 Reporting Services 使用的信息,请参阅 Using Custom Assemblies with Reports。有关如何在报表中添加引用的说明,请参阅如何向报表添加程序集引用(报表设计器)。
若要在表达式中引用自定义代码,您必须调用自定义程序集中某个类的成员。调用方式取决于该方法是静态方法还是基于实例的方法。自定义程序集中的静态方法可在报表内全局使用。您可以在表达式中通过指定命名空间、类和方法名称来访问静态方法。下面的示例调用 ToGBP 方法,该方法将 StandardCost 的值从美元转换为英镑:
基于实例的方法可通过全局定义的 Code 成员使用。您可以通过先引用 Code 成员,再引用实例和方法名称,来访问这些方法。下面的示例调用实例方法 ToEUR,该方法将 StandardCost 的值从美元转换为欧元:
如何创建实例(对象):在引用程序集图下面,有类,把程序集中的类写进去(命名空间.类名),再起一个实例名.具体报表中用法如下
![]() | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
在报表设计器中,除非您关闭 Visual Studio,否则一旦加载自定义程序集,就不会卸载该程序集。如果预览报表后对报表所用的自定义程序集进行更改,然后再次预览该报表,则第二次预览结果中不会体现所做的更改。若要重新加载程序集,请关闭 Visual Studio,再将其重新打开,然后预览报表。
如果没有访问"C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin"权限 请参考如下: 若要使用第三方 .NET Framework 数据访问接口检索 Reporting Services 报表数据集的数据,需要在以下两个位置部署和注册 .NET Framework 数据访问接口程序集:报表创作客户端和报表服务器。 在报表创作客户端上,必须将数据访问接口注册为数据源类型并将其与查询设计器相关联。 然后,可以在创建报表数据集时选择此数据访问接口作为数据源类型。 关联的查询设计器会打开,帮助您为此数据源类型创建查询。 在报表服务器上,必须将该数据访问接口注册为数据源类型。 然后,可以处理使用此数据访问接口从数据源检索数据的已发布报表。 第三方数据访问接口不一定提供 Reporting Services 数据处理扩展插件提供的所有功能。 有关详细信息,请参阅 Reporting Services 支持的数据源。 若要了解扩展 .NET Framework 数据访问接口的功能的信息,请参阅 Implementing a Data Processing Extension。 安装和注册数据访问接口需要管理员凭据。 ![]() 若要在报表服务器上处理使用此 .NET Framework 数据访问接口的已发布报表,需要在报表服务器上安装其程序集。 必须修改两个配置文件。 修改 rsreportserver.config 以注册数据访问接口。 修改 rssrvpolicy.config 以授予对程序集的代码访问安全权限。 在报表服务器上安装数据访问接口程序集
URL 成员身份仅是您可能为数据访问接口选择的多个成员身份条件之一。 有关 Reporting Services 中的代码访问安全性的详细信息,请参阅 Understanding Code Access Security in Reporting Services。 验证部署和注册打开报表管理器,然后验证可用数据源列表中是否包含该数据访问接口,从而验证是否已将该数据访问接口成功部署到报表服务器上。 有关报表管理器和数据源的详细信息,请参阅创建、修改和删除共享数据源。 ![]() 若要创作使用此 .NET Framework 数据访问接口作为数据源的报表,必须在运行报表设计器的客户端计算机上安装该程序集。 必须修改两个配置文件。 修改 RSReportDesigner.config 以将该数据访问接口注册为数据源,并使用通用查询设计器。 修改 RSPreviewPolicy.config 以授予对数据访问接口程序集的代码访问安全权限。 在报表设计器客户端上安装数据访问接口程序集
URL 成员身份仅是您可能为数据访问接口选择的多个成员身份条件之一。 有关 Reporting Services 中的代码访问安全性的详细信息,请参阅 Understanding Code Access Security in Reporting Services。 在报表设计器客户端上验证部署和注册必须先关闭本地计算机上的所有 Visual Studio 实例,然后才能验证部署。 结束所有当前会话之后,可以在 Visual Studio 中创建一个新报表项目,以验证数据访问接口是否已成功部署到报表设计器。 为报表创建新的数据集时,该数据访问接口应当包含在可用数据源类型列表中。 ![]() 在 64 位 (x64) 平台上,SQL Server Business Intelligence Development Studio 在 32 位 WOW 模式下运行。 在 x64 平台上创作报表时,需要在报表创作客户端上安装 32 位数据访问接口,以便预览报表。 如果在同一系统上发布报表,则需要 x64 数据访问接口,以便使用报表管理器查看报表。 对于基于 Itanium 的平台,不支持 Business Intelligence Development Studio。 必须在每个平台上对随 Reporting Services 安装的数据处理扩展插件进行本机编译,然后将其安装在正确位置。 如果注册自定义数据访问接口或标准 .NET Framework 数据访问接口,则需要在对应平台上对其进行本机编译,然后将其安装在相应位置。 如果在 32 位平台上运行,则必须为此 32 位平台编译数据访问接口。 如果在 64 位平台上运行,则必须为此 64 位平台编译数据访问接口。 不能在 64 位平台上使用采用 64 位接口包装的 32 位数据访问接口。 有关数据访问接口是否可在所安装平台上工作的信息,请查看您的第三方软件。 有关数据访问接口和平台支持的详细信息,请参阅 Reporting Services 支持的数据源。 |