場合によっては、カスタムアセンブリクラスをインスタンス化する際にプロパティ値やフィールド値を初期化する必要があるかもしれません。 おそらく、レポートのグローバルオブジェクトコレクションから利用可能な値でカスタムクラスを初期化する必要があるでしょう。 これはレポートのCodeオブジェクトのOnInitメソッドを上書きすることで行います。 OnInitにアクセスするには、レポート定義のコード要素を使用します。 レポートで使う予定のカスタムアセンブリでクラスのプロパティ値やフィールド値を初期化する技術は2つあります。 OnInitを使ってクラスの新しいインスタンスを宣言して作成するか、 OnInitを使って公開可能なメソッドを呼び出すかです。
グローバルオブジェクトコレクションと初期化
カスタムクラス変数の初期化には、いくつかのコレクションが利用可能です。 グローバルコレクションやユーザーコレクションを利用できます。 OnInitメソッドが呼び出されるレポートライフサイクルの時点では、Parameters、Fields、ReportItemsのコレクションは利用できません。 共有コレクション、 Globals または Userを使うには、 Report object referenceを含める必要があります。 例えば、レポートにアクセスするユーザーの現在の言語に基づいてカスタムクラスを初期化する場合、 コード 要素は以下のようになります。
Dim m_myClass As MyClass
Protected Overrides Sub OnInit()
m_myClass = new MyClass(Report.User!Language, _
Report.Globals!ExecutionTime)
End Sub
先に示したようにクラスのプロパティ値やフィールド値を初期化する一つの方法は、クラスを宣言し、上書きされたコンストラクタを呼び出して新しいインスタンスを作成することです。
カスタムアセンブリ内のクラスのプロパティやフィールド値を初期化するもう一つの方法は、 OnInit メソッドから定義した公開メソッドを呼び出すことです。 まず、レポートの定義ファイルにクラスのインスタンス名を追加する必要があります。 適切なアセンブリ参照とインスタンス名を追加したら、初期化メソッドを呼び出してクラスのプロパティ値とフィールド値を初期化できます。 OnInitの方法は次のようなものかもしれません:
Protected Overrides Sub OnInit()
m_myClass.MyInitializationMethod(Report.User!Language, _
Report.Globals!ExecutionTime)
End Sub
カスタムクラスのアセンブリ参照とインスタンス名の追加について詳しくは、「 Add an assembly Reference to a Report(SSRS)」をご覧ください。
グローバルオブジェクトコレクションの詳細については、「Expressions in Built-in Collections (Report Builder および SSRS)」をご覧ください。