ReportClientDocument 对象模型(RAS)

ReportClientDocument 对象模型是用于操作报表的功能最强大、范围最广泛的对象模型。此对象模型仅可作为报表应用程序服务器(RAS)的一部分使用,而后者既可作为非托管的报表应用程序服务器(RAS)使用,也可作为托管的报表应用程序服务器(BOE)使用。

ReportClientDocument 对象模型由跨多个命名空间的许多类组成。每个命名空间的前缀均为 CrystalDecisions.ReportAppServer。此对象模型在 SDK 中提供整个报表结构,使用户能够通过编程方式在运行时创建和修改报表的每个方面,并保存所做的更改。

ReportClientDocument 实例由可以被它的类属性以编程方式修改的报表组成。这些属性链接到包含控制器、数据定义模型和报表定义模型的 SDK 中的一系列其它库:

  • ReportDefinition 对应于 Crystal Reports 设计器中所示的报表布局。
  • DataDefinition 对应于 Crystal Reports 设计器中的字段资源管理器。
  • RowsetController 对应于在运行时查看报表时的每个详细信息行的已处理数据值。

ReportClientDocument 实例可以是以下两者之一的实例化:

  • 已从某个目录加载,然后又用 ReportClientDocument SDK 的报表定义和数据定义类修改的现有 .rpt 文件。
  • 用 ReportClientDocument SDK 的报表定义和数据定义类构造的全新空报表。

在 ReportClientDocument 类实例退出作用域之前,只要具有足够的时间将其传递给查看器进行显示,就可以加载这个类实例。但也可以修改这个类实例,然后作为报表 (.rpt) 保存到具有其中一个控制器类的目录中。

有关 ReportClientDocument 对象模型的详细信息,请参见 Business Objects RAS .NET SDK 文档。

Crystal Reports 9 中的 ReportClientDocument

Crystal Reports 9(高级版本)附带非托管 RAS 和对 ReportClientDocument 对象模型进行编程所需的 RAS .NET 程序集。这使得开发人员能够创建利用 ReportClientDocument 对象模型的 .NET 项目。

但是,这也意味着对于以前使用 Crystal Reports 提供的 ReportDocument 对象模型创建的项目,必须针对 RAS 提供的 ReportClientDocument 对象模型完全重新编写代码。这是因为这两种对象模型是完全分开的。

Crystal Reports 10 和更高版本中的 ReportClientDocument

在 Crystal Reports 10 中,这两种对象模型已不再是彻底分开的。通过重写 ReportDocument 对象模型以作为 ReportClientDocument 对象模型中功能的代理(子集),已经实现了这一点。ReportDocument 对象模型的类提供的属性和方法签名与以前相同,但其基础功能已更改为将每个属性和方法重定向到功能更强大的 ReportClientDocument 对象模型的属性和方法。

这并不意味着 Crystal Reports 开发人员版的基本版本就可以完全访问非托管 RAS 服务器或 ReportClientDocument 对象模型。Crystal Reports 的基本版本仍然只能访问 ReportDocument 对象模型(虽然 ReportDocument 对象模型起到 ReportClientDocument 对象模型中部分功能的代理的作用)。以前版本的 Crystal Reports 中包含的原始报表引擎已被替换为 RAS 报表引擎的受限嵌入式版本。

只能使用非托管 RAS 服务器的升级许可来安装和直接访问 ReportClientDocument 模型。在这种情况下,对于所有针对 ReportDocument 对象模型编写的现有代码,均可通过对任意给定报表实例设置两个属性而方便地重定向到单独的 RAS 服务器。而且,现在从 ReportDocument 类的 ReportClientDocument 属性获取基础 ReportClientDocument 对象模型时,可以直接访问它。

有关更多信息,请参见“使用 ReportDocument.Load() 方法绑定到非托管 RAS”

ReportClientDocument 对象模型关系图

此关系图显示了 ReportClientDocument 对象模型的关系。

图 4: ReportClientDocument 对象模型