EAS套打二次开发指南

发布时间 : 星期六 文章EAS套打二次开发指南更新完毕开始阅读

BOS 6.2套打二次开发指南

阅读指引:本文目的在于指导EAS二次开发人员,正确书写套打功能的集成代码。有关原理说明,也适合实施人员阅读。理想状态下,套打应该是不需要二次开发再写代码的;但由于历史原因、或特殊需求,可能需要二次开发。本文所述内容,适合EAS v5.9、v6.0,EAS v5.4也可参考。

1 相关概念

1.1 打印

1.1.1 套打

EAS中的套打,并不仅仅是指在印刷好的票据、单据上打印内容的。更为全面而准确的定义,应该是指:自定义格式的票据、单据、报表等数据的打印。其中,自定义格式是指用户可以自己制作模板。由于名称的沿袭,一直采用套打一词。

1.1.2 序时簿打印

ListUI中表格控件的打印,通常也称为序时簿打印。它是将表格中的数据直接打印输出。有些业务场景,菜单中会同时出现打印与套打,请注意区别。序时簿打印不在本文讨论范围内,有关内容可参考框架及KDTable控件的说明。

1.2 套打管理中的文件

现将EAS系统平台——套打——套打管理中出现各种文件介绍如下。

1.2.1 KDF(kdrs-form)

KDF系列的Form格式,是传统的套打模板格式,对应*.kdrs-form的模板文件。

不推荐使用(模板由新的格式——R1代替,老用户已存在的KDF模板可继续执行),以后将不再提供技术支持。

1.2.2 ReportOne(r1-print)

ReportOne系列的打印格式,是新的(用于取代KDF格式的)套打模板格式,对应*.r1-print的模板文件。以下或简称为R1。另有文档介绍模板规则。

1.2.3 套打元数据

*.bos-query。业务集成时定义了一些字段名称,供模板设计时绑定用,和BOS的元数据Query没有必然的关系(视集成代码,可能会对应一个Query,也可能完全没有关系)。如果使用R1模板,允许没有套打元数据,因为在模板设计器中可以直接引用BOS的Query。(请注意,直接引用Query的情况,只是模板中有一个引用信息,未必执行时就查询该Query,仍然要视集成代码而定。参考集成开发的说明。)

1.2.4 套打动态查询

*.note-dynquery。是在EAS执行期在套打管理中提供的对BOS Query的增量修改,可作为R1套打模板的元数据。(与直接引用Query相同,执行时依赖于集成代码是否做了实现。)

1.3 代码相关概念

1.3.1 KDNoteHelper

com.kingdee.bos.ctrl.report.forapp.kdnote.client.KDNoteHelper类提供了统一的套打调用API。 1.3.2 数据提供者

套打控件只识别取数接口(现在也提供查询Query的缺省实现DefaultNoteDataProvider,且推荐使用),具体的取数实现都是各业务集成时各自实现。对于实现取数接口的、给套打执行时提供数据的类,称之为DataProvider——数据提供者。

2 集成开发

2.1 套打调用

业务开发中,通常界面上会有[打印]/[打印预览]按钮,在框架的EditUI类中,会

有actionPrint_actionPerformed或actionPrintPreview_actionPerformed方法与之对应,套打的调用代码写在这样的方法或类似的方法(ListUI可能不同)中。请注意,在ListUI中,我们还提供了对表格控件的打印,通常称之为序时簿打印,请注意区别。

以下接口都是KDNoteHelper类的。 2.1.1 打印

API:

public void print(String templateType, Object dataProvider, Component owner, boolean isShowPrinterDialog) 参数说明: templateType dataProvider owner 业务对应的路径,即套打管理中模板所在文件夹。 (注:在框架中,由getTDFileName()方法指定。) 数据提供者对象,参考 数据提供。 父窗口或其上的一个控件,用以实现弹出窗口的模态。 [isShowPrinterDialog] 可省略。打印前是否弹出选择打印机的对话框。标准业务通常省略(缺省为true)。参考 直接打印。

使用示例:

KDNoteHelper helper = new KDNoteHelper(); helper.print(\, dataProvider, ctrl); 2.1.2 预览

API:

public void printPreview(String templateType, Object dataProvider, Component owner)

参数说明: templateType dataProvider owner 业务对应的路径,即套打管理中模板所在文件夹。 (注:在框架中,由getTDFileName()方法指定。) 数据提供者对象,参考 数据提供。 父窗口或其上的一个控件,用以实现弹出窗口的模态。

使用示例:

KDNoteHelper helper = new KDNoteHelper();

helper.printPreview(\oucher\, dataProvider, ctrl);

2.1.3 直接打印

在某些定制的业务中,用户希望录入完一个单据后点一下打印按钮就将内容直接输出到打印机。此处,“直接”指不需要弹出选择模板和打印机的对话框作人机交互。

其中,不用选择打印机是靠打印API中,第4个参数isShowPrinterDialog为false指定的,使用时自动启用系统默认的打印机。不用选模板,依赖于用户第一次使用弹出选择模板的窗口时,将目标模板记为“缺省模板”来实现。

图 “直接打印”依赖于将模板记为缺省模板

2.2 数据提供者

2.2.1 套打取数接口

package com.kingdee.bos.ctrl.reportone.r1.print.data; import com.kingdee.jdbc.rowset.IRowSet; /**

* @since EAS 5.4 */

public abstract class AbstractPrintDataProvider {

public abstract IRowSet getData(R1PrintDataSource dataSource) throws Exception; }

该抽象类的实现,称为数据提供者。套打模板中一个“数据源”,在执行过程中,系统会通过此数据提供者找集成环境要数据。

如果模板中存在多个数据源,执行时也都是通过这个唯一的接口取数。实现代码中通过dataSource.getId()识别不同数据源。换句话说,数据源名称是集成环境预先定义好的,模板中必须按此命名。当然,如果模板中直接引用Query,而取数实现又对查Query做了支持(例如使用了DefaultNoteDataProvider),则名称无关紧要。

通常多数据源存在“主-从”结构,即有依赖的情况,主数据源被依赖的字段值发生变化,从数据源会被要求重新取数。所以,即使是模板设计时逻辑上的一个“数据源”,也可能是多次由getData取得RowSet。此时,从数据源的取数是必须通过dataSource .getAssociateParameter().getValue()取得所依赖的值作过滤的。

getData方法的参数,描述了模板中的数据源信息。 public class R1PrintDataSource {

/** 数据源名称 */

联系合同范文客服:xxxxx#qq.com(#替换为@)