キャッシュ管理ユーティリティ クラスにロードされる埋め込みでない Report クラスへのバインド
オブジェクト モデル
このレポートをバインドするシナリオでは ReportDocument を使用しています(「ReportDocument オブジェクト モデルによるレポートのバインド」を参照)。
レポートの場所
レポートはファイル ディレクトリに保存されています。
説明
このレポートをバインドするシナリオは、「 キャッシュされた埋め込みレポート クラスへのバインド 」のシナリオと類似しています。このシナリオとの相違点は、レポートが埋め込みでないことです。埋め込みでないレポートの詳細については、「埋め込みレポートと埋め込みでないレポートの選択」を参照してください。
Crystal Reports for Visual Studio は、2 つの機能で ASP .NET Cache オブジェクトでのレポートのキャッシュをサポートしています。
- ビルドイン レポート キャッシュ管理フレームワークは、固有のパラメータが付いた同一のレポート、または各インスタンスで固有のキーを必要とするログオン認証がキャッシュされるのを認識します。
- インターフェイスである ICachedReport は、レポート キャッシュ管理フレームワークへのレポート キャッシュ管理ユーティリティ クラスを特定します。
「 キャッシュされた埋め込みレポート クラスへのバインド 」では、レポートがプロジェクトに埋め込まれると自動的に作成される Cached[report name]クラスについて説明します。しかし、埋め込みでないレポートを管理するキャッシュ管理ユーティリティ クラスは、手動で作成することもできます。サンプル コードは以下の実装セクションを参照してください。
レポートをキャッシュしてキャッシュ管理ユーティリティ クラスを使用する方法の詳細については、「通常のレポートとキャッシュされたレポートの選択」を参照してください。
キャッシュの使用
キャッシュは限定された特有の使い方をします。システム リソースが慎重に管理されていない場合は、システム リソースを過度に消費する可能性があります。
長所
- 共有性:共有性が高く、パラメータやログオン情報の変更を少なくしてレポートを保存するのに最適です。
- データ アクセスの最適化:共有能力に優れたレポートが膨大である場合、またはクエリーが大変複雑で取得するのに時間を要する場合も、キャッシュ管理ユーティリティ クラスによってデータへの迅速なアクセスが可能です。
短所
- サーバーの負荷:ASP.NET Cache オブジェクトに保存されるレポートによって、サーバー上でメモリ リソースに負荷がかかる場合があります。
- 永続の問題:キャッシュにはある種の依存性があり、それによってレポート インスタンス上の変更の確認や、レポート インスタンスの再キャッシュが可能になります。しかし、データベースが変更された場合、キャッシュに存在するレポート インスタンスは更新されないため、変更が反映されません。
- リソースの消費:パラメータを指定したレポートが、異なるパラメータ文字列で頻繁に呼び出されると、特にそのパラメータの 1 つがユーザー ID である場合は、その都度レポートが新しくキャッシュされます。これがシステム リソースを消費します。レポートの共有性が高くなければ、レポート インスタンスは代わりに Session オブジェクトに割り当てられます。詳細については、「Session と ReportDocument オブジェクト モデルの永続」を参照してください。
埋め込みでないレポートを CrystalReportViewer コントロールにキャッシュしてバインドする
![]() |
---|
この手順は、「プロジェクトの設定」で作成されたプロジェクトにのみ有効です。「プロジェクトの設定」では、この手順で必要な特定の名前空間の参照とコード設定が説明されており、この設定は、この手順を完了するために必須です。したがって、この手順を始める前にまず、「プロジェクトの設定」の手順を実行しておく必要があります。 |
General Business サブディレクトリで World Sales Report.rpt ファイルを探します。サンプル レポートについては、「サンプル レポートのディレクトリ」を参照してください。
World Sales Report.rpt を含むすべてのファイル ディレクトリ パスをクリップボードにコピーします。
「プロジェクトの設定」で作成した ConfigureCrystalReports() メソッドで、reportPath 文字列型変数を宣言し、前のステップでコピーした World Sales Report ファイル ディレクトリ パスを含む文字列を割り当てます。
Dim reportPath As String = _ "C:\Program Files\Microsoft Visual Studio 9.0\" _ & "Crystal Reports\Samples\En\Reports\General Business\" _ & "World Sales Report.rpt"
string reportPath = "C:\\Program Files\\Microsoft Visual Studio 9.0\\" + "Crystal Reports\\Samples\\En\\Reports\\General Business\\" + "World Sales Report.rpt";
NonEmbeddedReportCacher クラスを宣言およびインスタンス化し、次に reportFile 文字列型変数に渡します。
注
NonEmbeddedReportCacher クラスの作成方法については、この後に続くステップの手順に従ってください。
Dim myNonEmbeddedReportCacher As NonEmbeddedReportCacher = _New NonEmbeddedReportCacher(reportFile)
NonEmbeddedReportCacher nonEmbeddedReportCacher = new NonEmbeddedReportCacher(reportFile);
レポート キャッシュ管理ユーティリティ クラスのインスタンスを、CrystalReportViewer コントロールの ReportSource プロパティに割り当てます。
``` vb
myCrystalReportViewer.ReportSource = myNonEmbeddedReportCacher
```
``` csharp
crystalReportViewer.ReportSource = nonEmbeddedReportCacher;
```
NonEmbeddedReportCacher キャッシュ管理ユーティリティ クラスを作成する
- プロジェクト内に、NonEmbeddedReportCacher という名前の新規クラスを作成します。
``` vb
Public Class NonEmbeddedReportCacher
End Class
```
``` csharp
using System;
namespace MyWebApplication
{
public class NonEmbeddedReportCacher
{
public NonEmbeddedReportCacher()
{
}
}
}
```
ICachedReport インターフェイスをクラスの署名に追加します。
Public Class NonEmbeddedReportCacher Implements ICachedReport
public class NonEmbeddedReportCacher : ICachedReport
Visual Basic の場合は "Imports" 文を、C# の場合は "using" 文を、クラスの先頭に 3 つ追加します。
``` vb
Imports CrystalDecisions.Shared
Imports CrystalDecisions.ReportSource
Imports CrystalDecisions.CrystalReports.Engine
```
``` csharp
using CrystalDecisions.Shared;
using CrystalDecisions.ReportSource;
using CrystalDecisions.CrystalReports.Engine;
```
- このクラスでは、2 つのクラス レベルのインスタンスを宣言します。文字列型インスタンスの reportFileName と、ReportDocument インスタンスの nonEmbeddedReportDocument です。
``` vb
Private reportFileName As String
Private nonEmbeddedReportDocument As ReportDocument
```
``` csharp
private string reportFileName;
private ReportDocument nonEmbeddedReportDocument;
```
コンストラクタを設定して reportFileName 文字列を受け入れます。このコンストラクタで、文字列を reportFileName クラス変数に割り当てます。
Public Sub New(ByVal reportFileName As String) Me.reportFileName = reportFileName End Sub
public NonEmbeddedReportCacher(string reportFileName) { this.reportFileName = reportFileName; }
残りのステップの全実装プロパティまたはメソッドは、インターフェイスに必要となります。
- IsCacheable
- ShareDBLogonInfo
- CacheTimeOut
- CreateReport()
- GetCustomizedCacheKey(RequestContext request)
IsCacheable プロパティを作成し、True を返すようにします。
Public Overridable Property IsCacheable() As Boolean Implements ICachedReport.IsCacheable Get Return True End Get Set(ByVal Value As Boolean) End Set End Property
public virtual Boolean IsCacheable { get { return true; } set { } }
ShareDBLogonInfo プロパティを作成し、False を返すようにします。
Public Overridable Property ShareDBLogonInfo() As Boolean Implements ICachedReport.ShareDBLogonInfo Get Return False End Get Set(ByVal Value As Boolean) End Set End Property
public virtual Boolean ShareDBLogonInfo { get { return false; } set { } }
CacheTimeOut プロパティを作成し、CachedReportConstants クラスから定数値を返すようにします。
Public Overridable Property CacheTimeOut() As TimeSpan Implements ICachedReport.CacheTimeOut Get Return CachedReportConstants.DEFAULT_TIMEOUT End Get Set(ByVal Value As TimeSpan) End Set End Property
public virtual TimeSpan CacheTimeOut { get { return CachedReportConstants.DEFAULT_TIMEOUT; } set { } }
CreateReport() メソッドを作成し、クラス レベル ReportDocument インスタンスにロードされた埋め込みでないレポートを返します。
Public Overridable Function CreateReport() As ReportDocument Implements ICachedReport.CreateReport nonEmbeddedReportDocument = New ReportDocument() nonEmbeddedReportDocument.Load(reportFileName) Return nonEmbeddedReportDocument End Function
public virtual ReportDocument CreateReport() { nonEmbeddedReportDocument = new ReportDocument(); nonEmbeddedReportDocument.Load(reportFileName); return nonEmbeddedReportDocument; }
GetCustomizedCacheKey() メソッドを作成し、NULL を返します。
注
このメソッドから NULL が返されると、Crystal Reports .NET SDK はキャッシュ参照キー自体を管理します。次に示すような、独自でカスタマイズしたキャッシュ キー メソッドを作成および追加することもできます。
Public Overridable Function GetCustomizedCacheKey(ByVal request As RequestContext) As String Implements ICachedReport.GetCustomizedCacheKey Return Nothing End Function
public virtual String GetCustomizedCacheKey(RequestContext request) { return null; }
レポートを表示するには、プロジェクトをビルドおよび実行してください。