次の方法で共有


ReportDocument.Load() メソッドを使ったアンマネージド RAS へのバインド

Note

このページでは、Crystal Reports for Visual Studio では使用できなかったが、アップグレード バージョンで使用可能になった機能について説明します。Crystal Reports for Visual Studio の詳細については、「Crystal Reports for Visual Studio について」を参照してください。アップグレード バージョンについての詳細情報は、「アップグレード オプション」を参照してください。

オブジェクト モデル

このレポートをバインドするシナリオでは ReportClientDocument を使用しています(「ReportClientDocument オブジェクト モデルによるレポートのバインド(RAS)」を参照)。

レポートの場所

レポートはプロジェクトに埋め込まれます。レポートは実行時に、ネットワーク経由で指定された「Report Application Server(RAS)」にロードされます。

説明

Crystal Reports for Visual Studio で埋め込みレポートと ReportDocument オブジェクト モデルを使用する Visual Studio プロジェクトは、アンマネージド RAS サーバーへ容易にポートできます。

このシナリオでは、埋め込みレポートはネットワーク経由で指定されたアンマネージド Report Application Server(RAS)にロードされます。サンプル コードとして、次の実装セクションを参照してコードに 2 行追加してください。

  • RAS サーバー名を ReportDocument.ReportAppServer プロパティに割り当てます。
  • ReportDocument.Load() メソッドを呼び出します。

埋め込みレポートは ReportDocument オブジェクト モデルに書き込まれますが、Crystal Reports Developer では ReportClientDocument オブジェクト モデルを使用する RAS サーバーに埋め込みレポートを直接バインドできます。これが可能になったのは、Crystal Reports Developer では ReportDocument オブジェクト モデルが、ReportClientDocument オブジェクト モデルを指定するプロキシ層として再度書き込まれるためです。詳細については、「ReportClientDocument オブジェクト モデル(RAS)」を参照してください。

基本となる ReportClientDocument オブジェクト モデルは、ReportDocument.ReportClientDocument プロパティから直接アクセスできます。これにより、ReportClientDocument オブジェクト モデルで実行時にレポートを修正することが可能になります。

長所

  • ReportDocument オブジェクト モデルを使用するレポートと対話するオリジナル コードをすべて管理できます。同時に、基本となる ReportClientDocument オブジェクト モデルへのフル アクセスが、ReportDocument.ReportClientDocument プロパティによって可能になります。
    Note

    ReportClientDocument オブジェクト モデルを使用すると、レポート定義ファイルの作成、編集、および変更の保存をプログラミングできます。詳細については、アーキテクチャの「ReportClientDocument オブジェクト モデル(RAS)」を参照してください。

  • Report Application Server(RAS)の優れたレポート エンジンの処理能力によって、パフォーマンスが向上します。詳細については、「Business Objects レポーティング ソリューションのアーキテクチャの比較」を参照してください。

短所

  • コードを多少追加する必要があります。レポートが CrystalReportViewer コントロールと ReportDocument にバインドされるごとに、コードを 2 行追加する必要があります。次の実装セクションを参照してください。
  • RAS サーバーへアップグレードすると、レポート処理のパフォーマンスが大幅に向上します。

埋め込みレポートをネットワーク上で指定されたアンマネージド RAS サーバーにロードする

  • 「Report Application Server(RAS)」10 がインストールされ、正しく動作する。
  • ネットワーク上でアンマネージド RAS サーバーの名前を特定し、書き込みます。この例では、サーバー名は“RAS01”です。

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

  1. 「プロジェクトの設定」で作成した ConfigureCrystalReports() メソッドには、レポートをバインドする次のコードがあります。

    コードの 2 行の間に、ネットワーク上のアンマネージド RAS サーバーを特定する新しい 2 行を追加します。次に、この埋め込みレポートを RAS サーバーにロードすると、レポートが CrystalReportViewer コントロールにバインドされます。

    hierarchicalGroupingReport = New Hierarchical_Grouping()
    myCrystalReportViewer.ReportSource = hierarchicalGroupingReport
    
    hierarchicalGroupingReport = new Hierarchical_Grouping();
    crystalReportViewer.ReportSource = hierarchicalGroupingReport;
    
  2. hierarchicalGroupingReport がインスタンス化された後で、hierarchicalGroupingReport 変数の ReportAppServer プロパティに RAS サーバーの名前を入力します。

    hierarchicalGroupingReport.ReportAppServer = "RAS01"
    
    hierarchicalGroupingReport.ReportAppServer = "RAS01";
    
  3. ReportDocument.Load() を呼び出します。

    「プロジェクトの設定」からレポートをバインドするコードは、このコード行に続きます。

    hierarchicalGroupingReport.Load("rassdk://C:\report.rpt",
    "RAS01")
    
    hierarchicalGroupingReport.Load(@"rassdk://C:\report.rpt",
    "RAS01");
    
  4. プロジェクトをコンパイルおよびデバッグします。

