繫結至轉型為 Report 的 InfoObject
附註 |
---|
本頁說明的是在 Crystal Reports for Visual Studio 中沒有提供,但在升級版本中提供的功能。如需關於 Crystal Reports for Visual Studio 的詳細資訊,請參閱「何謂 Crystal Reports for Visual Studio?」。如需關於升級版本的詳細資訊,請參閱「升級選項」。 |
物件模型
這個報表繫結案例使用 InfoObject (請參閱「與 InfoObject 物件模型繫結的報表 (BOE)」)。
報表位置
已儲存在 Crystal Reports Server 或 BusinessObjects Enterprise 的伺服器上。
說明
InfoObject 物件模型是隨附於 Crystal Reports Server 或 BusinessObjects Enterprise 一起提供。它將系統中的所有 Enterprise 項目 (報表、使用者、群組、伺服器、伺服器群組、資料夾) 都視為可以用程式設計方法進行互動的資訊物件。物件模型中的所有資訊物件都可以由相同名稱的對應類別來表示。這些類別繼承自 InfoObject。
若要使用此物件模型繫結報表,您必須從包裝成 InfoObject 執行個體的 Crystal Reports Server 或 BusinessObjects Enterprise 中擷取報表。若要繫結至這個 InfoObject 執行個體,請將 ReportSource 屬性 (CrystalReportViewer 控制項)指派給 InfoObject 執行個體。
優點
- 對於排定報表在特定時間執行、使用特定參數、輸出至 FTP、SMTP、磁碟或印表機目的端等相關作業上頗有用處。
缺點
- 顯示報表時所用的方法不如在使用 RAS 伺服器或頁面伺服器時的替代方法來得快速。
- 如果要在執行階段以程式設計的方法修改報表,您必須使用「與 ReportClientDocument 物件模型 (RAS) 繫結的報表」 內的其中一個繫結案例,與 RAS 伺服器進行互動。
- 如果想獲致最大速度而又只是要顯示報表的話,最好使用報表繫結案例繫結至「繫結至 ReportSource (Crystal Reports Server 或 BusinessObjects Enterprise 11)」 存取頁面伺服器以進行報表繫結。
繫結包裝成 InfoObject 且轉型為 Report 的報表
- 必須安裝 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\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>
<p>如需範例報表的詳細資訊,請參閱<a href="ms225622(v=vs.90).md">「範例報表的目錄」</a>。</p></td>
</tr>
</tbody>
</table>
將下列組件參考加入至專案:
- CrystalDecisions.Enterprise.Framework
- CrystalDecisions.Enterprise.InfoStore
- CrystalDecisions.Enterprise.Desktop.Report
在程式碼後置的頁面上方,加入 CrystalDecisions.Enterprise 命名空間和 CrystalDecisions.Enterprise.Desktop 命名空間的 "Imports" [Visual Basic] 或 "using" [C#] 陳述式。
``` vb
Imports CrystalDecisions.Enterprise
Imports CrystalDecisions.Enterprise.Desktop
```
``` csharp
using CrystalDecisions.Enterprise;
using CrystalDecisions.Enterprise.Desktop;
```
您現在即可開始加入程式碼,藉以繫結至包含來自 Crystal Reports Server 或 BusinessObjects Enterprise 報表的 InfoObject 執行個體。
在 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 ) 傳遞給 Logon 方法 (屬於 SessionMgr 執行個體),並將之擷取為 EnterpriseSession 的執行個體。
Dim myEnterpriseSession As EnterpriseSession = mySessionMgr.Logon( _ "Administrator", "", serverName, "secEnterprise")
EnterpriseSession enterpriseSession = sessionMgr.Logon( "Administrator", "", serverName, "secEnterprise");
InfoStore 服務 (型別為 EnterpriseService) 是由 GetService 方法 (屬於EnterpriseSession) 取得。
Dim myEnterpriseService As EnterpriseService = _ myEnterpriseSession.GetService("InfoStore")
EnterpriseService enterpriseService = enterpriseSession.GetService("InfoStore");
宣告並產生 InfoStore 的執行個體,是利用擷取的 InfoStore 服務執行。
Dim myInfoStore As InfoStore = New InfoStore(myEnterpriseService)
InfoStore infoStore = new InfoStore(enterpriseService);
輸入以下查詢字串,向 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'";
擷取含有查詢結果的 InfoObjects 索引類別,方式是將查詢字串傳遞給 Query 方法,此方法屬於 InfoStore。
Dim myInfoObjects As InfoObjects = myInfoStore.Query(queryString)
InfoObjects infoObjects = infoStore.Query(queryString);
InfoObject 是 從InfoObjects 索引類別的第一欄擷取而得。
附註 InfoObjects 索引類別是從 1 起始,而非從 0 起始。
Dim myInfoObject As InfoObject = myInfoObjects(1)
InfoObject infoObject = infoObjects[1];
宣告 Report 的執行個體,並將 InfoObject 轉型為 Report。
Dim myReport As Report = CType(myInfoObject, Report)
Report report = (Report)infoObject;
將 EnterpriseLogon 屬性 (CrystalReportViewer 控制項) 設定為 EnterpriseSession 執行個體。
myCrystalReportViewer.EnterpriseLogon = myEnterpriseSession
crystalReportViewer.EnterpriseLogon = enterpriseSession;
將 Report 執行個體繫結至 CrystalReportViewer 控制項。
myCrystalReportViewer.ReportSource = myReport
crystalReportViewer.ReportSource = report;