绑定到 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 服务器。该报表文件位于“功能示例”子目录中,请参见“示例报表目录”
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/8yfdxzdx.alert_note(zh-cn,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 或 Windows 窗体的代码隐藏类。在该类的上方,为 CrystalDecisions.Enterprise 命名空间添加一条 "Imports" [Visual Basic] 或 "using" [C#] 语句。

``` 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 检索 Hierarchical Grouping 报表。

从 Crystal Reports Server 或 BusinessObjects Enterprise 检索 Hierarchical Grouping 报表

  1. 若要将该 EnterpriseService 实例的值重新赋给页面服务器报表工厂服务,请将“PSReportFactory”字符串传递给 EnterpriseService 的 GetService() 方法。
``` 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. 使用 PSReportFactory 实例的 OpenReportSource() 方法声明并填充一个 ReportSource 实例(传入该 InfoObject 的 ID)。
``` 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。

请参见