式でのカスタム コード参照の使用 (Reporting Services)

レポート内に埋め込まれたカスタム コードへの参照や、ビルドしてレポート クライアントおよびレポート サーバーに配置したカスタム アセンブリへの参照を追加することができます。カスタム定数、複雑な関数、または 1 レポート内で何度も使用される関数には、埋め込みコードを使用します。コードを 1 か所で管理し、そのコードを複数のレポートで共有する場合は、カスタム コード アセンブリを使用します。

実行時に一度評価し、レポート処理全体で同じ値を保持しておく必要のある、タイミングに依存するような計算の場合は、レポート変数とグループ変数のどちらを使用するかを検討してください。詳細については、「式におけるレポート変数コレクションとグループ変数コレクションの参照の使用 (Reporting Services)」を参照してください。

カスタム コードには、新しいカスタム定数、変数、関数、またはサブルーチンを含めることができます。Parameters コレクションなど、組み込みコレクションへの読み取り専用の参照を含めることが可能です。ただし、レポート データ値セットをカスタム関数に渡すことはできません。特に、カスタム集計はサポートされていません。

埋め込みコード

埋め込みコードをレポートに追加するには、[レポートのプロパティ] ダイアログ ボックスの [コード] ページを使用します。作成したコード ブロックでは、複数のメソッドを使用できます。埋め込みコード内のメソッドは、MicrosoftVisual Basic で記述されており、インスタンス ベースである必要があります。レポート プロセッサは、System.Convert 名前空間および System.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 Framework の StringBuilder クラスへの完全修飾参照を使用する方法を示しています。

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

組み込みのオブジェクト コレクションおよび初期化の詳細については、「式でのグローバル コレクションの使用」および「カスタム アセンブリ オブジェクトの初期化」を参照してください。

カスタム コードからパラメータを参照する例

レポート定義のコード ブロックまたはユーザーが指定したカスタム アセンブリのカスタム コードを経由してグローバル パラメータ コレクションを参照できます。パラメータ コレクションは読み取り専用で、パブリック反復子がありません。コレクションのステップ実行に Visual Basic の For 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 を終了するまでアンロードされません。レポートをプレビューして、レポートで使用するカスタム アセンブリに変更を加え、その後再びレポートをプレビューした場合、2 回目のプレビューでは行った変更が表示されません。アセンブリを再度読み込むには、Visual Studio を終了してから再起動し、レポートをプレビューします。

コードへのアクセスの詳細については、「式を使用したカスタム アセンブリへのアクセス」を参照してください。

関連項目

参照

その他の技術情報