埋め込みレポートと埋め込みでないレポートの選択
Crystal Reports SDK を使用してアプリケーションのビルドを計画するにあたり最も重要な検討事項の 1 つに、埋め込みレポートと埋め込みでないレポートの選択があります。レポートの埋め込みに影響を与える SDK の基本を理解することにより、目的の Crystal Reports for Visual Studio プロジェクトに最も適した構造を選択できます。
埋め込みレポートと埋め込みでないレポートの相違点
埋め込みレポートは、Visual Studio .NET プロジェクトにインポートされたレポート、または Visual Studio プロジェクトで作成されたレポートです。レポートがプロジェクトに埋め込まれると、そのレポートのラッパー クラスが自動的に生成されます。これにより、個別の ReportDocument インスタンスを使用しなくても、名前でレポートにアクセスできます。
埋め込みでないレポートは、その Visual Studio プロジェクトに属さないレポートです。プログラムによるレポートとの対話を可能にする目的で、このレポートにアクセスしてオブジェクト モデルにロードする方法は多数あります。しかし、レポート自体は常にプロジェクトの外部に存在します。
埋め込みレポートの機能
レポートがプロジェクトにインポートされた場合や、プロジェクト内でレポートが作成された場合には、レポートと同じ名前のラッパー クラスが作成されます。このラッパー クラスは、プロジェクト内のレポートをラップ(表示)します。ラッパー クラスが作成されると、プロジェクトのすべてのコードは元のレポート ファイルそのものではなく、そのレポートの代わりとなるために作成されたこのレポート クラスと対話します。
このプロジェクトをコンパイルすると、他のプロジェクト リソースの場合と同様に、レポートとラッパー クラスの両方がアセンブリに埋め込まれます。
注 |
---|
.NET Framework では、DLL ファイルのサイズに制限があります。つまり、大きな埋め込みレポートを含むプロジェクトは、コンパイルできないことがあります。大きなレポートを使用するプロジェクトについては、レポートの保存データを無効にするか、埋め込みでないレポートを使用するようにプロジェクトを変更します。サイズ制限は、.NET Framework のバージョンによって異なります。詳細については、.NET Framework のドキュメントを参照してください。 |
レポート ラッパー クラスは、共通の基本クラスである ReportDocument から継承します。これは、ReportDocument のすべてのプロパティとメソッドを継承します。
注 |
---|
このマニュアルの以前のバージョンでは、埋め込みレポートは“厳密に型指定された”レポートと呼ばれていました。Visual Studio プロジェクトに追加またはインポートされたレポートを意味する用語として、現在は“埋め込み”が使用されています。 |
ReportDocument は、ReportDocument オブジェクト モデルのルート クラスです。
埋め込みでないレポートの機能
埋め込みでないレポートは、次のさまざまな方法で常に外部からアクセスされ、SDKにアクセス可能となります。
- ファイル ディレクトリ パスが示すハード ディスク ドライブにレポートが置かれている場合(「コードによるファイル ディレクトリ パスへのバインド」を参照してください)
- レポート Web サービスとしてレポートが公開されている場合(「レポート Web サービス URL へのバインド」を参照してください)
- レポートが Crystal サービスを経由して公開されているレポートのグループのうちの 1 つである場合(「Crystal サービスを使用して CrystalReportViewer をバインドするシナリオ」を参照してください)
埋め込みでないレポートは、プロジェクトにインポートされないため、埋め込みレポートとは異なり、レポート ラッパー クラスは作成されません。その代わり、埋め込みでないレポートは次のそれぞれの方法で実行時にオブジェクト モデルの 1 つにロードされます。
- ReportDocument オブジェクト モデルは、ReportDocument.Load() メソッドを使用してレポートを ReportDocument オブジェクト モデルにロードします。
注 これは、ファイル ディレクトリ パスに置かれているレポートの場合にのみ適用されます。
- CrystalReportViewer オブジェクト モデルは、CrystalReportViewer.ReportSource プロパティを使用して、レポートをコントロールに直接バインドします。
注 ReportDocument オブジェクト モデルの使用をお勧めします。詳細については、「適切なオブジェクト モデルの選択」を参照してください。
埋め込みレポートを選択する場合と埋め込みでないレポートを選択する場合
プロジェクトのデプロイメントを単純化したい場合には、埋め込みレポートを使用します。これによって、操作するファイル数が少なくなり、レポートを正しくないファイル ディレクトリ パスに置き間違える心配がなくなります。また、この選択により、変更のためにレポートを公開する場合のセキュリティが高まります。
さらに、初めて Visual Studio を使用して Crystal Reports の構築とデプロイメントを学習する場合には、レポートを埋め込む操作の方がより容易です。いったんレポートが埋め込まれると、そのレポートはクラスとしてプロジェクト内に存在することになるため、レポートを IntelliSense 経由で取得し Object Browser で表示できます。レポートがファイル ディレクトリ内で移動または削除されたり、ファイルのパスを不正確に記述したりする心配がありません。
埋め込みレポートは簡単でセキュリティが高いものの、追加の操作が必要になります。埋め込みレポートを変更する場合には、プロジェクト全体を再コンパイルする必要があります。定期的にレポートを変更する必要がある場合には、レポートを埋め込まずにおく方がレポートへのアクセスや変更が容易になります。変更のたびにアセンブリを再コンパイルする必要がなくなります。また、埋め込みレポートの大きさについても制限があります。非常に大きいレポートは埋め込みリソースとしてコンパイルします。
また、埋め込みでないレポートはスケーラビリティの点で優れています。
レポートのバインドについてのシナリオで、埋め込みレポートと埋め込みでないレポートをバインドする方法が数多く示されます(「レポートをバインドする適切なシナリオの選択」を参照)。ReportDocument を両方のタイプのレポートへの一般的なクラスとして使用する方法についても学習できます。これにより、アプローチの変更が必要になった場合でも、コードの変更を最低限に抑えることができます。
.NET 2.0 Framework を使用する Web プロジェクトにレポートを埋め込む
これまで .NET 2.0 Framework を使用する Web プロジェクトでは埋め込みレポートを使用できませんでしたが、Crystal Reports 2008 を使用すると、すべての Web アプリケーションで埋め込みレポートを使用できます。これにより、名前でレポートにアクセスしたり、レポートを DLL にコンパイルすることができます。
開発環境 |
埋め込みレポート |
埋め込みでないレポート |
---|---|---|
Crystal Reports for Visual Studio .NET 2003 |
○ |
○ |
Crystal Reports for Visual Studio 2005 |
○ |
|
Crystal Reports 2008 および Visual Studio .NET 2005 |
○ |
○ |
埋め込みレポートは、レポートを DLL ファイルにコンパイルするビルド プロバイダを使用してサポートされます。コンパイル時にレポートを DLL に埋め込むには、web.config ファイルの embedRptInResource 設定を true に設定する必要があります。Intellisense を使用してラッパー クラスにアクセスするには、ソリューションの App_Code/Global フォルダにレポートを配置する必要があります。
注 |
---|
レポートが App_Code/Global ディレクトリにあり、embedRptInResource が false に設定されている場合は、Web サイトを公開するときに、レポート ファイルが公開先にコピーされません。この問題を回避するには、代わりに Web サイトをターゲットにコピーします。 |
embedRptInResource |
レポートの場所 |
Intellisense を利用可能 |
公開してデプロイ |
コピーしてデプロイ |
---|---|---|---|---|
True |
App_Code/Global |
○ |
○ |
○ |
True |
App_Code/Global の外で、プロジェクト内 |
○ |
○ |
|
False |
App_Code/Global |
○ |
○ |
○ |
False |
App_Code/Global の外で、プロジェクト内 |
○ |