次の方法で共有


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

Note

このページでは、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)」を参照)。

Note

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

Note

InfoObject インスタンスは、マネージド 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 コントロールにバインドされるごとに、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 アセンブリを含む)がインストールされ、正しく動作する。
    Note

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

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

Note

RAS サーバーは Web プロジェクトでのみ機能します。

  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>
  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 コントロールにバインドする前に次のことを行うために、数行の新しいコード(手順 5 から 16 を参照)をこれらの 2 行のコードの間に追加します。

  - ネットワーク上で Crystal Reports Server または BusinessObjects Enterprise サーバーにログインする。
  - レポートを InfoObject インスタンスとして取得する。
  1. 次のアセンブリ参照をプロジェクトに追加します。
1.  CrystalDecisions.Enterprise.Framework
2.  CrystalDecisions.Enterprise.InfoStore
  1. 分離コード ページの最初に、"Imports" [Visual Basic] または "using" [C#] 文を、CrystalDecisions.Enterprise 名前空間に追加します。
これで埋め込みレポートを Crystal Reports Server または BusinessObjects Enterprise にリダイレクトするコードを追加できるようになりました。

``` vb
Imports CrystalDecisions.Enterprise
```

``` csharp
using CrystalDecisions.Enterprise;
```
  1. 次のコード行では、hierarchicalGroupingReport をインスタンス化し、serverName 文字列を宣言して、それを Crystal Reports Server または BusinessObjects Enterprise サーバーの名前に設定します。
``` vb
Dim serverName As String = "BOE01"
```

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

    Dim mySessionMgr As SessionMgr = New SessionMgr()
    
    SessionMgr sessionMgr = new SessionMgr();
    
  2. ユーザー名(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 として)取得します。
``` vb
Dim myEnterpriseService As EnterpriseService = _
myEnterpriseSession.GetService("InfoStore")
```

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

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

これで Crystal Reports Server または BusinessObjects Enterprise から Hierarchical Grouping レポートを取得できるようになりました。
  1. 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'";
```
  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. 埋め込みレポートの Load() メソッドを呼び出して、InfoObject と EnterpriseSession の現在のインスタンスを Load() メソッドに渡します。

``` vb
hierarchicalGroupingReport.Load(myInfoObject, myEnterpriseSession)
```

``` csharp
hierarchicalGroupingReport.Load(infoObject, enterpriseSession);
```
  1. レポートを表示するには、プロジェクトをビルドおよび実行してください。

    レポートは Crystal Reports Server または BusinessObjects Enterprise からロードされ、Crystal Reports Server または BusinessObjects Enterprise 内の Report Application Server(RAS)から機能します。

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

関連項目