ReportAppFactory.OpenDocument() メソッドを使ったマネージド RAS サーバーへのバインド
注 |
---|
このページでは、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 プロパティによって可能になります。
注 ReportClientDocument オブジェクト モデルを使用すると、レポート定義ファイルの作成、変更、および変更の保存をプログラムで実行できます。詳細については、アーキテクチャの「ReportClientDocument オブジェクト モデル(RAS)」を参照してください。
- ReportClientDocument オブジェクト モデルに直接アクセスします。
短所
- これまでに ReportDocument オブジェクト モデルを使用して Crystal Reports 上での開発を行っている場合、このシナリオではレポートのバインドをすべて再コード化する必要があります。ReportDocument で作業する代わりのシナリオの 1 つを使用することを検討してください。
ReportAppFactory の OpenDocument メソッドを使用して Crystal Reports Server または BusinessObjects Enterprise から RAS サーバーにレポートをロードする
- Crystal Reports Server または BusinessObjects Enterprise がインストールされ、正しく動作する。
- 開発を行うコンピュータに Crystal Reports Server または BusinessObjects Enterprise SDK(.NET アセンブリを含む)がインストールされている。
注 Crystal Reports Server または BusinessObjects Enterprise を開発用のマシンにインストールしている場合、SDK はそのインストールに含まれます。
- Crystal Reports Server または BusinessObjects Enterprise サーバーを探し、その名前をメモします。この例では、サーバー名は“BOE01”です。
この手順は、「プロジェクトの設定」で作成されたプロジェクトにのみ有効です。「プロジェクトの設定」では、この手順で必要な特定の名前空間の参照とコード設定が説明されており、この設定は、この手順を完了するために必須です。したがって、この手順を始める前にまず、「プロジェクトの設定」の手順を実行しておく必要があります。
- 公開ウィザードを使って 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. CrystalDecisions.Enterprise.Framework
2. CrystalDecisions.Enterprise.InfoStore
3. CrystalDecisions.ReportAppServer.ClientDoc
- 分離コード ページの最初に、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 サーバーのレポートを開くコードが追加できるようになりました。
「プロジェクトの設定」で作成した ConfigureCrystalReports() メソッドで、serverName 文字列を宣言し、これを Crystal Reports Server または BusinessObjects Enterprise サーバー名に設定します。
Dim serverName As String = "BOE01"
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 として)取得します。
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);
```
- RASReportFactory 文字列を EnterpriseSession の GetService() メソッドに渡すことによって、EnterpriseService インスタンスの値が再度割り当てられます。
``` vb
myEnterpriseService =
myEnterpriseSession.GetService("RASReportFactory")
```
``` csharp
enterpriseService =
enterpriseSession.GetService("RASReportFactory");
```
EnterpriseService の Interface プロパティをオブジェクト変数として返します。
Dim rrfObject As Object = myEnterpriseService.Interface
Object rrfObject = enterpriseService.Interface;
ReportAppFactory インスタンスにオブジェクト変数をキャストします。
Dim myReportAppFactory As ReportAppFactory = CType(rrfObject, ReportAppFactory)
ReportAppFactory reportAppFactory = (ReportAppFactory)rrfObject;
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'";
```
- クエリー文字列を 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];
ReportClientDocument を宣言およびインスタンス化します。
Dim myReportClientDocument As ReportClientDocument = New ReportClientDocumentClass()
ReportClientDocument reportClientDocument = new ReportClientDocumentClass();
InfoObject の ID プロパティと整数 0 (Visual Basic ではオプション)を ReportAppFactory インスタンスの OpenDocument メソッドに渡します。
注 これにより、Crystal Reports Server または BusinessObjects Enterprise 内の Report Application Server(RAS)からのレポートが ReportClientDocument インスタンスとして開きます。
myReportClientDocument = myReportAppFactory.OpenDocument(myInfoObject.ID, 0)
reportClientDocument = reportAppFactory.OpenDocument(infoObject.ID, 0);
ReportClientDocument インスタンスを CrystalReportViewer コントロールにバインドします。
myCrystalReportViewer.ReportSource = myReportClientDocument
crystalReportViewer.ReportSource = reportClientDocument;
レポートを表示するには、プロジェクトをビルドおよび実行してください。