在表达式中使用自定义代码引用 (Reporting Services)
更新日期: 2006 年 4 月 14 日
您可以向报表添加自定义函数,或添加对外部程序集中存在的函数的引用。对于 Microsoft.VisualBasic、System.Convert 和 System.Math 程序集,报表服务器会自动添加引用。对于其他程序集,可以使用**“报表属性”**对话框或在报表定义中使用 CodeModules 元素进行引用。
**“报表属性”**对话框也可以用于定义新的自定义函数。若要在报表定义中定义自定义函数,请使用 Code 元素。但是,无法向函数传递数据值集;特别要指出的是,不支持自定义聚合。
您可以编写自定义代码,在整个报表内的表达式中使用。可以采用以下两种方法执行此操作:在报表中嵌入代码或引用自定义程序集中的方法。对于复杂的函数,或在一个报表中多次使用的函数,可使用嵌入代码。若要在一个位置维护代码,或在多个报表间共享代码,则可以使用代码程序集。
嵌入代码
若要在报表中使用代码,可向报表中添加代码块。代码块可以包含多个方法。嵌入代码中的方法必须采用 Microsoft Visual Basic 编写,并且必须是基于实例的方法。
有关如何在报表中添加代码的详细信息,请参阅如何向报表添加代码(报表设计器)。
嵌入代码中的方法可通过全局定义的 Code 成员使用。您可以通过引用 Code 成员和方法名称来访问这些方法。下面的示例调用 ToUSD 方法,该方法将 StandardCost 字段中的值转换为美元值:
=Code.ToUSD(Fields!StandardCost.Value)
若要引用自定义代码中的全局集合,请包含对内置 Report 对象的引用:
=Report.Parameters!Param1
下面的示例显示如何定义某些自定义常量和变量。
Public Const MyNote = "Authored by Bob"
Public Const NCopies As Int32 = 2
Public Dim MyVersion As String = "123.456"
Public Dim MyDoubleVersion As Double = 123.456
尽管自定义常量不会出现在“表达式编辑器常量”视图(仅显示内置常量)中,但是可以从任何表达式向其中添加引用,如下面的示例所示。在表达式中,自定义常量被视为 Variant。
=Code.MyNote
=Code.NCopies
=Code.MyVersion
=Code.MyDoubleVersion
下面的示例包括函数 FixSpelling 的代码引用和代码实现,该函数用 Bicycle
替换 SubCategory 字段值中出现的所有 Bike
文本。
=Code.FixSpelling(Fields!SubCategory.Value)
嵌入报表定义之后,以下代码显示 FixSpelling 方法的实现。此自定义代码首次运行时,消息框将显示已替换的文本。此示例显示了如何引用 Microsoft .NET Framework StringBuilder 类和 System.Windows.Forms.MessageBox 类。您需要为 System.Windows.Forms 向报表属性添加引用。有关详细信息,请参阅如何向报表添加代码(报表设计器)和如何向报表添加程序集引用(报表设计器)。
Dim firstTime As Boolean = True
Public Function FixSpelling(ByVal s As String) As String
Dim strBuilder As New System.Text.StringBuilder(s)
If s.Contains("Bike") Then
strBuilder.Replace("Bike", "Bicycle")
If firstTime Then
System.Windows.Forms.MessageBox.Show(strBuilder.ToString())
' or MsgBox(strBuilder.ToString())
firstTime = False
End If
Return strBuilder.ToString()
Else : Return s
End If
End Function
有关全局对象集合以及初始化的详细信息,请参阅在表达式中使用全局集合和Initializing Custom Assembly Objects。
自定义程序集
若要在报表中使用自定义程序集,您必须先创建程序集,使其可供报表设计器使用,然后在报表中添加对该程序集的引用,最后在报表中使用表达式来引用该程序集中包含的方法。如果报表部署到报表服务器,您还必须向报表服务器部署该自定义程序集。
有关创建自定义程序集并使其可供 Reporting Services 使用的信息,请参阅 Using Custom Assemblies with Reports。有关如何在报表中添加引用的说明,请参阅如何向报表添加程序集引用(报表设计器)。
若要在表达式中引用自定义代码,您必须调用自定义程序集中某个类的成员。调用方式取决于该方法是静态方法还是基于实例的方法。自定义程序集中的静态方法可在报表内全局使用。您可以在表达式中通过指定命名空间、类和方法名称来访问静态方法。下面的示例调用 ToGBP 方法,该方法将 StandardCost 的值从美元转换为英镑:
=CurrencyConversion.DollarCurrencyConversion.ToGBP(Fields!StandardCost.Value)
基于实例的方法可通过全局定义的 Code 成员使用。您可以通过先引用 Code 成员,再引用实例和方法名称,来访问这些方法。下面的示例调用实例方法 ToEUR,该方法将 StandardCost 的值从美元转换为欧元:
=Code.m_myDollarCoversion.ToEUR(Fields!StandardCost.Value)
注意: |
---|
在报表设计器中,除非您关闭 Visual Studio,否则一旦加载自定义程序集,就不会卸载该程序集。如果预览报表后对报表所用的自定义程序集进行更改,然后再次预览该报表,则第二次预览结果中不会体现所做的更改。若要重新加载程序集,请关闭 Visual Studio,再将其重新打开,然后预览报表。 |
请参阅
其他资源
帮助和信息
更改历史记录
版本 | 历史记录 |
---|---|
2006 年 4 月 14 日 |
|
2005 年 12 月 5 日 |
|