次の方法で共有


キャッシュ管理ユーティリティ クラスにロードされる埋め込みでない 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 コントロールにキャッシュしてバインドする

Note

この手順は、「プロジェクトの設定」で作成されたプロジェクトにのみ有効です。「プロジェクトの設定」では、この手順で必要な特定の名前空間の参照とコード設定が説明されており、この設定は、この手順を完了するために必須です。したがって、この手順を始める前にまず、「プロジェクトの設定」の手順を実行しておく必要があります。

  1. General Business サブディレクトリで World Sales Report.rpt ファイルを探します。サンプル レポートについては、「サンプル レポートのディレクトリ」を参照してください。

  2. World Sales Report.rpt を含むすべてのファイル ディレクトリ パスをクリップボードにコピーします。

  3. 「プロジェクトの設定」で作成した 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";
    
  4. NonEmbeddedReportCacher クラスを宣言およびインスタンス化し、次に reportFile 文字列型変数に渡します。

    Note

    NonEmbeddedReportCacher クラスの作成方法については、この後に続くステップの手順に従ってください。

    Dim myNonEmbeddedReportCacher As NonEmbeddedReportCacher = _New NonEmbeddedReportCacher(reportFile)
    
    NonEmbeddedReportCacher nonEmbeddedReportCacher = new NonEmbeddedReportCacher(reportFile);
    
  5. レポート キャッシュ管理ユーティリティ クラスのインスタンスを、CrystalReportViewer コントロールの ReportSource プロパティに割り当てます。

``` vb
myCrystalReportViewer.ReportSource = myNonEmbeddedReportCacher
```

``` csharp
crystalReportViewer.ReportSource = nonEmbeddedReportCacher;
```

NonEmbeddedReportCacher キャッシュ管理ユーティリティ クラスを作成する

  1. プロジェクト内に、NonEmbeddedReportCacher という名前の新規クラスを作成します。
``` vb
Public Class NonEmbeddedReportCacher

End Class
```

``` csharp
using System;

namespace MyWebApplication
{
public class NonEmbeddedReportCacher
{
public NonEmbeddedReportCacher()
{
}
}
}
```
  1. ICachedReport インターフェイスをクラスの署名に追加します。

    Public Class NonEmbeddedReportCacher
    Implements ICachedReport
    
    public class NonEmbeddedReportCacher : ICachedReport
    
  2. 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;
```
  1. このクラスでは、2 つのクラス レベルのインスタンスを宣言します。文字列型インスタンスの reportFileName と、ReportDocument インスタンスの nonEmbeddedReportDocument です。
``` vb
Private reportFileName As String
Private nonEmbeddedReportDocument As ReportDocument
```

``` csharp
private string reportFileName;
private ReportDocument nonEmbeddedReportDocument;
```
  1. コンストラクタを設定して 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)
  2. 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
    {
    }
    }
    
  3. 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
    {
    }
    }
    
  4. 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
    {
    }
    }
    
  5. 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;
    }
    
  6. GetCustomizedCacheKey() メソッドを作成し、NULL を返します。

    Note

    このメソッドから 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;
    }
    
  7. レポートを表示するには、プロジェクトをビルドおよび実行してください。

関連項目