Share via


使用運算式中的自訂程式碼參考 (Reporting Services)

您可以加入內嵌於報表的自訂程式碼的參考,或建置及部署到報表用戶端和報表伺服器的自訂組件的參考。 請將內嵌程式碼用在自訂常數、複雜函數或在單一報表內重複使用的函數上。 請使用自訂程式碼組件來將程式碼維護在單一位置,並供多份報表使用。

對於具有時間感應的計算 (在執行階段時會評估一次,而您想在整個報表處理期間維持相同的值),則請考慮是否要使用報表或群組變數。 如需詳細資訊,請參閱<使用運算式中的報表和群組變數集合參考 (Reporting Services)>。

自訂程式碼可能會包含新的自訂常數、變數、函數或副程式。 您可以包含內建集合 (例如 Parameters 集合) 的唯讀參考, 但是不能將報表資料值集傳遞至自訂函數 (尤其是不支援自訂彙總)。

內嵌程式碼

若要將內嵌程式碼加入至報表,請使用 [報表屬性] 對話方塊的 [程式碼] 頁面。 您建立的程式碼區塊可以包含多個方法。 內嵌程式碼中的方法必須用 MicrosoftVisual Basic 來撰寫,且必須以執行個體為基礎。 報表處理器會自動加入 System.ConvertSystem.Math 命名空間的參考。 請使用 [報表屬性] 對話方塊的 [參考] 頁面來加入其他的組件參考。 如需詳細資訊,請參閱<如何:將程式碼加入至報表 (Reporting Services)>和<如何:將組件參考加入至報表 (Reporting Services)>。

內嵌程式碼裡的方法,可透過全域定義的 Code 成員使用。 您可藉由參考 Code 成員與方法名稱,來存取這些方法。 下列範例會呼叫 ToUSD 方法,這個方法會將 StandardCost 欄位的值轉換成美金值:

=Code.ToUSD(Fields!StandardCost.Value)

若要參考自訂程式碼中的內建集合,請加入內建 Report 物件的參考:

=Report.Parameters!Param1.Value

下列範例顯示定義部分自訂常數及變數的方法。

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 函數的程式碼參考和程式碼實作,這個函數會將 SubCategory 欄位中所有出現的 "Bike" 文字以 Bicycle" 取代。

=Code.FixSpelling(Fields!SubCategory.Value)

將下列程式碼內嵌在定義程式碼區塊後,會顯示 FixSpelling 方法的實作。 此範例告訴您如何使用 Microsoft.NET FrameworkStringBuilder 類別的完整參考。

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")
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

如需有關內建物件集合和初始化的詳細資訊,請參閱<在運算式中使用全域集合>和<初始化自訂組件物件>。

從自訂程式碼參考參數的範例

您可以透過報表定義之程式碼區塊內或您所提供之自訂組件內的自訂程式碼,參考全域參數集合。 此參數集合是唯讀的,而且沒有任何公用 Iterator。 您不能使用 Visual BasicFor Each 建構來逐步執行此集合。 您必須先知道報表定義中所定義的參數名稱,才可以在程式碼中參考它。 但是,您可以逐一查看多重值參數的所有值。 如需詳細資訊,請參閱<使用運算式中的自訂程式碼參考 (Reporting Services)>。

下表包含從自訂程式碼參考內建 Parameters 集合的範例:

描述

運算式中的參考

自訂程式碼定義

將整個全域參數集合傳遞給自訂程式碼。

這個函數會傳回特定報表參數 MyParameter 的值。

=Code.DisplayAParameterValue(Parameters)

Public Function DisplayAParameterValue(

ByVal parameters as Parameters) as Object

Return parameters("MyParameter").Value

End Function

將個別參數傳遞給自訂程式碼。

這個範例會傳回所傳入的參數值。如果該參數為多重值參數,則傳回字串會是所有值的串連。

=Code.ShowParametersValues(Parameters!DayOfTheWeek)

Public Function ShowParameterValues(ByVal parameter as Parameter)
 as String
   Dim s as String 
   If parameter.IsMultiValue then
      s = "Multivalue: " 
      For i as integer = 0 to parameter.Count-1
         s = s + CStr(parameter.Value(i)) + " " 
      Next
   Else
      s = "Single value: " + CStr(parameter.Value)
   End If
   Return s
End Function

自訂組件

若要在報表中使用自訂組件,您必須先建立組件,並設定報表設計師可以使用該組件,在報表中加入對該組件的參考,然後在報表中使用運算式來參考該組件內含的方法。 報表部署至報表伺服器時,您也必須將自訂組件部署至報表伺服器。

如需有關建立自訂組件,並讓 Reporting Services 可以使用組件的詳細資訊,請參閱<將自訂組件與報表搭配使用>。 如需有關如何將參考加入至報表的指示,請參閱<如何:將組件參考加入至報表 (Reporting Services)>。

若要在運算式中參考自訂程式碼,您必須在組件中呼叫類別的成員。 該如何完成,取決於此方法為靜態或以執行個體為基礎。 報表內的全域都可以使用自訂組件內的靜態方法。 您可以藉著指定命名空間、類別和方法名稱,來存取運算式中的靜態方法。 下列範例會呼叫 ToGBP 方法,這個方法會將 StandardCost 欄位值從美元轉換為英鎊:

=CurrencyConversion.DollarCurrencyConversion.ToGBP(Fields!StandardCost.Value)

以執行個體為基礎的方法,可透過全域定義的 Code 成員來使用。 您可以藉由參考 Code 成員,然後參考執行個體與方法名稱,來存取這些方法。 下列範例會呼叫 ToEUR 執行個體方法,這個方法會將 StandardCost 欄位值從美元轉換為歐元:

=Code.m_myDollarCoversion.ToEUR(Fields!StandardCost.Value)

[!附註]

在 [報表設計師] 中,自訂組件會載入一次,然後在關閉 Visual Studio 之前,都不會卸載。 如果您要預覽報表,請變更報表中使用的自訂組件,然後再次預覽報表,在第二次預覽中將不會顯示變更。 若要重新載入組件,請關閉再重新開啟 Visual Studio,再預覽報表。

如需有關存取程式碼的詳細資訊,請參閱<透過運算式存取自訂組件>。