2

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

理想情况下,我希望在我的 Reporting Services 项目中附加一个 .Net 程序集,我的所有报告都可以从中访问和调用函数。这将省去每次需要对公共功能进行更改时尝试更新和重新部署大约 100 个报告的麻烦。

有什么建议么?

4

5 回答 5

5

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

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

于 2008-09-16T12:17:27.940 回答
2

我对此感到很痛苦,所以我希望这对某人有所帮助。您可以从 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"  

最后,在预览之前构建您的报告。

如果它建立起来,您很可能正在上路。

除了...

您无法将其部署到您的生产报表服务器,因为您总是会收到以下错误:

加载代码模块时出错

这就是我现在正在做的事情。

于 2009-10-10T01:30:22.557 回答
1

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

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

于 2008-09-16T11:57:27.957 回答
1

非常感谢你们,我现在可以从我的报告中调用我的程序集了。

补充问题: 当我创建我的程序集时,是否可以包含一个命名空间,使其了解报表设计器中的对象,例如字段和参数?如果我能以强类型的方式将一组字段传递给我的程序集,那就太好了。

答案是:几个小时的搜索表明,在我的程序集中添加 \Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\Microsoft.ReportingServices.ProcessingObjectModel.dll 作为参考可以让我访问各种 Reporting Services 类型,例如字段和参数。请注意,在 Reporting Services 2008 中,命名空间更改为.

于 2008-09-16T16:23:10.907 回答
0

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

于 2008-09-16T11:56:33.480 回答