Using RAS SDK
Notes: 如果需要在运行时创建和修改报表,必须要使用RAS提供的服务来实现。
1. Installing SDK JAR files
RAS SDK和RAS Server可以安装在同一台机器上,也可以安装在不同的机器上。默认安装下,SDK Jar文件安装在C:\Program Files\Common Files\Crystal Decisions\2.0\jars\(9.0)或C:\Program Files\Common Files\Crystal Decisions\2.5\java\lib\(10.0)。
2. 不同的安装方式和运行使用方式
RAS服务可以单独安装和Crystal Report一起使用,也可以作为Crystal Enterprise的一个组件和它一起运行提供服务。在这两种方式下,我们使用RAS服务的主要区别在于和RAS Server建立会话,指定目录和报表的方式的不同上。
a。Establishing a RAS session
在CE中,必须要首先拥有一个Enterprise session然后才能建立一个RAS session。通过调用IEnterpriseSession对象的getService方法初始化一个RAS session。这个方法返回一个IReportAppFactory对象,这个工厂类提供在CE system中打开已存在报表和创建新报表的功能。
在standalone方式下,通过ReportAppSession来创建
b. Specifying reports and folders
单独版和集成版的RAS服务的关键区别在于管理报表的不同方法。集成版的RAS设计成允许用户修改由CE InfoStore管理的报表对象,而单独版的RAS server设计为可以修改在服务器上的报表文件(.rpt files)。当打开和保存报表的时候需要指定哪张报表被打开以及要把报表保存到哪个目录。
报表和目录的指定方法如下:
standalone模式下,指定报表和路径需要提供文件路径;
CE下,指定报表对象需要提供一个InfoObject的引用,或者提供它的ID属性。
RAS SDK提供了应用以上两种方式的应用编程接口。
c. Backward compatibility
在CE中的RAS Server component兼容建立在standalone RAS server上的应用。此时,当应用连接在CE中的RAS server时,用户会自动的以guest用户身份登陆到CE中。RAS Server component访问CE中的报表和不在RAS服务器上的报表文件。如果在CE中取消guest用户,那么这些应用就不能够连接到RAS server.
3. Accessing data sources
RAS可以使用许多中不同的数据源。从概念上,这些数据源可以分成以下几类:
a. Runtime data sources RAS可以使用运行时由程序生成的数据作为报表的数据源。这些数据可以从数据库中取得,也可以从数据流中取得,还可以是通过应用程序从一般的文件中取得。
使用运行时数据源的方法:
。把要操纵的数据放入Rowset对象中;
。创建一个Dataset对象并且用rowset中数据填充;
。创建一个RowsetController对象;
。使用RowsetController的方法分别设定数据源。
此时动态数据源就可以使用了。
注:如果创建一个基于data set数据源的报表,那么使用的数据不会和报表一起保存。当下一次重新打开报表的时候,必须要重做取得数据的过程来组装报表。
b. Persistent data sources
使用持久数据源的特点在于数据的生存期超越了运行时期。使用持久数据源主要适用于使用Crystal Report创建的报表。由于RAS镜相了Crystal Reports的所有功能,所以RAS也可以使用这些持久数据源。
在RAS中可以使用以下三种途径获取数据源:
。使用一个已经存在的报表的数据源;
。创建一个新的数据源; 。使用ConnectionDirManager对象选择一个数据源:ConnectionDirManager对象允许浏览RAS上的所有数据源。这些数据源由一个树型结构管理,可以通过ConnectionDirManager的方法访问。
c. JavaBean custom data sources
为了使用一个自定义的数据源,可以使用JavaBean(或者一个没有扩展Bean类型的java类)来作为数据源。
方法如下:
。创建一个说明自定义数据源的java类:这个类象一个Java Beans Connectivity data source一样为创建Crystal Reports提供服务。这个类需要以下特征:
构造函数不能带参数;
作为“tables”被使用的方法必须返回一个ResultSet对象;
Statement对象必须使用ResultSet.TYPE_SCROLL_SENSITIVE 和 ResultSet.CONCUR_READ_ONLY参数来创建。
注:返回ResultSet的方法可以带参数,这将被Crystal Reprots当做存储过程参数对待。
。引用一个java类来为报表提供数据:要提供给这个类上面自定义数据源类的类名和取得数据的方法,即返回ResultSet的方法。