次の方法で共有


ReportDocument.FileName プロパティを使ったマネージド RAS サーバーへのバインド

Note

このページでは、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 リポジトリです。

Note

レポートは最終的にリモート サーバーから表示されるため、このレポートをバインドするシナリオは、(「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)」を参照してください。

Note

FileName プロパティは、マネージド RAS サーバーからレポートを参照します。マネージド RAS サーバー上のレポートは、埋め込みレポートとバージョンや名前が異なっていても、常に表示されます。

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

長所

  • 移植の容易性:ReportDocument オブジェクト モデルを使用してレポートと対話するオリジナル コードをすべて保守し、さらに ReportDocument.ReportClientDocument プロパティを通して基本となる ReportClientDocument オブジェクト モデルへのフル アクセスを提供します。
    Note

    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 アセンブリを含む)がインストールされ、正しく動作する。
    Note

    Crystal Reports Server または BusinessObjects Enterprise を開発用のマシンにインストールしている場合、SDK はそのインストールに含まれます。

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

  1. Crystal Reports Server または BusinessObjects Enterprise サーバーを探し、その名前をメモします。この例では、サーバー名は"BOE01"です。
1.  サーバー名を調べるには、\[マイ コンピュータ\]アイコンを右クリックして\[プロパティ\]を選択します。
2.  [システムのプロパティ]ダイアログ ボックスで、\[コンピュータ名]タブをクリックします。
3.  \[フル コンピュータ名\]フィールドの名前がコンピュータ名です。
  1. 公開ウィザードを使って 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)を参照してください。
  1. 「プロジェクトの設定」で作成した)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. 次のアセンブリ参照をプロジェクトに追加します。
1.   CrystalDecisions.Enterprise.Framework
2.   CrystalDecisions.Enterprise.InfoStore
  1. 分離コード ページの最初に、"Imports" [Visual Basic] または "using" [C#] 文を、CrystalDecisions.Enterprise 名前空間に追加します。
``` vb
Imports CrystalDecisions.Enterprise
```

``` csharp
using CrystalDecisions.Enterprise;
```

これで埋め込みレポートを Crystal Reports Server または BusinessObjects Enterprise にリダイレクトするコードを追加できるようになりました。
  1. 次のコード行では、hierarchicalGroupingReport をインスタンス化し、serverName 文字列を宣言して、それを Crystal Reports Server または BusinessObjects Enterprise サーバーの名前に設定します。
``` vb
Dim serverName As String = "BOE01"
```

``` csharp
string serverName = "BOE01";
```
  1. SessionMgr クラスを宣言およびインスタンス化します。
``` vb
Dim mySessionMgr As SessionMgr = New SessionMgr()
```

``` csharp
SessionMgr sessionMgr = new SessionMgr();
```
  1. ユーザー名(Administrator)、パスワード(空白)、serverName 変数、およびログオン タイプ(secEnterprise)を SessionMgr インスタンスの Logon メソッドに渡し、EnterpriseSession インスタンスとして取得します。
``` vb
Dim myEnterpriseSession As EnterpriseSession = mySessionMgr.Logon(
_
"Administrator", "", serverName, "secEnterprise")
```

``` csharp
EnterpriseSession enterpriseSession = sessionMgr.Logon(
"Administrator", "", serverName, "secEnterprise");
```
  1. EnterpriseSession の GetService メソッドを使って、InfoStore サービスを(EnterpriseService として)取得します。

    Dim myEnterpriseService As EnterpriseService = _
    myEnterpriseSession.GetService("InfoStore")
    
    EnterpriseService enterpriseService =
    enterpriseSession.GetService("InfoStore");
    
  2. 取得した InfoStore サービスを使って InfoStore を宣言およびインスタンス化します。

``` vb
Dim myInfoStore As InfoStore = New InfoStore(myEnterpriseService)
```

``` csharp
InfoStore infoStore = new InfoStore(enterpriseService);
```

これで Crystal Reports Server または BusinessObjects Enterprise から Hierarchical Grouping レポートの CUID を取得できるようになりました。
  1. 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'";
```
  1. クエリー文字列を InfoStore の Query メソッドに渡すことによって、クエリーの結果を含む InfoObjects インデックス クラスを取得します。
``` vb
Dim myInfoObjects As InfoObjects = myInfoStore.Query(queryString)
```

``` csharp
InfoObjects infoObjects = infoStore.Query(queryString);
```
  1. InfoObjects インデックス クラスの最初の列から InfoObject を取得します。

    Note

    InfoObjects インデックス クラスは 0 からではなく 1 から始まります。

    Dim myInfoObject As InfoObject = myInfoObjects(1)
    
    InfoObject infoObject = infoObjects[1];
    

    これで、Crystal Reports Server または BusinessObjects Enterprise から埋め込みレポートの複製コピーをロードできるようになりました。

  2. InfoObject の SI_CUID プロパティからレポートの CUID 文字列を取得し、reportCUID 文字列型変数にします。

    Dim reportCUID As String = myInfoObject.CUID
    
    string reportCUID = infoObject.CUID;
    
  3. 埋め込みレポートの EnterpriseSession プロパティを EnterpriseSession インスタンスに設定します。

``` vb
hierarchicalGroupingReport.EnterpriseSession = myEnterpriseSession
```

``` csharp
hierarchicalGroupingReport.EnterpriseSession = enterpriseSession;
```
  1. 埋め込みレポートの 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;
```
  1. レポートを表示するには、プロジェクトをビルドおよび実行してください。
レポートは、Crystal Reports Server または BusinessObjects Enterprise からロードされ、マネージド RAS サーバーから機能します。

ReportDocument オブジェクト モデル内から ReportClientDocument オブジェクト モデルにアクセスするには、「ReportDocument.Load() メソッドを使ったアンマネージド RAS へのバインド」の実装セクションを参照してください。

関連項目