ReportDocument.Load() メソッドを使ったマネージド RAS サーバーへのバインド
注 |
---|
このページでは、Crystal Reports for Visual Studio では使用できなかったが、アップグレード バージョンで使用可能になった機能について説明します。Crystal Reports for Visual Studio の詳細については、「Crystal Reports for Visual Studio について」を参照してください。アップグレード バージョンについての詳細情報は、「アップグレード オプション」を参照してください。 |
オブジェクト モデル
このレポートをバインドするシナリオでは ReportClientDocument を使用しています(「ReportClientDocument オブジェクト モデルによるレポートのバインド(RAS)」を参照してください)。
レポートの場所
レポートがコピーされ 2 つの場所に存在する数少ないシナリオの 1 つです。その場所とは、Web プロジェクト内の埋め込みレポートと、マネージド RAS サーバーによって公開される Crystal Reports Server または BusinessObjects Enterprise リポジトリです(「Report Application Server(RAS)」を参照)。
注 |
---|
レポートは最終的にリモート サーバーから表示されるため、このレポートをバインドするシナリオは、(「ReportDocument クラスにロードされる埋め込みでないレポートへのバインド」で実装されているように、)埋め込みでないレポートにも利用できます。 |
説明
Crystal Reports for Visual Studio で埋め込みレポートと ReportDocument オブジェクト モデルによって作成された Web プロジェクトは、Crystal Reports Server または BusinessObjects Enterprise 内のマネージド RAS サーバーへ容易にポートできます。
このシナリオでは、公開ウィザードを使用してレポートのコピーを Crystal Reports Server または BusinessObjects Enterprise に置くことによって、実行時に埋め込みレポートをマネージド RAS サーバーにバインドします。埋め込みレポート用の既存のコードは機能し続けますが、そのレポートのソースをマネージド RAS サーバーにリダイレクトするには、次の操作を実行します。
- Crystal Reports Server または BusinessObjects Enterprise ログオン機能をプロジェクトに追加し、EnterpriseSession インスタンスを取得します。
- 複製されたレポートを Crystal Reports Server または BusinessObjects Enterprise から InfoObject のインスタンスとして取得します。
- Enterprisesession インスタンスと InfoObject インスタンスを、埋め込みレポートの ReportDocument.Load() メソッドに渡します。
また、非埋め込みレポートをマネージド RAS サーバーにバインドすることもできます。これを実行するには、「ReportDocument クラスにロードされる埋め込みでないレポートへのバインド」で説明されているように、ReportDocument.Load(String filename)メソッドへの呼び出しを削除し、上のステップで説明されているコードに置き換えます。
このシナリオでは、Crystal Reports Developer で、ReportDocument オブジェクト モデルを使用する埋め込みレポートまたは非埋め込みレポートを、ReportClientDocument オブジェクト モデルを使用する RAS サーバーに直接バインドできることを示します。どうしてそれが可能なのでしょうか。Crystal Reports 10 では ReportDocument オブジェクト モデルが、ReportClientDocument オブジェクト モデルを指定するプロキシ層として再度書き込まれたためです。詳細については、アーキテクチャの「ReportClientDocument オブジェクト モデル(RAS)」を参照してください。
注 |
---|
InfoObject インスタンスは、マネージド RAS サーバーからレポートを参照します。マネージド RAS サーバー上のレポートは、埋め込みレポートとバージョンや名前が異なっていても、常に表示されます。 |
基本となる ReportClientDocument オブジェクト モデルは、ReportDocument.ReportClientDocument プロパティから直接アクセスでき、ReportClientDocument オブジェクト モデルによって実行時にレポートを修正することができます。
長所
- 移植の容易性:ReportDocument オブジェクト モデルを使用してレポートと対話するオリジナル コードをすべて保守し、さらに ReportDocument.ReportClientDocument プロパティを通して基本となる ReportClientDocument オブジェクト モデルへのフル アクセスを提供します。
注 ReportClientDocument オブジェクト モデルを使用すると、レポート定義ファイルの作成、編集、および変更の保存をプログラミングできます。詳細については、アーキテクチャの「ReportClientDocument オブジェクト モデル(RAS)」を参照してください。
- パフォーマンスの最適化:Report Application Server(RAS)のレポート エンジンの優れた処理能力によって、パフォーマンスが大幅に向上します。詳細については、「Business Objects レポーティング ソリューションのアーキテクチャの比較」を参照してください。
短所
- コードの若干の追加:プロジェクトにログインし、EnterpriseSession オブジェクトを取得して ASP.NET Session に保存する必要があります。レポートが ReportDocument と共に CrystalReportViewer コントロールにバインドされるごとに、InfoObject を取得して Load() メソッドを呼び出す必要があります。
- メンテナンスの増加:埋め込みレポートを Crystal Reports Server または BusinessObjects Enterprise にコピーするため、必要なメンテナンス作業が増加します。レポートを修正または削除する場合は、Web プロジェクトの埋め込みレポートと、Crystal Reports Server または BusinessObjects Enterprise に保存されているレポートのコピーの両方に対して、それらの変更を反映させる必要があります。
レポートの InfoObject を ReportDocument の Load メソッドと共に使用して Crystal Reports Server または BusinessObjects Enterprise に保存された埋め込みレポートのコピーを表示する
- Crystal Reports Server または BusinessObjects Enterprise がインストールされ、正しく動作する。
- Crystal Reports Server または BusinessObjects Enterprise SDK(.NET アセンブリを含む)がインストールされ、正しく動作する。
注 Crystal Reports Server または BusinessObjects Enterprise を開発用のマシンにインストールしている場合、SDK はそのインストールに含まれます。
この手順は、「プロジェクトの設定」で作成されたプロジェクトにのみ有効です。「プロジェクトの設定」では、この手順で必要な特定の名前空間の参照とコード設定が説明されており、この設定は、この手順を完了するために必須です。したがって、この手順を始める前にまず、「プロジェクトの設定」の手順を実行しておく必要があります。
注 |
---|
RAS サーバーは Web プロジェクトでのみ機能します。 |
- Crystal Reports Server または BusinessObjects Enterprise サーバーを探し、その名前をメモします。この例では、サーバー名は"BOE01"です。
1. サーバー名を調べるには、[マイ コンピュータ]アイコンを右クリックして[プロパティ]を選択します。
2. [システムのプロパティ]ダイアログ ボックスで、[コンピュータ名]タブをクリックします。
3. [フル コンピュータ名]フィールドの名前がコンピュータ名です。
- 公開ウィザードを使って Hierarchical Grouping.rpt を Crystal Reports Server または BusinessObjects Enterprise サーバーに公開します。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/w5dk7atd.alert_note(ja-jp,VS.90).gif" title="Note" alt="Note" class="note" />注</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>公開ウィザードの使用方法については、Crystal Reports Server または BusinessObjects Enterprise のユーザー マニュアルを参照してください。</p></td>
</tr>
</tbody>
</table>
- (「プロジェクトの設定」で作成した)ConfigureCrystalReports() メソッド内に、レポートをバインドする以下のコードがあります。
``` vb
Dim hierarchicalGroupingReport As Hierarchical_Grouping = New
Hierarchical_Grouping()
myCrystalReportViewer.ReportSource = hierarchicalGroupingReport
```
``` csharp
Hierarchical_Grouping hierarchicalGroupingReport = new
Hierarchical_Grouping();
crystalReportViewer.ReportSource = hierarchicalGroupingReport;
```
レポートを CrystalReportViewer コントロールにバインドする前に次のことを行うために、数行の新しいコード(手順 5 から 16 を参照)をこれらの 2 行のコードの間に追加します。
- ネットワーク上で Crystal Reports Server または BusinessObjects Enterprise サーバーにログインする。
- レポートを InfoObject インスタンスとして取得する。
- 次のアセンブリ参照をプロジェクトに追加します。
1. CrystalDecisions.Enterprise.Framework
2. CrystalDecisions.Enterprise.InfoStore
- 分離コード ページの最初に、"Imports" [Visual Basic] または "using" [C#] 文を、CrystalDecisions.Enterprise 名前空間に追加します。
これで埋め込みレポートを Crystal Reports Server または BusinessObjects Enterprise にリダイレクトするコードを追加できるようになりました。
``` vb
Imports CrystalDecisions.Enterprise
```
``` csharp
using CrystalDecisions.Enterprise;
```
- 次のコード行では、hierarchicalGroupingReport をインスタンス化し、serverName 文字列を宣言して、それを Crystal Reports Server または BusinessObjects Enterprise サーバーの名前に設定します。
``` vb
Dim serverName As String = "BOE01"
```
``` csharp
string serverName = "BOE01";
```
SessionMgr クラスを宣言およびインスタンス化します。
Dim mySessionMgr As SessionMgr = New SessionMgr()
SessionMgr sessionMgr = new SessionMgr();
ユーザー名(Administrator)、パスワード(空白)、serverName 変数、およびログオン タイプ(secEnterprise)を SessionMgr インスタンスの Logon メソッドに渡し、EnterpriseSession インスタンスとして取得します。
``` vb
Dim myEnterpriseSession As EnterpriseSession = mySessionMgr.Logon(
_
"Administrator", "", serverName, "secEnterprise")
```
``` csharp
EnterpriseSession enterpriseSession = sessionMgr.Logon(
"Administrator", "", serverName, "secEnterprise");
```
- EnterpriseSession の GetService() メソッドを使って、InfoStore サービスを(EnterpriseService として)取得します。
``` vb
Dim myEnterpriseService As EnterpriseService = _
myEnterpriseSession.GetService("InfoStore")
```
``` csharp
EnterpriseService enterpriseService =
enterpriseSession.GetService("InfoStore");
```
- 取得した InfoStore サービスを使って InfoStore を宣言およびインスタンス化します。
``` vb
Dim myInfoStore As InfoStore = New InfoStore(myEnterpriseService)
```
``` csharp
InfoStore infoStore = new InfoStore(enterpriseService);
```
これで Crystal Reports Server または BusinessObjects Enterprise から Hierarchical Grouping レポートを取得できるようになりました。
- Crystal Reports Server または BusinessObjects Enterprise からレポートを抽出する以下のクエリー文字列を入力します。
``` vb
Dim queryString As String = "Select SI_CUID From CI_INFOOBJECTS " _
& "Where SI_PROGID='CrystalEnterprise.Report' "
_
& "And SI_NAME Like 'Hierarchical Grouping'"
```
``` csharp
string queryString = "Select SI_CUID From CI_INFOOBJECTS "
+ "Where SI_PROGID='CrystalEnterprise.Report' "
+ "And SI_NAME Like 'Hierarchical Grouping'";
```
- クエリー文字列を InfoStore の Query メソッドに渡すことによって、クエリーの結果を含む InfoObjects インデックス クラスを取得します。
``` vb
Dim myInfoObjects As InfoObjects = myInfoStore.Query(queryString)
```
``` csharp
InfoObjects infoObjects = infoStore.Query(queryString);
```
InfoObjects インデックス クラスの最初の列から InfoObject を取得します。
注 InfoObjects インデックス クラスは 0 からではなく 1 から始まります。
Dim myInfoObject As InfoObject = myInfoObjects(1)
InfoObject infoObject = infoObjects[1];
これで、Crystal Reports Server または BusinessObjects Enterprise から埋め込みレポートの複製コピーをロードできるようになりました。
埋め込みレポートの Load() メソッドを呼び出して、InfoObject と EnterpriseSession の現在のインスタンスを Load() メソッドに渡します。
``` vb
hierarchicalGroupingReport.Load(myInfoObject, myEnterpriseSession)
```
``` csharp
hierarchicalGroupingReport.Load(infoObject, enterpriseSession);
```
レポートを表示するには、プロジェクトをビルドおよび実行してください。
レポートは Crystal Reports Server または BusinessObjects Enterprise からロードされ、Crystal Reports Server または BusinessObjects Enterprise 内の Report Application Server(RAS)から機能します。
ReportDocument オブジェクト モデル内から ReportClientDocument オブジェクト モデルにアクセスするには、「ReportDocument.Load() メソッドを使ったアンマネージド RAS へのバインド」の実装セクションを参照してください。