从SQL Server 2005 Reporting Services报表中调用.Net程序集?
我目前在.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"
最后,在预览之前先生成报告。
如果它建立了,那么我们很有可能会前进。
除了...
我们无法将其部署到生产报表服务器,因为始终会出现以下错误:
加载代码模块时出错
这就是我现在正在处理的。