ReportDocument.Load() メソッドを使ったアンマネージド RAS へのバインド
注 |
---|
このページでは、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 プロパティによって可能になります。
注 ReportClientDocument オブジェクト モデルを使用すると、レポート定義ファイルの作成、編集、および変更の保存をプログラミングできます。詳細については、アーキテクチャの「ReportClientDocument オブジェクト モデル(RAS)」を参照してください。
- Report Application Server(RAS)の優れたレポート エンジンの処理能力によって、パフォーマンスが向上します。詳細については、「Business Objects レポーティング ソリューションのアーキテクチャの比較」を参照してください。
短所
- コードを多少追加する必要があります。レポートが CrystalReportViewer コントロールと ReportDocument にバインドされるごとに、コードを 2 行追加する必要があります。次の実装セクションを参照してください。
- RAS サーバーへアップグレードすると、レポート処理のパフォーマンスが大幅に向上します。
埋め込みレポートをネットワーク上で指定されたアンマネージド RAS サーバーにロードする
- 「Report Application Server(RAS)」10 がインストールされ、正しく動作する。
- ネットワーク上でアンマネージド RAS サーバーの名前を特定し、書き込みます。この例では、サーバー名は“RAS01”です。
この手順は、「プロジェクトの設定」で作成されたプロジェクトにのみ有効です。「プロジェクトの設定」では、この手順で必要な特定の名前空間の参照とコード設定が説明されており、この設定は、この手順を完了するために必須です。したがって、この手順を始める前にまず、「プロジェクトの設定」の手順を実行しておく必要があります。
「プロジェクトの設定」で作成した ConfigureCrystalReports() メソッドには、レポートをバインドする次のコードがあります。
コードの 2 行の間に、ネットワーク上のアンマネージド RAS サーバーを特定する新しい 2 行を追加します。次に、この埋め込みレポートを RAS サーバーにロードすると、レポートが CrystalReportViewer コントロールにバインドされます。
hierarchicalGroupingReport = New Hierarchical_Grouping() myCrystalReportViewer.ReportSource = hierarchicalGroupingReport
hierarchicalGroupingReport = new Hierarchical_Grouping(); crystalReportViewer.ReportSource = hierarchicalGroupingReport;
hierarchicalGroupingReport がインスタンス化された後で、hierarchicalGroupingReport 変数の ReportAppServer プロパティに RAS サーバーの名前を入力します。
hierarchicalGroupingReport.ReportAppServer = "RAS01"
hierarchicalGroupingReport.ReportAppServer = "RAS01";
ReportDocument.Load() を呼び出します。
「プロジェクトの設定」からレポートをバインドするコードは、このコード行に続きます。
hierarchicalGroupingReport.Load("rassdk://C:\report.rpt", "RAS01")
hierarchicalGroupingReport.Load(@"rassdk://C:\report.rpt", "RAS01");
プロジェクトをコンパイルおよびデバッグします。
これで、レポートはネットワーク経由でプロジェクトからアンマネージド Report Application Server(RAS)にロードされます。
ReportDocument オブジェクト モデル内から ReportClientDocument オブジェクト モデルにアクセスする
前の手順でのデバッグ モードを終了します。
プロジェクトへの参照として、次のアセンブリを追加します。
- CrystalDecisions.ReportAppServer.ClientDoc
- CrystalDecisions.ReportAppServer.Controllers
- CrystalDecisions.ReportAppServer.DataDefModel
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;
ConfigureCrystalReports() メソッドで、Load() メソッドを呼び出すコード行と、レポートをコントロールにバインドするコード行との間に、“ModifyReport”という名前の新しいプライベート ヘルパー メソッドの呼び出しを入力します。
ModifyReport()
ModifyReport();
ModifyReport() プライベート ヘルパー メソッドを、次のサンプルごとに作成します。コードの目的は、ReportDocument オブジェクト モデル内で ReportClientDocument オブジェクト モデルへのアクセスを示すことです。このコードは、レポート上に表示されるフィールドから、最初に使用できるフィールドを削除します。
注 データベース テーブル フィールドがレポート結果フィールド コレクションにない場合、アプリケーションは例外をスローします。
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 { } } }
注 基本となる ReportClientDocument オブジェクト モデルに対してプログラムされるすべては、論理的に ReportDocument インスタンスの中で発生し、CrystalReportViewer コントロールにバインドされます。このコードのサンプルでは、ここに示されたフィールドの削除は、実行時にのみ行われます。レポート定義ファイルには保存されません。
レポートを表示するには、プロジェクトをビルドおよび実行してください。