如何在报表服务中使用自定义程序集或嵌入的代码

文章翻译 文章翻译
文章编号: 920769 - 查看本文应用于的产品
SQL Server 支持文章专栏

如何在报表服务中使用自定义程序集或嵌入的代码

若要自定义您的需要此列 我们想要邀请您提交您的想法有关您感兴趣的主题以及您想要查看的问题解决在将来的知识库文章和支持语音列。您可以提交您的想法和使用 Ask For It 窗体的反馈。还有在窗体在此栏的底部的链接
展开全部 | 关闭全部

本文内容

欢迎使用后 !我将浅 Yakob 与 Microsoft SQL Server 内容团队。我您 hostess SQL Server 支持语音列。关于我的快速注意: 14 年与 Microsoft 我曾。在过去三年我已与 SQL Server 内容团队工作。

本月的专栏的 John Sirmon 将为您提供要使用自定义程序集或 SQL Server 2000 报表服务和 $ SQL Server 2005 报表服务中的嵌入的代码步骤。 本文旨在为您提供帮助您最多的基本步骤和使用自定义程序集运行中报告服务。 John 是与 SQL 开发人员支持团队在 Microsoft 的支持上报工程师,自 2001 年三月的 Microsoft 工作。他与 SQL Server 工作超过 10 年,使用 Microsoft Visual Studio 时遇到的广泛开发。 John 保留 B.s。 一定程度的 Citadel 从业务管理中。他还拥有 Microsoft 认证解决方案开发人员 (MCSD) 证书,以及 Microsoft 认证数据库管理员 (MCDBA) 证书。我希望您喜欢列,并很有帮助。

创建自定义程序集

