マスターレポートはコンテンツレポートを読み込むようにデザインすることのできる動的なテンプレートのようなものです。これは、ページのヘッダにあるロゴやフッタにあるWebサイトへのリンクといった共通要素を複数のレポートで共有する場合に便利です。マスターレポートは、コントロール、コード、データソース、あるいはレイアウト系の各種プロパティを使用してデザインすることができます。これらはコンテンツレポートから変更することはできません。
マスターレポートは、レポートが実行されるたびにロードされるという点でテンプレートとは異なります。したがって、マスターレポートを変更すると、そのマスターレポートを参照するすべてのレポートに変更が自動的に適用されます。
RDLレポートでは、任意の数のコンテンツレポートに適用するマスターレポートを作成し、共通スタイルを1か所で管理することができます。
マスターレポートは、次のタスクを実行するに役立ちます。
- 変更が制限された、事前定義済みレイアウトを作成できます。
- データソースの詳細を非表示にできます。
マスターレポートのデザイン
マスターレポートをデザインするときは、コントロール、コード、データソース、レイアウト系の各種プロパティを通常のレポートと同じように使用します。マスターレポートは単独でも有効であり、コンテンツレポートなしでも実行可能です。エンドユーザーがマスターレポートを変更できないようにするには、そのユーザー、またはグループに対して当該ファイルのパーミッションを[読み取りのみ]に設定します。
マスターレポートはRDLレポートでのみ利用可能であり、テンプレートのようにコンテンツレポートに適用できるRDLX-masterファイル形式に変換されます。
ContentPlaceHolderコントロールは、RDLレポートをマスターレポートに変換するとツールボックスに表示されます。このコントロールは、マスターレポートテンプレートを適用した後にコンテンツレポートの作成、またはデザインに使用する領域を提供します。
メモ:以下の手順は、すでにRDLレポートを作成し、レポートをデータソースに接続していることを前提とします。マスターレポートはRDLレポートでのみ使用できる機能です。ページレポートでは使用することができません。
- 単体のデザイナでは、[レポート]メニュー >[マスターレポートに変換]の順に選択します。
Webデザイナでは、[レポート]メニュー >[マスターレポートに変換]の順に選択します。
Visual Studioに統合されたデザイナでは、[拡張機能]>[レポート]>[マスターレポートに変換]の順に選択します。
- レポートの上または左にあるルーラー領域を右クリックして[ページヘッダ]を選択し、続いて[ページフッタ]を選択します。
- ツールボックスからコントロールをドラッグしてページヘッダとページフッタにドロップします。これらのコントロールは、マスターレポートを適用したレポートのすべてのページに表示されます。例として、ここには会社のロゴ画像や会社のWebサイトアドレスを表示するテキストボックスなどを配置します。
-
ツールボックスからContentPlaceHolderコントロールをドラッグしてレポートにドロップします。このコントロールは、マスターレポートを使用するコンテンツレポート上のコントロールを配置できる場所を定義します。
- ツールボックスからContentPlaceHolderコントロールをドラッグしてレポートのデザイナ面上にドロップします。
- コントロールを右クリックし、表示されたコンテキストメニューから[プロパティ]を選択して[プロパティ]ウィンドウを開きます。
- ContentPlaceHolderコントロールに以下のプロパティを設定します。
プロパティ |
説明 |
Location |
コンテナーの左上隅を基準としてコントロールの位置を設定します。 |
Size |
コンテンツレポートの設計に使用できるスペースを決定するため、コントロールのサイズを設定します。 |
Text |
ユーザーに対する指示(たとえば、「ここでコンテンツレポートを設計します」など)を追加します。このキャプションは設計画面のみに表示され、最終出力には表示されません。 |
-
マスターレポートをローカル環境に保存します。単体のデザイナでは、[ファイル]メニューを使用します。
- Visual Studioに統合されたデザイナでは、[拡張機能]>[レポート] >[レイアウトファイルの保存]の順に選択します。
- [名前を付けて保存]ダイアログが表示され、レポートを保存する場所へ移動して[保存]をクリックし、レポートをrdlx-masterファイル形式で保存します。
コンテンツレポートの作成
マスターレポートを適用する対象のレポートのことをコンテンツレポートと呼びます。コンテンツレポートは単独では無効であり、指定したマスターレポートなしに実行することができません。
ユーザーが新しいレポートを作成し、そのレポートに対してマスターレポートを設定すると、コンテンツレポートのデザイン画面に切り替わります。また、ContentPlaceHolderコントロールで覆われたレポートコントロールは、コンテンツレポートのデザイン時には見えませんが、実行時には表示されることに注意してください。ContentPlaceHolderコントロールは、ユーザーがレポートコントロールを追加することのできる唯一の領域です。
- マスターレポートを適用するレポートを開き、[レポート]メニュー > [マスターレポートに変換]の順に選択します。
- [開く]ダイアログが表示されたら、マスターレポートが保存されている場所に移動してマスターレポートを開きます。マスターレポートのレイアウトがコンテンツレポートに適用され、ContentPlaceHolderが配置された領域のみが使用可能になり、それ以外の領域はすべてロックされます。
コンテンツレポートのデザイン時にユーザーができること
- マスターレポートに存在しない要素を追加する。
- マスターレポートに存在しない新しいデータソースを追加する。
- マスターレポートのデータソースから新しいデータセットを追加する。
- EmbeddedImagesコレクションに画像を追加する。
- ReportParameterコレクションにパラメータを追加する。
- マスターレポートで指定されたプレースホルダ矩形に任意の数のレポートコントロールを追加する。
- レポートの名前と説明を変更する。
- マスターレポートに存在しない新しいカスタムコードを追加する。
コンテンツレポートのデザイン時にユーザーができないこと
実行時のイベントの順序
コンテンツレポートを実行するとき、その背後では以下の処理が行われます。
- ActiveReportsがコンテンツレポートをロードします。
- ローダーがコンテンツレポートのマスターレポートタグを解析し、リソースリゾルバーにマスターレポートを要求します。
- マスターレポートが定義にロードされます。
- コンテンツレポートの各ContentPlaceHolderが解析されると、そのたびにマスターレポート内の対応するプレースホルダが特定され、コンテンツレポートの内容がそのプレースホルダに読み込まれます。
- データソース、データセット、およびフィールドがマージされます。競合がある場合はマスターレポートが優先されます。
- テーマがマージされます。競合がある場合はマスターレポートの方が優先されます。
- コンテンツレポートのレポートプロパティが、マスターレポートのレポートプロパティに追加されます。以下のプロパティについては、競合がある場合はコンテンツレポートが優先されます。
- Report Description
- Report Author
- Report AutoRefresh
- Report Custom
- Report Language
- Report DataTransform
- Report DataSchema
- Report ElementName
- Report DataElementStyle
- データセットのフィルタ
- Report Theme
- Report Code
- ContentPlaceHolderコントロール内にあるすべてのコンテンツ
集約されたレポート定義の変更
コンテンツレポートを実行すると、コンテンツレポートとそのマスターを組み合わせて集約したレポート定義が作成されます。ReportDefinition APIを使用して、実行時にこの集約結果を、マスターレポートもコンテンツレポートも持たない3番目のレポート定義として保存することができます。集約結果を通常のレポート定義(*.rdlxファイル)として保存した後、そのファイルを他のレポート定義と同様に編集することができます。
マスターレポートの利点
- マスターレポート内に一貫したページヘッダやフッタを追加するなど、レポート共通の機能を実装することができる。
- 全社的な情報の変更(住所の変更など)があった場合に、各レポートを個別に変更するのではなく、単一のマスターだけを変更すればよい。
- データに関する広範な変更(データソースの変更など)があった場合、マスターレポートに変更を適用するだけでコンテンツレポートにも同じ変更が反映される。
- アプリケーション全体、または企業全体に共通するコード、データソース、テーマ、ページレイアウトを作成することができる。
- スタンドアロンのデザイナアプリケーションを使用してコンテンツレポートを作成するエンドユーザーに対してレポートの複雑さが見えないようにする。