Reporting Service使用自定义代码或引用程序集

您可以向报表添加自定义函数,或添加对外部程序集中存在的函数的引用。对于 Microsoft.VisualBasicSystem.ConvertSystem.Math 程序集,报表服务器会自动添加引用。对于其他程序集,可以使用“报表属性”对话框或在报表定义中使用 CodeModules 元素进行引用。

“报表属性”对话框也可以用于定义新的自定义函数。若要在报表定义中定义自定义函数,请使用 Code 元素。但是,无法向函数传递数据值集;特别要指出的是,不支持自定义聚合。

您可以编写自定义代码,在整个报表内的表达式中使用。可以采用以下两种方法执行此操作:在报表中嵌入代码或引用自定义程序集中的方法。对于复杂的函数,或在一个报表中多次使用的函数,可使用嵌入代码。若要在一个位置维护代码,或在多个报表间共享代码,则可以使用代码程序集。

Reporting Service使用自定义代码或引用程序集 - xyq - xyq 嵌入代码

若要在报表中使用代码,可向报表中添加代码块。代码块可以包含多个方法。嵌入代码中的方法必须采用 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 向报表属性添加引用。有关详细信息,请参阅如何向报表添加代码(报表设计器)如何向报表添加程序集引用(报表设计器)

Visual Basic
 
    

有关全局对象集合以及初始化的详细信息,请参阅在表达式中使用全局集合Initializing Custom Assembly Objects

Reporting Service使用自定义代码或引用程序集 - xyq - xyq 自定义程序集