若要进行自定义程序集,请按照下列步骤操作:
  1. 创建 Visual Studio 类库。 在 文件 菜单上指向 新建,指向 项目,然后单击 类库
  2. 指定名称和位置。 例如对于使用 SimpleClassLibrary C:\Documents 和 Settings\user1\My Documents\Visual Studio 2005\projects。
  3. 打开类文件 (在我例,Class1.vb),然后创建要在报表服务中使用的函数。 在我的情况下,我只需创建一个简单的共享的函数。

    注意这是一个共享的函数 (C# 中静态) 我们没有使用实例化的对象来访问它。 因为这对我们引用我们本文后面的程序集的方式产生影响,请记住这一点。
    Public Class Class1
    
        Public Shared Function DoSomething() As String
            Return "string data returned from custom assembly"
        End Function
    
    End Class
    
  4. 一旦添加完所有代码,单击在 生成 菜单上的 生成 SimpleClassLibrary。 此步骤将在各自的 bin 文件夹中创建程序集或托管的.dll。 在我的示例中此步骤创建我程序集 SimpleClassLibrary.dll 在我 Documents\Visual Studio 2005\Projects\ SimpleClassLibrary\bin\Debug 文件夹中。

将自定义程序集复制到 SQL 报告服务文件夹

使您的程序集可供报表设计器和报表中报告服务的服务器。 若要执行此操作必须将您.dll 复制到报表设计器文件夹和到报表服务器文件夹中。

注意该路径可能取决于您的安装路径有点不同。
  • 报告服务 2005 年将.dll 复制到下列文件夹中:
    • 程序 Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies
    • 程序 Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin
  • 报告服务 2000,将.dll 复制到下列文件夹中:
    • 程序 Files\Microsoft SQL Server\80\Tools\Report 设计器
    • 程序 Files\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer\bin
注意您所要做此每次您更改该代码,因为它可以是一个位单调乏味。 许多开发人员创建批处理文件来处理此任务。 下面是示例批处理文件可以 use.
@ECHO OFF
REM   Name: SRSDeploy.bat
REM
REM   This batch files copies my custom assembly to my Reporting Services folders.
REM   Run this from the directory where the customer assembly was compiled.
REM   Be sure to close any applications that have your custom assembly open. 
REM
REM   This is the SQL Server 2005 version:
copy SimpleClassLibrary.dll "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies"  
copy SimpleClassLibrary.dll "C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin" 
REM This is the SQL Server 2000 version:
REM copy SimpleClassLibrary.dll "C:\Program Files\Microsoft SQL Server\80\Tools\Report Designer"
REM copy SimpleClassLibrary.dll "C:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer\bin"
我通常通过在 $ 我的项目中创建自定义生成后事件来处理此任务。 若要这样做请转到您的项目的属性。 下一步中,单击 编译 选项卡,然后单击 生成事件。这将打开 生成事件 对话框。 选择 生成后事件命令行,然后键入以下:
副本"$ (TargetPath)""是 Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\"
复制"$ (TargetPath)""是 Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin\"
这将使用生成后宏指定我的程序集的位置。 有关创建生成后事件的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
http://msdn2.microsoft.com/en-us/library/42x5kfw4.aspx

在报表服务中添加自定义程序集的引用

若要将对您的自定义程序集的引用在报表设计器中打开报表服务报表。若要这样做,请按照下列步骤操作:
  1. 打开该报表将引用的自定义程序集。
  2. 报表 菜单上单击 报表属性
  3. 报表属性 对话框中单击 引用 选项卡。
  4. 引用,下单击是 程序集名称 列标题旁边的省略号 (...) 按钮。

    注意类别 部分仅适用于基于实例的成员。它不是静态成员。静态 (也称为"共享"中我们报告服务的文档中的一部分) 意味着该成员是可用于类的每个实例,并且每个实例都使用同一存储位置。通过使用共享的关键字在 Microsoft Visual Basic 和 C# 中的 static 关键字声明静态成员。 这可能有点令人困惑。 这意味着是如果您的自定义程序集中包含需要访问的实例成员必须在 类别 部分中指定类名和实例名。 通过使用 Visual Basic 中的共享的关键字,我将从报表服务会调用该方法被定义为静态,因为我将使用 参考 部分的 类别 部分而不是。
  5. 添加引用 对话框中单击 浏览。(SQL Server 2005 中单击 浏览 选项卡。
  6. 找到并单击自定义程序集。单击 打开。(SQL Server 2005 中单击 添加打开 代替。
  7. 添加引用 对话框中单击 确定
  8. 报表属性 对话框中单击 确定
现在,我们已准备好在报表服务中使用自定义程序集。
  1. 在报表设计器中打开报表 (.rdl 文件)。
  2. 要演示如何在报表服务中使用自定义程序集,添加一个文本框。若要执行此操作将在空白文本框中从工具箱拖动到报表中。
  3. 在文本框属性中单击 属性,然后通过使用以下语法调用函数。
    =ClassLibraryName.ClassName.MethodName or Namespace.ClassName.MethodName
    在我的示例指定以下。
    =SimpleClassLibrary.Class1.DoSomething()
    其他格式用来引用报表服务中的代码。 例如对于使用以下格式如果调用嵌入代码
    =Code.MethodName()
    如果您调用了非静态,或基于实例的方法从通过使用实例,自定义程序集内的使用以下格式。
    =Code.InstanceName.Method
    注意设置了您的引用以不同方式如果您想要使用基于实例的方法。 要这样做您将需要转到 报表属性,单击 引用 选项卡,然后指定类名和实例名称在 类别 部分中。

如果自定义程序集需要其他权限的代码访问安全性

如果自定义程序集需要更多的权限比默认执行级别权限,必须更改某些代码访问安全。 如果使用代码访问安全性是权限问题发生,您将会从您的自定义程序集的预期的结果而不是很有可能看到"#Error"。为几个步骤快速确定如果发生此问题,您可以执行和到您的自定义程序集授予额外权限的详细说明,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
842419如何向自定义报表服务中的报表中引用的程序集授予权限
注意下面的方法是一个测试来帮助确定是否发生代码访问安全问题。我们不建议使用以下方法,因为它向您的自定义程序集授予完全信任权限。

为您自定义的程序集创建新代码组,然后再授予完全信任权限。要执行此操作打开程序 Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\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>
我们建议您创建一个更具体的权限,而不是分配此权限设置为您的代码组的集。 这篇文章是让您最多目标和自定义的程序集与正在运行,这需要更多详细信息。

注意自定义程序集通常工作正常在报表设计器中。但是,您可能发现部署,然后尝试在报表服务器中运行自定义程序集时默认执行级别的权限不足。 其原因是默认情况下,报表设计器"fulltrust"权限以运行自定义程序集。 但是时到报表服务器部署您的报表,, 报表服务器中被授予的默认权限设置为执行级别。 如果发生此问题,您很可能会看到 #Error 而不是从自定义程序集的预期结果的报表控件中。

嵌入的代码

嵌入的代码是编写 报表属性 对话框的 代码 部分中的代码。 嵌入的代码是一个很好的选择将被调用几次,您的报表中的代码。 如果要重复使用多个报表中的代码自定义程序集可能是更好的选择。 若要进行非嵌入的函数,请按照下列步骤操作:
  1. 报表 菜单上单击 报表属性
  2. 单击 报表属性 对话框中的 代码 选项卡
  3. 添加下面的函数,然后单击 确定
    Public Function EmbeddedFunction() as String
     	Return "this is from embedded code function"
    End Function
    
  4. 在报表中添加一个新的文本框。
  5. 将以下代码添加到 属性。
    =code.EmbeddedFunction
我喜欢感谢 John 他努力工作,在这篇文章。 他有深入的体验 SQL Server 和几种 Microsoft 开发语言中,便于用户使用与客户合作和解决困难的问题。希望您喜欢这个月的主题 !阅读感谢 ! 与往常一样随意提交所需解决在将来的列的标题上或在使用 Ask For It 窗体的知识库中的想法。

属性

文章编号: 920769 - 最后修改: 2007年1月26日 - 修订: 1.0
这篇文章中的信息适用于:
  • Microsoft SQL Server 2005 Reporting Services
  • Microsoft SQL Server 2000 Reporting Services
关键字:?
kbmt kbhowto KB920769 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 920769
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com