共用方式為


繫結至轉型為 Report 的 InfoObject

Note附註

本頁說明的是在 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、磁碟或印表機目的端等相關作業上頗有用處。

缺點

繫結包裝成 InfoObject 且轉型為 Report 的報表

  • 必須安裝 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」。
Note附註

這個程序只能與「專案設定」一節中建立的專案搭配使用。「專案設定」包含特定命名空間參考以及本程序所需的程式碼組態;您必須具備這個組態,否則將無法完成此程序。因此,在您開始本程序前,必須先遵循「專案設定」中的步驟進行。

  1. 使用發行精靈,將 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>
  1. 將下列組件參考加入至專案:

    • CrystalDecisions.Enterprise.Framework
    • CrystalDecisions.Enterprise.InfoStore
    • CrystalDecisions.Enterprise.Desktop.Report
  2. 在程式碼後置的頁面上方,加入 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 執行個體。
  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 ) 傳遞給 Logon 方法 (屬於 SessionMgr 執行個體),並將之擷取為 EnterpriseSession 的執行個體。

    Dim myEnterpriseSession As EnterpriseSession = mySessionMgr.Logon(
    _
    "Administrator", "", serverName, "secEnterprise")
    
    EnterpriseSession enterpriseSession = sessionMgr.Logon(
    "Administrator", "", serverName, "secEnterprise");
    
  4. InfoStore 服務 (型別為 EnterpriseService) 是由 GetService 方法 (屬於EnterpriseSession) 取得。

    Dim myEnterpriseService As EnterpriseService = _
    myEnterpriseSession.GetService("InfoStore")
    
    EnterpriseService enterpriseService =
    enterpriseSession.GetService("InfoStore");
    
  5. 宣告並產生 InfoStore 的執行個體,是利用擷取的 InfoStore 服務執行。

    Dim myInfoStore As InfoStore = New InfoStore(myEnterpriseService)
    
    InfoStore infoStore = new InfoStore(enterpriseService);
    
  6. 輸入以下查詢字串,向 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'";
    
  7. 擷取含有查詢結果的 InfoObjects 索引類別,方式是將查詢字串傳遞給 Query 方法,此方法屬於 InfoStore。

    Dim myInfoObjects As InfoObjects = myInfoStore.Query(queryString)
    
    InfoObjects infoObjects = infoStore.Query(queryString);
    
  8. InfoObject 是 從InfoObjects 索引類別的第一欄擷取而得。

    Note附註

    InfoObjects 索引類別是從 1 起始,而非從 0 起始。

    Dim myInfoObject As InfoObject = myInfoObjects(1)
    
    InfoObject infoObject = infoObjects[1];
    
  9. 宣告 Report 的執行個體,並將 InfoObject 轉型為 Report。

    Dim myReport As Report = CType(myInfoObject, Report)
    
    Report report = (Report)infoObject;
    
  10. 將 EnterpriseLogon 屬性 (CrystalReportViewer 控制項) 設定為 EnterpriseSession 執行個體。

    myCrystalReportViewer.EnterpriseLogon = myEnterpriseSession
    
    crystalReportViewer.EnterpriseLogon = enterpriseSession;
    
  11. 將 Report 執行個體繫結至 CrystalReportViewer 控制項。

    myCrystalReportViewer.ReportSource = myReport
    
    crystalReportViewer.ReportSource = report;
    

請參閱