使用 ReportDocument.FileName 属性绑定到非托管 RAS 服务器
注意 |
---|
本页描述了在 Crystal Reports for Visual Studio 中未提供但在升级版本中提供的功能。若需更多有关 Crystal Reports for Visual Studio 的信息,请参见“什么是 Crystal Reports for Visual Studio?”有关升级版本的更多信息,请参见“升级选项”。 |
对象模型
此报表绑定方案使用 ReportClientDocument(请参见“通过 ReportClientDocument 对象模型进行报表绑定(RAS)”)。
报表的位置
在此方案中,将处理现有的嵌入式报表。可以通过代码中的报表包装类继续引用嵌入式报表,不过将通过 FileName 属性将嵌入式报表重定向到位于非托管 RAS 服务器(请参阅“报表应用程序服务器(RAS)”)上的外部副本(这样更快)。
注意 |
---|
因为报表最终从远程服务器显示,所以此报表绑定方案也可以成功用于非嵌入式报表(实现方式如报表绑定方案“绑定到已加载到 ReportDocument 类中的非嵌入式报表”所示)。 |
说明
这是报表绑定方案“使用 ReportDocument.Load() 方法绑定到非托管 RAS”的优化版本。
现在,可以将原来在 Crystal Reports for Visual Studio 中使用嵌入式报表和 ReportDocument 对象模型创建的项目轻松地移植到非托管 RAS 服务器。
在此方案中,将在运行时将嵌入式报表(该报表准备用于 Crystal Reports)绑定到非托管 RAS 服务器,并通过将该报表的一个副本放在 RAS 服务器可以直接访问的文件夹中对其进一步优化。通过添加两行代码执行以下操作可实现此目的:
- 将 RAS 服务器的名称赋给 ReportDocument.ReportAppServer 属性。
- 将 RAS 可访问的目录路径字符串传递给 ReportDocument.FileName 属性。
也可以将非嵌入式报表绑定到非托管 RAS 服务器。要实现此目的,可以删除对“绑定到已加载到 ReportDocument 类中的非嵌入式报表”中描述的 ReportDocument.Load(String filename) 方法的调用,然后替换为以上步骤中描述的代码。
此方案演示了在 Crystal Reports 开发人员版中,可以将使用 ReportDocument 对象模型的嵌入式或非嵌入式报表直接绑定到使用该 ReportClientDocument 对象模型的 RAS 服务器。这是如何实现的呢?在 Crystal Reports 10 中,ReportDocument 对象模型已被重写为可访问 ReportClientDocument 对象模型的代理层。有关更多信息,请参见“结构”中的 “ReportClientDocument 对象模型(RAS)”。
但是,“使用 ReportDocument.Load() 方法绑定到非托管 RAS”的默认方案具有性能限制:每次将嵌入式报表加载到 RAS 服务器的速度较慢。若要提高性能,请将报表复制到 RAS 服务器的可见文件目录,然后将目录路径字符串传入报表实例的 FileName 属性。
注意 |
---|
FileName 属性引用托管 RAS 服务器中的报表。总是显示托管 RAS 服务器中的报表,即使该报表与嵌入式报表不同版本或不同名。 |
可以通过 ReportDocument.ReportClientDocument 属性直接访问基础 ReportClientDocument 对象模型,从而允许在运行时修改具有 ReportClientDocument 对象模型的报表。有关代码示例,请参见下面的“实现”一节。
优点
- 可维护与使用 ReportDocument 对象模型的报表进行交互的所有原始代码,同时仍可以通过 ReportDocument.ReportClientDocument 属性完全访问基础 ReportClientDocument 对象模型。
注意 ReportClientDocument 对象模型允许以编程的方式创建、修改报表定义文件并保存对报表定义文件的更改。有关更多信息,请参见“结构”中的 “ReportClientDocument 对象模型(RAS)”。
- 由于报表应用程序服务器(RAS)中报表引擎的优异性能使性能显著提高。有关更多信息,请参见“比较所有 Business Objects 报表解决方案的结构”。
- 通过将报表复制到 RAS 服务器的可见文件目录可提高性能。
缺点
- 需要添加少量代码。每次将报表绑定到具有 ReportDocument 的 CrystalReportViewer 控件时,都必须添加两行代码。有关代码示例,请参见下面一节。
- 在 RAS 服务器的可见文件目录中制作嵌入式报表的副本增加了维护要求。如果必须对报表进行修改或将其删除,则这些更改必须传播到 Visual Studio 项目中的嵌入式报表和 RAS 服务器的可见目录中的报表副本中。
- 升级到非托管 RAS 将显著提高报表的性能,但提高程度不如升级到托管 RAS 服务器。
从指定的非托管 RAS 服务器的可见文件目录加载嵌入式报表的副本
- 非托管报表应用程序服务器(RAS)10 必须已安装,并且经验证可正常工作。
- 找到网络上的非托管 RAS 服务器并记录下该服务器的名称。在此示例中,服务器名称是“RAS01”。
此过程仅适用于已通过“项目设置”创建的项目。“项目设置”包含此过程需要的特定命名空间引用和代码配置。如果没有该配置,将无法完成此过程。因此,在开始此过程之前,必须首先执行“项目设置”中的步骤。
RAS 只能用于 Web 项目。
- 在 ConfigureCrystalReports() 方法(在“项目设置”中创建)中,有以下报表绑定代码。
在这两行代码之间,必须添加两行新代码(请参见步骤 2 和步骤 4),这两行新代码在将报表绑定到 CrystalReportViewer 控件之前将执行两项操作:
- 确定网络上的非托管 RAS 服务器。
- 提供包含报表副本的文件路径。
<!-- end list -->
``` vb
Dim hierarchicalGroupingReport As Hierarchical_Grouping = New
Hierarchical_Grouping()
myCrystalReportViewer.ReportSource = hierarchicalGroupingReport
```
``` csharp
Hierarchical_Grouping hierarchicalGroupingReport = new
Hierarchical_Grouping();
crystalReportViewer.ReportSource = hierarchicalGroupingReport;
```
在 hierarchicalGroupingReport 实例化之后,将 RAS 服务器的名称输入到 ReportApplicationServer 变量的 hierarchicalGroupingReport 属性中。
hierarchicalGroupingReport.ReportAppServer = "RAS01"
hierarchicalGroupingReport.ReportAppServer = "RAS01";
将报表复制到 RAS 服务器 C 盘上的 Report Application Server 10 目录:C:\Program Files\Crystal Decisions\Report Application Server 10\Reports\
然后将报表的文件路径输入代码中,以“RAS”协议为前缀。
<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>此路径是存储 RAS 报表的默认目录。RAS 服务器可能会拒绝其它报表路径并显示“访问被拒绝”错误。</p></td>
</tr>
</tbody>
</table>
[“项目设置”](ms227453\(v=vs.90\).md)中的报表绑定代码目前在此行代码之后。
``` vb
hierarchicalGroupingReport.FileName = "ras://C:\Program Files\Crystal Decisions" _ & "\Report Application Server 10\Reports" _ & "\Hierarchical_Grouping.rpt"
```
``` csharp
hierarchicalGroupingReport.FileName = "ras://C:\\Program Files\\Crystal Decisions" + "\\Report Application Server 10\\Reports" + "\\Hierarchical_Grouping.rpt";
```
- 若要查看该报表,请生成并运行您的项目。
报表现在将从文件路径中加载,并从非托管报表应用程序服务器(RAS)中提供。
要从 ReportDocument 对象模型中访问 ReportClientDocument 对象模型,请参见“使用 ReportDocument.Load() 方法绑定到非托管 RAS”中的“代码”一节。