从SQL Server 2005 Reporting Services报表中调用.Net程序集?

时间:2020-03-05 18:55:43  来源:igfitidea点击:

我目前在.rdl文件中的代码块中有一组包含许多常用功能的报告。这显然带来了可维护性问题,我想知道是否有人知道这些不同的报告共享通用代码库的方法?

理想情况下,我想将.Net程序集添加到Reporting Services项目中,我的所有报表都可以从中访问和调用函数。这将避免每次需要对通用功能进行更改时尝试更新和重新部署约100个报告的麻烦。

有什么建议?

解决方案

回答

我们必须部署到GAC。
http://www.developerdotstar.com/community/node/333

回答

下面的文章列出了从SSRS报告中调用.Net代码的几乎所有不同方式。使用自定义代码扩展Microsoft SQL Server 2000 Reporting Services

如果所有这些报告都在同一服务器上运行,则要考虑的另一种选择是使用数据库中的.Net存储过程来保存代码。

回答

在Visual Studio的报表属性中,在"引用"选项卡上,添加包含托管代码的程序集的详细信息。可以使用指定的实例名称从报表中的表达式中调用此代码。

该程序集可以存储在GAC或者Visual Studio的PrivateAssemblies目录中,并可以部署到Reporting Services服务器上的Report Service'bin'目录。有关更多信息,请参阅如何在Reporting Services中使用自定义程序集或者嵌入式代码。

回答

非常感谢,我现在可以从报告中致电我的大会。

补充问题:
创建程序集时,可以使它知道报表设计器中的对象(例如字段和参数)吗,可以包含一个名称空间吗?如果我能够以强类型的方式将一组字段传递给我的程序集,那真是太好了。

答案是:经过几个小时的搜索后发现,在程序集中添加\ Program Files \ Microsoft Visual Studio 8 \ Common7 \ IDE \ PrivateAssemblies \ Microsoft.ReportingServices.ProcessingObjectModel.dll作为引用使我可以访问各种Reporting Services类型,例如"字段和参数"。请注意,在Reporting Services 2008中,名称空间会更改。

回答

我为此感到非常痛苦,所以我希望这对某人有帮助。我们可以从MSDN文章中获得它,但是以下几点可以更快地完成任务。

不要忘记将其添加到rssrvpolicy.config文件中:

<CodeGroup class="UnionCodeGroup"
   version="1"
   PermissionSetName="FullTrust"
   Name="MyCodeGroup"
   Description="Code group for my data processing extension">
      <IMembershipCondition class="UrlMembershipCondition"
         version="1"
         Url="C:\pathtocustomassembly\customassembly.dll"
       />
</CodeGroup>

我忘记这样做了,我讨厌了一段时间。

另外,不要忘了用新的dll来打以下2005年的以下两个文件夹:

Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies 
Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin

另外,请勿在程序集中使用log4net。我无法使其工作。也许有人可以但是我却没有。

另外,如果我们像我一样搞乱了,在关闭Visual Studio之前将无法删除文件。

另外,使方法是共享的或者静态的。更容易。

创建一个部署批处理文件。就像是:

@ECHO OFF
REM   Name: SRSDeploy_Local.bat
REM
REM   This batch files copies my custom assembly to my Reporting Services folders.
REM
REM   This is the SQL Server 2005 version:
copy "C:\Projects\Common\lib\SCI.Common.SSRSUtils.dll" "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies"
copy "C:\Projects\Common\lib\SCI.Common.SSRSUtils.dll" "C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin"

最后,在预览之前先生成报告。

如果它建立了,那么我们很有可能会前进。

除了...

我们无法将其部署到生产报表服务器,因为始终会出现以下错误:

加载代码模块时出错

这就是我现在正在处理的。