これで、レポートはネットワーク経由でプロジェクトからアンマネージド Report Application Server(RAS)にロードされます。

ReportDocument オブジェクト モデル内から ReportClientDocument オブジェクト モデルにアクセスする

  1. 前の手順でのデバッグ モードを終了します。

  2. プロジェクトへの参照として、次のアセンブリを追加します。

    • CrystalDecisions.ReportAppServer.ClientDoc
    • CrystalDecisions.ReportAppServer.Controllers
    • CrystalDecisions.ReportAppServer.DataDefModel
  3. Visual Basic の場合は“Imports”文を、C# の場合は“using”文を、クラスの先頭に 3 つ入力します。

    Imports CrystalDecisions.ReportAppServer.ClientDoc
    Imports CrystalDecisions.ReportAppServer.Controllers
    Imports CrystalDecisions.ReportAppServer.DataDefModel
    
    using CrystalDecisions.ReportAppServer.ClientDoc;
    using CrystalDecisions.ReportAppServer.DataDefModel;
    using CrystalDecisions.ReportAppServer.Controllers;
    
  4. ConfigureCrystalReports() メソッドで、Load() メソッドを呼び出すコード行と、レポートをコントロールにバインドするコード行との間に、“ModifyReport”という名前の新しいプライベート ヘルパー メソッドの呼び出しを入力します。

    ModifyReport()
    
    ModifyReport();
    
  5. ModifyReport() プライベート ヘルパー メソッドを、次のサンプルごとに作成します。コードの目的は、ReportDocument オブジェクト モデル内で ReportClientDocument オブジェクト モデルへのアクセスを示すことです。このコードは、レポート上に表示されるフィールドから、最初に使用できるフィールドを削除します。

    Note

    データベース テーブル フィールドがレポート結果フィールド コレクションにない場合、アプリケーションは例外をスローします。

    Private Sub ModifyReport()
    Dim myReportClientDocument As ISCDReportClientDocument = _
    hierarchicalGroupingReport.ReportClientDocument
    Dim myTables As Tables = _
    myReportClientDocument.DatabaseController.Database.Tables
    Dim myTable As CrystalDecisions.ReportAppServer.DataDefModel.Table
    myTable = CType(myTables(0), CrystalDecisions.ReportAppServer.DataDefModel.Table)
    Dim myFields As Fields = myTable.DataFields
    
    Dim myField As ISCRField
    For Each myField In myFields
    Dim myResultFieldController As ResultFieldController = _
    myReportClientDocument.DataDefController.ResultFieldController
    Try
    myResultFieldController.Remove(myField)
    Exit For
    Catch
    End Try
    Next
    End Sub
    
    private void ModifyReport()
    {
    ISCDReportClientDocument reportClientDocument = hierarchicalGroupingReport.ReportClientDocument;
    Tables tables = reportClientDocument.DatabaseController.Database.Tables;
    CrystalDecisions.ReportAppServer.DataDefModel.Table table =
    (CrystalDecisions.ReportAppServer.DataDefModel.Table)tables[0];
    Fields fields = table.DataFields;
    
    for (int i = 0; i < fields.Count; i++)
    {
    ISCRField field = fields[i];
    ResultFieldController resultFieldController =
    reportClientDocument.DataDefController.ResultFieldController;
    try
    {
    resultFieldController.Remove(field);
    break;
    }
    catch
    {
    }
    }
    }
    
    Note

    基本となる ReportClientDocument オブジェクト モデルに対してプログラムされるすべては、論理的に ReportDocument インスタンスの中で発生し、CrystalReportViewer コントロールにバインドされます。このコードのサンプルでは、ここに示されたフィールドの削除は、実行時にのみ行われます。レポート定義ファイルには保存されません。

  6. レポートを表示するには、プロジェクトをビルドおよび実行してください。

関連項目