若要在报表中使用自定义程序集,您必须先创建程序集,使其可供报表设计器使用(把创建的程序集拷贝到"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 的值从美元转换为欧元:

如何创建实例(对象):在引用程序集图下面,有类,把程序集中的类写进去(命名空间.类名),再起一个实例名.具体报表中用法如下

Reporting Service使用自定义代码或引用程序集 - xyq - xyq注意:
在报表设计器中,除非您关闭 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

安装和注册数据访问接口需要管理员凭据。

Reporting Service使用自定义代码或引用程序集 - xyq - xyq 在报表服务器上注册 .NET Framework 数据访问接口

若要在报表服务器上处理使用此 .NET Framework 数据访问接口的已发布报表,需要在报表服务器上安装其程序集。 必须修改两个配置文件。 修改 rsreportserver.config 以注册数据访问接口。 修改 rssrvpolicy.config 以授予对程序集的代码访问安全权限。

在报表服务器上安装数据访问接口程序集
  1. 在要在其上使用 .NET Framework 数据访问接口的报表服务器上,导航到 bin 目录的默认位置。 报表服务器的 bin 目录的默认位置为 <drive>:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin。

  2. 将程序集从临时位置复制到报表服务器的 bin 目录中。 也可以选择将程序集加载到全局程序集缓存 (GAC) 中。 有关详细信息,请参阅 msdn.microsoft.com 上的 .NET Framework SDK 文档中的使用程序集和全局程序集缓存

在报表服务器上注册 .NET 数据访问接口
  1. 在 bin 目录的 ReportServer 父目录中备份 RSReportServer.config 文件。

  2. 打开 RSReportServer.config。可以使用 Microsoft Visual Studio 或诸如记事本之类的简单文本编辑器打开该配置文件。

  3. 在 RSReportServer.config 文件中找到 Data 元素。 应当在以下位置为 .NET Framework 数据访问接口生成一个条目:

  4. 添加 .NET Framework 数据访问接口的条目。

    属性 说明

    Name

    提供数据访问接口的唯一名称,例如 MyNETDataProviderName 属性的最大长度是 255 个字符。 该名称在配置文件的 Extension 元素中的所有条目中必须唯一。 创建新数据源时,在此处包含的值显示在数据源类型下拉列表中。

    Type

    输入包括实现 IDbConnection 接口的类的完全限定命名空间在内的逗号分隔的列表,后跟 .NET Framework 数据访问接口程序集的名称(不包含 .dll 文件扩展名)。

    例如,对于部署到报表服务器的 bin 目录中的 DLL,该条目应如下所示:

    如果将程序集加载到全局程序集缓存 (GAC) 中,必须提供强名称属性。 例如:

为 .NET 数据访问接口设置代码组策略
  1. 在 bin 目录的 ReportServer 父目录中备份 rssrvpolicy.config 文件。

  2. 打开 rssrvpolicy.config。可以使用 Microsoft Visual Studio 或诸如记事本之类的简单的文本编辑器打开该配置文件。

  3. 在 rssrvpolicy.config 文件中找到 CodeGroup 元素。

  4. 为数据访问接口程序集添加授予 FullTrust 权限的代码组。 该代码组应如下所示:

URL 成员身份仅是您可能为数据访问接口选择的多个成员身份条件之一。 有关 Reporting Services 中的代码访问安全性的详细信息,请参阅 Understanding Code Access Security in Reporting Services

验证部署和注册

打开报表管理器,然后验证可用数据源列表中是否包含该数据访问接口,从而验证是否已将该数据访问接口成功部署到报表服务器上。 有关报表管理器和数据源的详细信息,请参阅创建、修改和删除共享数据源

Reporting Service使用自定义代码或引用程序集 - xyq - xyq 在报表设计器客户端上注册 .NET Framework 数据访问接口

若要创作使用此 .NET Framework 数据访问接口作为数据源的报表,必须在运行报表设计器的客户端计算机上安装该程序集。 必须修改两个配置文件。 修改 RSReportDesigner.config 以将该数据访问接口注册为数据源,并使用通用查询设计器。 修改 RSPreviewPolicy.config 以授予对数据访问接口程序集的代码访问安全权限。

在报表设计器客户端上安装数据访问接口程序集
  1. 在要在其上使用 .NET Framework 数据访问接口的报表设计器客户端上,导航到 PrivateAssemblies 目录的默认位置。 PrivateAssemblies 目录的默认位置是 <drive>:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies。

  2. 将程序集从临时位置复制到报表设计器客户端的 PrivateAssemblies 目录中。 也可以选择将程序集加载到全局程序集缓存 (GAC) 中。 有关详细信息,请参阅 msdn.microsoft.com 上的 .NET Framework SDK 文档中的使用程序集和全局程序集缓存

在报表设计器客户端上注册 .NET 数据访问接口
  1. 在 PrivateAssemblies 目录中备份 RSReportDesigner.config 文件。

  2. 使用 Visual Studio 或诸如记事本之类的简单的文本编辑器打开 RSReportDesigner.config。

  3. 在 RSReportDesigner.config 文件中找到 Data 元素。 应当在以下位置为该数据访问接口生成一个条目:

  4. 添加该数据访问接口的条目。

    属性 说明

    Name

    提供数据访问接口的唯一名称,例如 MyNETDataProviderName 属性的最大长度是 255 个字符。 该名称在配置文件的 Extension 元素中的所有条目中必须唯一。 创建新数据源时,在此处包含的值显示在数据源类型下拉列表中。

    Type

    输入包括实现 IDbConnection 接口的类的完全限定命名空间在内的逗号分隔的列表,后跟 .NET Framework 数据访问接口程序集的名称(不包含 .dll 文件扩展名)。

    例如,对于部署到 Visual Studio 的 PrivateAssemblies 目录中的 DLL,该条目应如下所示:

    如果将程序集加载到 GAC 中,必须提供强名称属性。 例如:

  5. 在 RSReportDesigner.config 文件中找到 Designer 元素。 应当在以下位置为 .NET Framework 数据访问接口生成一个条目:

  6. 将以下条目添加到 RSReportDesigner.config 文件中的 Designer 元素下。 您只需要使用在以前的条目中提供的名称替换 Name 属性。

在报表设计器客户端上设置 .NET 数据访问接口的代码组策略
  1. 在 PrivateAssemblies 目录中备份 RSPreviewPolicy.config 文件。

  2. 使用 Visual Studio 或诸如记事本之类的简单的文本编辑器打开 RSPreviewPolicy.config。

  3. 在 RSPreviewPolicy.config 文件中找到 CodeGroup 元素。

  4. 为 .NET Framework 数据访问接口程序集添加授予 FullTrust 权限的代码组。 该代码组应如下所示:

URL 成员身份仅是您可能为数据访问接口选择的多个成员身份条件之一。 有关 Reporting Services 中的代码访问安全性的详细信息,请参阅 Understanding Code Access Security in Reporting Services

在报表设计器客户端上验证部署和注册

必须先关闭本地计算机上的所有 Visual Studio 实例,然后才能验证部署。 结束所有当前会话之后,可以在 Visual Studio 中创建一个新报表项目,以验证数据访问接口是否已成功部署到报表设计器。 为报表创建新的数据集时,该数据访问接口应当包含在可用数据源类型列表中。

Reporting Service使用自定义代码或引用程序集 - xyq - xyq 平台注意事项

在 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 支持的数据源

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值