代码改变世界

Crystal Reports对象模型

2010-12-14 10:37  bingcaihuang  阅读(392)  评论(0)    收藏  举报

Crystal Reports SDK 包含四个对象模型,用于编写与报表进行交互的代码:

   CrystalReportViewer 对象模型

   ReportDocument 对象模型

    可通过升级获得的对象模型:

      ReportClientDocument 对象模型(报表应用程序服务器)

      InfoObject 对象模型(随 Crystal Reports Server 或 BusinessObjects Enterprise 一起提供)

CrystalReportViewer 对象模型

CrystalReportViewer 控件包含可用于控制该控件如何显示报表的属性和方法。它还包含少量用于与绑定到该控件的报表进行交互的属性和方法。这些属性和方法构成一个受限对象模型。

一些报表绑定方案依赖于 CrystalReportViewer 对象模型。在这些方案中,CrystalReportViewer 控件将直接绑定到一个报表(例如,传入一个指向文件目录中的报表的路径字符串),而不是首先将该报表封装到对象模型中。在这些方案中,由于 CrystalReportViewer 控件直接封装报表,因此必须依靠该控件的受限对象模型来通过编程方式与报表进行交互。

但在大多数绑定方案中,不建议使用 CrystalReportViewer 作为对象模型,而应使用 ReportDocument 对象模型,原因如下:

CrystalReportViewer 对象模型可能会造成对象模型冲突。有关更多信息,请参见 “避免混用对象模型”。

使用 CrystalReportViewer 对象模型只能与报表进行有限的交互;它只具有 ReportDocument 对象模型中提供的一小部分功能。

CrystalReportViewer 对象模型会使表示层和代码中的基础业务逻辑之间的分隔变得模糊。

嵌入式报表与非嵌入式报表

嵌入式报表是已经导入到 Visual Studio 项目中或在其中创建的报表。在报表嵌入到项目中后,会自动为该报表生成一个包装类。

非嵌入式报表是位于 Visual Studio 项目外部的报表。可以使用许多种方法来访问此报表,并将其加载到对象模型中(以允许通过编程方式与报表进行交互),但是此报表始终保留在项目的外部。

嵌入式报表工作

把报表导入到项目中或在项目中创建了报表后,将会创建一个包装类(名称与报表相同)。这个包装类在项目中包装(也可称作表示)该报表。之后,项目中的所有代码均与创建用于表示该报表的报表类进行交互,而不是与原始报表文件本身进行交互。

编译项目时,报表和其包装类均会被嵌入到程序集中,与任何其它项目资源一样。

报表包装类继承自通用基类 ReportDocument。它继承了 ReportDocument 的所有属性和方法。

非嵌入式报表工作

非嵌入式报表始终在外部访问。可以通过多种方式使其可供 SDK 访问:
  • 报表可以位于硬盘上的一个文件目录路径中,这个报表绑定方案使用 CrystalReportViewer,这是最简单的报表绑定方案:使用位于文件目录中的报表的路径字符串将报表绑定到 CrystalReportViewer 控件。

 

优点

低维护:可以添加、删除或修改报表,而无需重新编译应用程序。

 实现简单:无需声明和实例化类。它将报表直接传递给 CrystalReportViewer 控件,而不使用 ReportDocument 对象模型。

缺点

分布有限:由于要授予 ASPNET 用户帐户访问网络上的另一台计算机的权限非常复杂,因此报表通常与应用程序位于同一台计算机上。

 受限对象模型:这个绑定方案只提供属于 CrystalReportViewer 的受限对象模型。

示例代码:

 

crystalReportViewer.ReportSource =
"C:\\Program Files\\Microsoft Visual Studio 9.0\\" + "Crystal Reports\\Samples\\chs\\Reports\\General Business\\" + "World Sales Report.rpt";

 

  • 报表可以作为一个报表 Web 服务提供,这个报表绑定方案使用 CrystalReportViewer,报表作为 Web 服务器(通常为远程)上承载的报表 Web 服务存在,报表存储在另一台服务器上,作为报表 Web 服务,并通过其 URL 绑定到 CrystalReportViewer 控件。

优点

分布范围广:报表可以位于 Internet 上的任何位置。

 

易于分发:报表 Web 服务使用端口 80,因此甚至可以跨防火墙进行访问。

缺点

受限对象模型:这个绑定方案只提供属于 CrystalReportViewer 的受限对象模型。

示例代码:

 

 

crystalReportViewer.ReportSource =
"http://localhost/TestProject/World_Sales_ReportService.asmx";

 

  • 报表可以是通过 Crystal 服务提供的报表组中的一个报表,Crystal Reports for Visual Studio 允许以编程方式通过 Crystal 服务访问服务器文件。

非嵌入式报表从不会被导入到项目中,因此,也从不会创建报表包装类(与嵌入式报表不同)。非嵌入式报表会在运行时分别以各种对象模型自己的方式加载到相应的对象模型中:

ReportDocument 对象模型使用 ReportDocument.Load() 方法将报表加载到 ReportDocument 对象模型中。

CrystalReportViewer 对象模型使用 CrystalReportViewer.ReportSource 属性将报表直接绑定到该控件。