繫結至 ReportSource (Crystal Reports Server 或 BusinessObjects Enterprise 11)
![]() |
---|
本頁說明的是在 Crystal Reports for Visual Studio 中沒有提供,但在升級版本中提供的功能。如需關於 Crystal Reports for Visual Studio 的詳細資訊,請參閱「何謂 Crystal Reports for Visual Studio?」。如需關於升級版本的詳細資訊,請參閱「升級選項」。 |
物件模型
這個報表繫結案例使用 CrystalReportViewer (請參閱「與 CrystalReportViewer 物件模型繫結的報表」)。
報表位置
報表可以從 BusinessObjects Enterprise 中的頁面伺服器進行存取。
說明
Crystal Reports Server 或 BusinessObjects Enterprise 會從 Enterprise 架構內的伺服器啟用報表散發。依據您的用途不同,Crystal Reports Server 或 BusinessObjects Enterprise 中儲存的報表可以在不同時間由不同伺服器顯示。在 Crystal Reports Server 或 BusinessObjects Enterprise 中,如果要以最佳效能顯示報表,而又無須對報表進行大幅的程式修改,請使用 ReportSource 類別直接從頁面伺服器顯示報表。
ReportSource 類別與任何物件模型毫無關聯。如需修改參數或資料庫設定,您可以使用 CrystalReportViewer 控制項所提供有限的物件模型。但對於更為複雜的報表程式設計互動,則需使用其他 Crystal Reports Server 或 BusinessObjects Enterprise 報表繫結案例。
![]() |
---|
如需比較使用 Crystal Reports Server 或 BusinessObjects Enterprise 中不同伺服器的幾個案例,請參閱「建議的案例摘要」內的 Crystal Reports Server 或 BusinessObjects Enterprise 建議繫結案例。 |
優點
- 最快速:顯示 Crystal Reports Server 或 BusinessObjects Enterprise 的報表時,具有最佳的效能。
缺點
- 有限的物件模型:以程式設計方式修改資料庫登入或參數設定時,只能使用 CrystalReportViewer 物件模型。如需使用 Crystal Reports Server 或 BusinessObjects Enterprise 的替代報表繫結案例,請參閱「建議的案例摘要」。
- 有限的可用性:這個案例僅適用於 Crystal Enterprise 版本 10、Crystal Reports Server 或 BusinessObjects Enterprise 11。
將 CrystalReportViewer 控制項繫結至 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. 電腦名稱會出現在 \[完整電腦名稱\] 欄位中。
- 使用發行精靈,將 Chart.rpt 發行至 Crystal Reports Server 或 BusinessObjects Enterprise 伺服器。報表檔案位於 [Feature Examples] 子目錄,請參閱「範例報表的目錄」。
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\36bhtx7w.alert_note(zh-tw,VS.90).gif" alt="Note" class="note" />附註</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>若要瞭解如何使用發行精靈,請參閱 Crystal Reports Server 或 BusinessObjects Enterprise 使用者說明文件。</p></td>
</tr>
</tbody>
</table>
將下列組件參考加入至專案:
- CrystalDecisions.Enterprise.Framework
- CrystalDecisions.Enterprise.InfoStore
- CrystalDecisions.Enterprise.Viewing.ReportSource
- CrystalDecisions.ReportAppServer.Controllers
按一下 [檢視] 功能表中的 [程式碼],檢視此 Web Form 或 Windows Form 的程式碼後置類別。在類別頂端加入 "Imports" [Visual Basic] 或 "using" [C#] 陳述式,匯入 CrystalDecisions.Enterprise 命名空間。
``` vb
Imports CrystalDecisions.Enterprise
Imports CrystalDecisions.Enterprise.Viewing
Imports CrystalDecisions.ReportAppServer.Controllers
```
``` csharp
using CrystalDecisions.Enterprise;
using CrystalDecisions.Enterprise.Viewing;
using CrystalDecisions.ReportAppServer.Controllers;
```
您現在即可開始撰寫用來登入 Crystal Reports Server 或 BusinessObjects Enterprise 的程式碼。
登入 Crystal Reports Server 或 BusinessObjects Enterprise
- 在您已於「專案設定」時建立的 ConfigureCrystalReports() 方法中,宣告 serverName 字串變數,並將其設定為 Crystal Reports Server 或 BusinessObjects Enterprise 伺服器的名稱。
``` vb
Dim serverName As String = "BOE01"
```
``` csharp
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)。
``` vb
Dim myEnterpriseService As EnterpriseService = _
myEnterpriseSession.GetService("InfoStore")
```
``` csharp
EnterpriseService enterpriseService = enterpriseSession.GetService("InfoStore");
```
- 宣告並產生 InfoStore 執行個體,將擷取的 EnterpriseService 當成參數傳入 InfoStore。
``` vb
Dim myInfoStore As InfoStore = New InfoStore(myEnterpriseService)
```
``` csharp
InfoStore infoStore = new InfoStore(enterpriseService);
```
您現在即可開始從 Crystal Reports Server 或 BusinessObjects Enterprise 擷取階層群組報表。
從 Crystal Reports Server 或 BusinessObjects Enterprise 擷取階層群組報表
- 將 "PSReportFactory" 字串傳遞給 EnterpriseService 的 GetService() 方法,重新指派 EnterpriseService 執行個體的值給頁面伺服器 Report Factory 服務。
``` vb
myEnterpriseService = myEnterpriseSession.GetService("PSReportFactory")
```
``` csharp
enterpriseService = enterpriseSession.GetService("PSReportFactory");
```
- 以物件變數型別傳回 EnterpriseService 的 Interface 屬性。
``` vb
Dim psrfObject As Object = myEnterpriseService.Interface
```
``` csharp
Object psrfObject = enterpriseService.Interface;
```
- 將物件變數轉型為 PSReportFactory 執行個體。
``` vb
Dim myPSReportFactory As PSReportFactory = CType(psrfObject, PSReportFactory)
```
``` csharp
PSReportFactory psReportFactory = (PSReportFactory)psrfObject;
```
輸入以下查詢字串,向 Crystal Reports Server 或 BusinessObjects Enterprise 查詢報表。
Dim queryString As String = "Select SI_ID, SI_NAME, SI_PARENTID From CI_INFOOBJECTS " _ & "Where SI_PROGID='CrystalEnterprise.Report' " _ & "And SI_NAME Like 'Chart'"
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。
``` vb
Dim myInfoObject As InfoObject = myInfoObjects(1)
```
``` csharp
InfoObject infoObject = infoObjects[1];
```
- 將 InfoObject 的 ID 屬性傳遞給 PSReportFactory 執行個體的 OpenReportSource() 方法,宣告並填入 ReportSource 執行個體。
``` vb
Dim myReportSource As ReportSource = myPSReportFactory.OpenReportSource(myInfoObject.ID)
```
``` csharp
ReportSource reportSource = psReportFactory.OpenReportSource(infoObject.ID);
```
- 將 ReportSource 執行個體繫結至 CrystalReportViewer 控制項的 ReportSource 屬性。
``` vb
myCrystalReportViewer.ReportSource = myReportSource
```
``` csharp
crystalReportViewer.ReportSource = reportSource;
```
- 若要檢視報表,請建置並執行專案。
報表現在會根據 ID,從 Crystal Reports Server 或 BusinessObjects Enterprise 內的頁面伺服器顯示。如果使用替代方法存取 reportID (例如,從 DropDownList 控制項提供的報表清單中選擇 ID),即不需藉由查詢 InfoStore 與產生 InfoObject 來擷取 reportID。