共用方式為


繫結至 ReportSource (Crystal Reports Server 或 BusinessObjects Enterprise 11)

Note附註

本頁說明的是在 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 報表繫結案例。

Note附註

如需比較使用 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 組件),並確認其正在運作。
    Note附註

    如果開發電腦上已經安裝了 Crystal Reports Server 或 BusinessObjects Enterprise,SDK 即包含在該安裝中。

  1. 尋找並抄下 Crystal Reports Server 或 BusinessObjects Enterprise 伺服器名稱。這個範例所使用的伺服器名稱為「BOE01」。
1.  若要尋找伺服器名稱,以滑鼠右鍵按一下 \[我的電腦\] 圖示,然後選取 \[內容\]。
2.  在 \[系統內容\] 對話方塊上按一下 \[網路識別\] 索引標籤。
3.  電腦名稱會出現在 \[完整電腦名稱\] 欄位中。
  1. 使用發行精靈,將 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>
  1. 將下列組件參考加入至專案:

    • CrystalDecisions.Enterprise.Framework
    • CrystalDecisions.Enterprise.InfoStore
    • CrystalDecisions.Enterprise.Viewing.ReportSource
    • CrystalDecisions.ReportAppServer.Controllers
  2. 按一下 [檢視] 功能表中的 [程式碼],檢視此 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

  1. 在您已於「專案設定」時建立的 ConfigureCrystalReports() 方法中,宣告 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 執行個體,將擷取的 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 擷取階層群組報表

  1. 將 "PSReportFactory" 字串傳遞給 EnterpriseService 的 GetService() 方法,重新指派 EnterpriseService 執行個體的值給頁面伺服器 Report Factory 服務。
``` vb
myEnterpriseService = myEnterpriseSession.GetService("PSReportFactory")
```

``` csharp
enterpriseService = enterpriseSession.GetService("PSReportFactory");
```
  1. 以物件變數型別傳回 EnterpriseService 的 Interface 屬性。
``` vb
Dim psrfObject As Object = myEnterpriseService.Interface
```

``` csharp
Object psrfObject = enterpriseService.Interface;
```
  1. 將物件變數轉型為 PSReportFactory 執行個體。
``` vb
Dim myPSReportFactory As PSReportFactory = CType(psrfObject, PSReportFactory)
```

``` csharp
PSReportFactory psReportFactory = (PSReportFactory)psrfObject;
```
  1. 輸入以下查詢字串,向 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'";
    
  2. 將查詢字串傳遞給 InfoStore 的 Query 方法,以擷取含有查詢結果的 InfoObjects 索引類別。

``` vb
Dim myInfoObjects As InfoObjects = myInfoStore.Query(queryString)
```

``` csharp
InfoObjects infoObjects = infoStore.Query(queryString);
```
  1. 從 InfoObjects 索引類別的第一欄擷取 InfoObject。
``` vb
Dim myInfoObject As InfoObject = myInfoObjects(1)
```

``` csharp
InfoObject infoObject = infoObjects[1];
```
  1. 將 InfoObject 的 ID 屬性傳遞給 PSReportFactory 執行個體的 OpenReportSource() 方法,宣告並填入 ReportSource 執行個體。
``` vb
Dim myReportSource As ReportSource = myPSReportFactory.OpenReportSource(myInfoObject.ID)
```

``` csharp
ReportSource reportSource = psReportFactory.OpenReportSource(infoObject.ID);
```
  1. 將 ReportSource 執行個體繫結至 CrystalReportViewer 控制項的 ReportSource 屬性。
``` vb
myCrystalReportViewer.ReportSource = myReportSource
```

``` csharp
crystalReportViewer.ReportSource = reportSource;
```
  1. 若要檢視報表,請建置並執行專案。
報表現在會根據 ID,從 Crystal Reports Server 或 BusinessObjects Enterprise 內的頁面伺服器顯示。如果使用替代方法存取 reportID (例如,從 DropDownList 控制項提供的報表清單中選擇 ID),即不需藉由查詢 InfoStore 與產生 InfoObject 來擷取 reportID。

請參閱