次の方法で共有


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

Note

このページでは、Crystal Reports for Visual Studio では使用できなかったが、アップグレード バージョンで使用可能になった機能について説明します。Crystal Reports for Visual Studio の詳細については、「Crystal Reports for Visual Studio について」を参照してください。アップグレード バージョンについての詳細情報は、「アップグレード オプション」を参照してください。

オブジェクト モデル

このレポートをバインドするシナリオでは ReportClientDocument を使用しています(「ReportClientDocument オブジェクト モデルによるレポートのバインド(RAS)」を参照してください)。

レポートの場所

Crystal Reports Server または BusinessObjects Enterprise のサーバーに保存されます。

説明

このレポートをバインドするシナリオは、ReportClientDocument オブジェクト モデルに直接アクセスします。EnterpriseSession、ReportAppFactory、および InfoObject を取得します。次に、InfoObject の ID プロパティと整数 0(Visual Basic ではオプションのパラメータ)を ReportAppFactory の OpenDocument() メソッドに渡すと、Crystal Reports Server または BusinessObjects Enterprise から ReportClientDocument のインスタンスが返されます。サンプル コードは以下の実装セクションを参照してください。

長所

  • CE 9 以降で RAS を使用した ReportClientDocument オブジェクト モデルで、レポートとの対話に実行可能なメソッドが用意されています。
  • Crystal Reports Server または BusinessObjects Enterprise 内のマネージド RAS サーバーにおけるレポート エンジンの優れた処理によって、パフォーマンスの向上が得られます。詳細については、「Business Objects レポーティング ソリューションのアーキテクチャの比較」を参照してください。
  • ReportDocument オブジェクト モデルを使用するレポートと対話するオリジナル コードをすべて管理できます。同時に、基本となる ReportClientDocument オブジェクト モデルへのフル アクセスが、ReportDocument.ReportClientDocument プロパティによって可能になります。
    Note

    ReportClientDocument オブジェクト モデルを使用すると、レポート定義ファイルの作成、変更、および変更の保存をプログラムで実行できます。詳細については、アーキテクチャの「ReportClientDocument オブジェクト モデル(RAS)」を参照してください。

  • ReportClientDocument オブジェクト モデルに直接アクセスします。

短所

ReportAppFactory の OpenDocument メソッドを使用して Crystal Reports Server または BusinessObjects Enterprise から RAS サーバーにレポートをロードする

  • Crystal Reports Server または BusinessObjects Enterprise がインストールされ、正しく動作する。
  • 開発を行うコンピュータに Crystal Reports Server または BusinessObjects Enterprise SDK(.NET アセンブリを含む)がインストールされている。
    Note

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

  • Crystal Reports Server または BusinessObjects Enterprise サーバーを探し、その名前をメモします。この例では、サーバー名は“BOE01”です。

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

  1. 公開ウィザードを使って Chart.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. 次のアセンブリ参照をプロジェクトに追加します。
1.  CrystalDecisions.Enterprise.Framework
2.  CrystalDecisions.Enterprise.InfoStore
3.  CrystalDecisions.ReportAppServer.ClientDoc
  1. 分離コード ページの最初に、Visual Basic の場合は "Imports" 文、C# の場合は "using" 文を、CrystalDecisions.Enterprise 名前空間と CrystalDecisions.ReportAppServer.ClientDoc 名前空間に追加します。
``` vb
Imports CrystalDecisions.Enterprise
Imports CrystalDecisions.ReportAppServer.ClientDoc
```

``` csharp
using CrystalDecisions.Enterprise;
using CrystalDecisions.ReportAppServer.ClientDoc;
```

これで、Crystal Reports Server または BusinessObjects Enterprise 内の RAS サーバーのレポートを開くコードが追加できるようになりました。
  1. 「プロジェクトの設定」で作成した ConfigureCrystalReports() メソッドで、serverName 文字列を宣言し、これを Crystal Reports Server または BusinessObjects Enterprise サーバー名に設定します。

    Dim serverName As String = "BOE01"
    
    string serverName = "BOE01";
    
  2. SessionMgr クラスを宣言およびインスタンス化します。

    Dim mySessionMgr As SessionMgr = New SessionMgr()
    
    SessionMgr sessionMgr = new SessionMgr();
    
  3. ユーザー名(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);
```
  1. RASReportFactory 文字列を EnterpriseSession の GetService() メソッドに渡すことによって、EnterpriseService インスタンスの値が再度割り当てられます。
``` vb
myEnterpriseService =
myEnterpriseSession.GetService("RASReportFactory")
```

``` csharp
enterpriseService =
enterpriseSession.GetService("RASReportFactory");
```
  1. EnterpriseService の Interface プロパティをオブジェクト変数として返します。

    Dim rrfObject As Object = myEnterpriseService.Interface
    
    Object rrfObject = enterpriseService.Interface;
    
  2. ReportAppFactory インスタンスにオブジェクト変数をキャストします。

    Dim myReportAppFactory As ReportAppFactory = CType(rrfObject,
    ReportAppFactory)
    
    ReportAppFactory reportAppFactory = (ReportAppFactory)rrfObject;
    
  3. Crystal Reports Server または BusinessObjects Enterprise からレポートを抽出する以下のクエリー文字列を入力します。

``` vb
Dim queryString As String = "Select SI_ID, SI_NAME, SI_PARENTID
From CI_INFOOBJECTS " _
& "Where SI_PROGID='CrystalEnterprise.Report' "
_
& "And SI_NAME Like 'Chart'"
```

``` csharp
string queryString = "Select SI_ID, SI_NAME, SI_PARENTID From
CI_INFOOBJECTS "
+ "Where SI_PROGID='CrystalEnterprise.Report' "
+ "And SI_NAME Like 'Chart'";
```
  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];
    
  2. ReportClientDocument を宣言およびインスタンス化します。

    Dim myReportClientDocument As ReportClientDocument = New
    ReportClientDocumentClass()
    
    ReportClientDocument reportClientDocument = new
    ReportClientDocumentClass();
    
  3. InfoObject の ID プロパティと整数 0 (Visual Basic ではオプション)を ReportAppFactory インスタンスの OpenDocument メソッドに渡します。

    Note

    これにより、Crystal Reports Server または BusinessObjects Enterprise 内の Report Application Server(RAS)からのレポートが ReportClientDocument インスタンスとして開きます。

    myReportClientDocument =
    myReportAppFactory.OpenDocument(myInfoObject.ID, 0)
    
    reportClientDocument = reportAppFactory.OpenDocument(infoObject.ID,
    0);
    
  4. ReportClientDocument インスタンスを CrystalReportViewer コントロールにバインドします。

    myCrystalReportViewer.ReportSource = myReportClientDocument
    
    crystalReportViewer.ReportSource = reportClientDocument;
    
  5. レポートを表示するには、プロジェクトをビルドおよび実行してください。

関連項目