ReportDocument.FileName プロパティを使ったマネージド RAS サーバーへのバインド
注 |
---|
このページでは、Crystal Reports for Visual Studio では使用できなかったが、アップグレード バージョンで使用可能になった機能について説明します。Crystal Reports for Visual Studio の詳細については、「Crystal Reports for Visual Studio について」を参照してください。アップグレード バージョンについての詳細情報は、「アップグレード オプション」を参照してください。 |
オブジェクト モデル
このレポートをバインドするシナリオでは ReportClientDocument を使用しています(「ReportClientDocument オブジェクト モデルによるレポートのバインド(RAS)」を参照してください)。
レポートの場所
シナリオの 1 つとして、レポートをコピーして 2 つの場所に保存します。Visual Studio プロジェクト内の埋め込みレポートと、Crystal Reports Server または BusinessObjects Enterprise(BOE)内の Report Application Server(RAS)によって公開される Crystal Reports Server または BusinessObjects Enterprise リポジトリです。
注 |
---|
レポートは最終的にリモート サーバーから表示されるため、このレポートをバインドするシナリオは、(「ReportDocument クラスにロードされる埋め込みでないレポートへのバインド」で実装されているように、)埋め込みでないレポートにも利用できます。 |
説明
Crystal Reports for Visual Studio で埋め込みレポートと ReportDocument オブジェクト モデルによって作成された .NET プロジェクトは、マネージド RAS サーバーへ容易にポートできます。
このシナリオでは、埋め込みレポートをその実行時に Crystal Reports Server または BusinessObjects Enterprise 内のマネージド RAS サーバーにバインドします。これは、公開ウィザードを使用してレポートのコピーを Crystal Reports Server または BusinessObjects Enterprise に置くことにより実現します。埋め込みレポート用の既存のコードは機能し続けますが、そのレポートのソースをマネージド RAS サーバーにリダイレクトするには、次の操作を実行します。
- Crystal Reports Server または BusinessObjects Enterprise ログオン機能をプロジェクトに追加し、EnterpriseSession インスタンスを取得します。
- Crystal Reports Server または BusinessObjects Enterprise から、コピーしたレポートの CUID プロパティを取得します。
- ReportDocument の EnterpriseSession プロパティを EnterpriseSession インスタンスに設定します。
- ReportDocument の FileName プロパティを埋め込みレポートの CUID 文字列に設定します。
サンプル コードは以下の実装セクションを参照してください。
このシナリオでは、Crystal Reports Developer で、ReportDocument オブジェクト モデルを使用する埋め込みレポートまたは埋め込みでないレポートを、ReportClientDocument オブジェクト モデルを使用する RAS サーバーに直接バインドできることを示します。どうしてそれが可能なのでしょうか。それは、Crystal Reports 10 では ReportDocument オブジェクト モデルが、ReportClientDocument オブジェクト モデルを指定するプロキシ層として再度書き込まれたためです。詳細については、アーキテクチャの「ReportClientDocument オブジェクト モデル(RAS)」を参照してください。
注 |
---|
FileName プロパティは、マネージド 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 コントロールにバインドされるたびに、CUID が取得されて ReportDocument の FileName プロパティに設定される必要があります。
- メンテナンスの増加:埋め込みレポートを Crystal Reports Server または BusinessObjects Enterprise にコピーするため、必要なメンテナンス作業が増加します。レポートを修正または削除する場合は、Visual Studio プロジェクトの埋め込みレポートと、Crystal Reports Server または BusinessObjects Enterprise に保存されているレポートのコピーの両方に対して、それらの変更を反映させる必要があります。
ReportDocument の FileName プロパティとレポートの CUID を使用して Crystal Reports Server または BusinessObjects Enterprise に保存された埋め込みレポートのコピーを表示する
- Crystal Reports Server または BusinessObjects Enterprise がインストールされ、正しく動作する。
- Crystal Reports Server または BusinessObjects Enterprise SDK(.NET アセンブリを含む)がインストールされ、正しく動作する。
注 Crystal Reports Server または BusinessObjects Enterprise を開発用のマシンにインストールしている場合、SDK はそのインストールに含まれます。
この手順は、「プロジェクトの設定」で作成されたプロジェクトにのみ有効です。「プロジェクトの設定」では、この手順で必要な特定の名前空間の参照とコード設定が説明されており、この設定は、この手順を完了するために必須です。したがって、この手順を始める前にまず、「プロジェクトの設定」の手順を実行しておく必要があります。
- 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>
サンプル レポートについては、[「サンプル レポートのディレクトリ」](ms225622\(v=vs.90\).md)を参照してください。
- (「プロジェクトの設定」で作成した)ConfigureCrystalReports() メソッド内に、レポートをバインドする以下のコードがあります。
``` vb
Dim hierarchicalGroupingReport As Hierarchical_Grouping = New
Hierarchical_Grouping()
myCrystalReportViewer.ReportSource = hierarchicalGroupingReport
```
``` csharp
Hierarchical_Grouping hierarchicalGroupingReport = new
Hierarchical_Grouping();
crystalReportViewer.ReportSource = hierarchicalGroupingReport;
```
レポートを CrystalReportViewer コントロールにバインドする前に次のことを行うために、数行の新しいコード(手順 3 から 14 を参照)をこれらの 2 行のコードの間に追加します。
- ネットワーク上で Crystal Reports Server または BusinessObjects Enterprise サーバーにログインする。
- CUID を取得して、Crystal Reports Server または BusinessObjects Enterprise に保存したレポートを特定する。
- CUID によってレポートを呼び出す。
- 次のアセンブリ参照をプロジェクトに追加します。
1. CrystalDecisions.Enterprise.Framework
2. CrystalDecisions.Enterprise.InfoStore
- 分離コード ページの最初に、"Imports" [Visual Basic] または "using" [C#] 文を、CrystalDecisions.Enterprise 名前空間に追加します。
``` vb
Imports CrystalDecisions.Enterprise
```
``` csharp
using CrystalDecisions.Enterprise;
```
これで埋め込みレポートを Crystal Reports Server または BusinessObjects Enterprise にリダイレクトするコードを追加できるようになりました。
- 次のコード行では、hierarchicalGroupingReport をインスタンス化し、serverName 文字列を宣言して、それを Crystal Reports Server または BusinessObjects Enterprise サーバーの名前に設定します。
``` vb
Dim serverName As String = "BOE01"
```
``` csharp
string serverName = "BOE01";
```
- SessionMgr クラスを宣言およびインスタンス化します。
``` vb
Dim mySessionMgr As SessionMgr = New SessionMgr()
```
``` csharp
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 として)取得します。
Dim myEnterpriseService As EnterpriseService = _ myEnterpriseSession.GetService("InfoStore")
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 レポートの CUID を取得できるようになりました。
- Crystal Reports Server または BusinessObjects Enterprise からレポートの CUID を抽出する以下のクエリー文字列を入力します。
``` 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 から埋め込みレポートの複製コピーをロードできるようになりました。
InfoObject の SI_CUID プロパティからレポートの CUID 文字列を取得し、reportCUID 文字列型変数にします。
Dim reportCUID As String = myInfoObject.CUID
string reportCUID = infoObject.CUID;
埋め込みレポートの EnterpriseSession プロパティを EnterpriseSession インスタンスに設定します。
``` vb
hierarchicalGroupingReport.EnterpriseSession = myEnterpriseSession
```
``` csharp
hierarchicalGroupingReport.EnterpriseSession = enterpriseSession;
```
- 埋め込みレポートの FileName プロパティを reportCUID 変数に設定し、先頭に cecuid:/// プロトコルを追加します。
<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>スラッシュは 2 つ(//)ではなく、3 つ(///)使用してください。これによって、hostname が NULL であることを示します。</p></td>
</tr>
</tbody>
</table>
``` vb
hierarchicalGroupingReport.FileName = "cecuid:///" & reportCUID
```
``` csharp
hierarchicalGroupingReport.FileName = "cecuid:///" + reportCUID;
```
- レポートを表示するには、プロジェクトをビルドおよび実行してください。
レポートは、Crystal Reports Server または BusinessObjects Enterprise からロードされ、マネージド RAS サーバーから機能します。
ReportDocument オブジェクト モデル内から ReportClientDocument オブジェクト モデルにアクセスするには、「ReportDocument.Load() メソッドを使ったアンマネージド RAS へのバインド」の実装セクションを参照してください。