次の方法で共有


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

更新 : 2006 年 4 月 14 日

カスタム関数や、外部アセンブリに存在する関数への参照をレポートに追加することができます。レポート サーバーは、Microsoft.VisualBasicSystem.Convert、および System.Math のアセンブリの参照を自動的に追加します。その他のアセンブリを参照するには、[レポートのプロパティ] ダイアログ ボックスか、レポート定義の CodeModules 要素を使用できます。

[レポートのプロパティ] ダイアログ ボックスでは、新しいカスタム関数を定義することもできます。レポート定義でカスタム関数を定義するには、Code 要素を使用します。ただし、関数にデータ値のセットを渡すことはできません。特に、カスタム集計はサポートされていません。

レポート全体の式で使用するカスタム コードを記述できます。これには 2 つの方法があります。レポート内にコードを埋め込む方法と、カスタム アセンブリ内のメソッドを参照する方法です。複雑な関数や 1 レポート内で何度も使用される関数には、埋め込みコードを使用します。コードを 1 か所に保持し、複数のレポートでこれを共有する場合は、コード アセンブリを使用します。

埋め込みコード

レポート内でコードを使用するには、レポートにコード ブロックを追加します。このコード ブロックには、複数のメソッドを使用できます。埋め込みコード内のメソッドは、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

次の例には、SubCategory フィールドの値に使用される Bike というテキストをすべて Bicycle に置き換える関数 FixSpelling のコード参照およびコード実装が含まれています。

=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

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

カスタム アセンブリ

レポートでカスタム アセンブリを使用するには、まずアセンブリを作成して、これをレポート デザイナが利用できるようにし、アセンブリへの参照をレポートに追加してから、レポート内の式を使用してこのアセンブリ内のメソッドを参照します。レポートがレポート サーバーに配置される場合は、カスタム アセンブリもレポート サーバーに配置する必要があります。

カスタム アセンブリを作成して Reporting Services で利用できるようにする方法については、「レポートでのカスタム アセンブリの使用」を参照してください。レポートに参照を追加する方法については、「レポートにアセンブリへの参照を追加する方法 (レポート デザイナ)」を参照してください。

式からカスタム コードを参照するには、アセンブリ内のクラスのメンバを呼び出す必要があります。この方法は、メソッドが静的であるかインスタンスベースであるかにより異なります。カスタム アセンブリ内の静的メソッドは、レポート内でグローバルに利用できます。静的メソッドには、名前空間、クラス、メソッド名を指定することによって、式からアクセスできます。次の例では、ToGBP メソッドを呼び出し、StandardCost フィールドの値をドルからポンドに変換しています。

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

インスタンスベースのメソッドは、グローバルに定義されている Code メンバを介して利用できます。まず Code メンバを参照し、続いてインスタンスとメソッド名を参照することで、これらのメソッドにアクセスできます。次の例では、ToEUR インスタンス メソッドを呼び出し、StandardCost の値をドルからユーロに変換しています。

=Code.m_myDollarCoversion.ToEUR(Fields!StandardCost.Value)
ms155798.note(ja-jp,SQL.90).gifメモ :
レポート デザイナでは、カスタム アセンブリが一度読み込まれると、Visual Studio を終了するまでアンロードされません。レポートをプレビューして、レポートで使用するカスタム アセンブリに変更を加え、その後再びレポートをプレビューした場合、2 回目のプレビューでは行った変更が表示されません。アセンブリを再度読み込むには、Visual Studio を終了してから再起動し、レポートをプレビューします。

参照

その他の技術情報

Reporting Services での式の使用

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 4 月 14 日

新しい内容 :
  • 例を追加しました。

2005 年 12 月 5 日

新しい内容 :
  • グローバル コレクションで使用する Report オブジェクトへの参照を追加しました。