BOS V6.2开发指南_套打二次开发

所需积分/C币:50 2014-03-09 20:59:14 291KB PDF
14
收藏 收藏
举报

阅读指引:本文目的在于指导 EAS 二次开发人员,正确书写套打功能的集成代码。有 关原理说明,也适合实施人员阅读。理想状态下,套打应该是不需要二次开发再写代码的; 但由于历史原因、或特殊需求,可能需要二次开发。本文所述内容,适合 EAS v5.9、v6.0, EAS v5.4 也可参考。
会有 action Print action Performed或 action Print Preview action Performed方法与之对应, 套打的调用代码写在这样的方法或类似的方法( ListEl可能不同)屮。请注意,在 Lister 中,我们还提供了对表格控件的打卬,通常称之为序时簿打印,请注意区别。 以下接口都是 KDNotcHclpcr类的 211打印 APIa public void print( String template Type, Object dataProvider, Component owner, boolean is Show PrinterDialog) 参数说明: template'Type 业务对应的路径,即套打管理中模板所在文件夹 (注:在框架中,由 getTDFilenameo方法指定。) data provider 数据提供者对象,参考数据提供。 whcr 父窗口或其上的一个控件,用以实现弹出窗口的模态 is Show Printer Dialog]可省略。打印前是否弹出选择打印机的对话框。标准业务 通常省略(缺省为tue)。参考直接打印。 使用示例: KDNoteHelper helper=new KDNoteHelperO helper. print("/FIGL/Voucher", dataProvider, ctrl) 212预览 APl public void printPreview(String template Type, Object dataProvider, Component owner) 参数说明: templatcTypc 业务对应的路径,即套打管理中模板所在文件夹。 (注:在框架中,由 getTDFileName()方法指定。) data provider 数据提供者对象,参考数据提供。 owner 父窗冂或其上的个控件,用以实现弹出窗∏的模态。 使用示例: KDNoteHelper helper- new KDNoteHelpero helper printPreview("/FIGL/ Voucher", dataProvider, ctrl) 213直接打印 在某些定制的业务中,用户希望录入完一个单据后点一下打卬按钮就将内容直接 输出到打印机。此处,“直接”指不需要弹岀选择模板和打卬杌的对话框作人杋交互。 其屮,不用选择打印机是靠打印API屮,第4个参数 is Show printerdialog为 false 指定的,使用时自动启用系统默认的打印机。不用选模板,依赖于用户第一次使用弹岀 选择模板的窗口时,将目标模板记为“缺省模板”来实现。 5选择板 Q中中国口只示当前组织的模板 口套打配置 采购订单 白供应链(SCM ③供应管理(SMD 采购订单( Purorder) 口将本次选中保存为缺省模板〔可在“系统平台套打套打配置”中更改〕 确定匚取消 图“直接打印”依赖于将模板记为缺省模板 2.2数据提供者 221套打取数接口 package com kingdee bos ctrl. reportonerl print data; import com kingdee jdbc rowset. IRow Set *(since EAS 5.4 public abstract class AbstractPrint DataProvider public abstract IRowSet getData(RIPrintData Source data Source) throws Exception 该抽象类的实现,称为数据提供者。套打模板屮一个“数据源”,在执行过程屮, 系统会通过此数据提供者找集成环境要数据。 如果模板中冇在多个数据源,执行时也都是通过这个唯一的接口取数。实现代码 中通过 data Source. getlo识别不同数据源。换句话说,数据源名称是集成环境预先定义 好的,模板中必须按此命名。当然,如果模板中直接引用 Query,而取数实现乂对査 Query 做了支持(例如使用了 DcfaultNotc Provider),则名称无关紧要。 通常多数据源存在“主-从”结构,即有依赖的情況,主数据源被依赖的字段值发 生变化,从数据源会被要求重新取数。所以,即使是模板设计时逻辑上的一个“数据源”, 也可能是多次由 getData取得 RowSet。此时,从数据源的取数是必须通过 data Source. getAssociateParameterO. get value(取得所依赖的值作过滤的 getυata方法的参数,描述了模板中的数据源信息。 public class RlPrintData Source /**数据源名称*/ public String getlo **取得表示数据源依赖于其它数据源的参数 public RiPrintData Parameter getAssociateParameter( **取得指定名称的参数* public RIPrintData Parameter getParam( String id) *引用 BOS Query的信息, MetaDataPK的 fullName* public String getReferenceo *取得所有排序字段(目前只是分组字段)* public riPrintDataSortltem[ get SortFieldso /学*创建BOS查 Query所需的 Entity viewlnfo, *它包括了动态査询、模板中指定的排序等信息。 注意它不包含参数信息(如 getAssociateParameter)e* public Entity ViewInfo create WrappedBosruntimeInfoo 222査 Query的缺省实现(推荐使用) com kingdee bos ctrl report. forapp kdnote client DefaultNoteDataProvider类是抽象 类 Abstract PrintData Provider的实现,提供了查 Query的功能。 例1: kdNotcHclpcr. printPrcvicw(path, new DcfaultNotcDataProvidcr(datalds), ctrl) 这是最简单的使用方法,创建实例后直接使用。其中, dallas是单据的id”字段 的值,java. util. List或java.uti.Seta它可以是 Editor一个单据的id,也可以是 ListEl选 中的一批单据的id 比种写法要求模板中一定要直接引用 Query。如果是多数据源的情況,依赖关系中 参数名称一定要当前数据源作为“外键”的字段 例2: 为了兼容模板中引用套打元数据(无 Query信息)的方式,通常应该指定缺省的 Query DcfaultNotc Data Provider data Provider= new DcfaultNotcData Provider(datalds) dataProvider. setMetaDataPK( com kingdee.. Xxx Query") kdNoteHelper. printPreview(path, data Provider, ctrl) 例3 多数据源的情况,对每个数据源都指定缺省的 Query,且为从数据源的依赖关系指 定作为“外键”的字段(则模板中数据源做依赖关系的参数名称可以随意写)。 此例中,假设从数据源名称为" subData l",字段为" parentId"’,下同。 dataProvider. addMetaDataPK('subDatal","com.Xxx Query 1") dataProvider. add ForeignKey ("subDatal","parentId"); 例4:(自定义过滤条件) dataProvider. add Custom Filter Maker("subDatal new DefaultN oteDataProvider CUstom Filter Maker( public void customize(Filterlnfo filter, RIPrint Data Parameter params) filter. getFilterItems( add(new FilterltemInfo( status", MulliApprove Status Enum. SCBMIT VALUED)) ICustomfiltcrmakcr是 DcfaultnotcDataProvidcr的内部接口,允许在查 Query的时 候通过代码指定固定的过滤条件。其实在 Delaultnote Data provider内部,主数据源也凵 经包含了如下的过滤条件: filter.getFilterltems(). add( new FilterltemInfo(id", datalds, Compare Type INCLUDE)) 所以在上面出现的例子中,可以在构造函数屮传 datalds。如果主数据源不是要过 滤"id"宇段,也可以通过 set Custom Filtermaker接∏修改。 例5:(代理) 可以将 data Provider作为代理,而将真实的取数任务转发给另外一个实现。 DefaultNoteData Provider dataprovider- new DefaultNote DataProvider(datalds) AbstractPrintDataProvider another Data Provider= new MyData Provider dataProvider. addProxy Target (subData l",another DataProvider) 例6:(性能优化) 在具有辶从关系的多数据源中,上数据源被依赖字段值的变化(很可能是每一行), 都会导致每个从数据源取一次数。如果每次都是通过远程执行一次査询,在广域网的环 境中,多次的RPC可能成为性能的瓶颈。 DefaultNoteData Provider提供了批量查询的功 能,可以通过开关开启。请注意,如果使用了代理,则批量不能生效 dataProvider. set Supported(true) dataProvidcr. setNumberofEachBatch(100); 223取数的自定义实现 有些时候,查 Query不能满足业务场景的取数需求,那么可以写自已的数据提供 者 public class My Data Provider extends AbstractPrint Data Provider public IRow Set getData(rlPrintData Source data Source) throws Exception if("主数据源I": equals( data Source. getlo) /能⌒以选中数据的⑩D做过滤条件查数据 构造 Row Set return rowset else ift("从数据源ID". equals( data Source. getlo) RIPrintDataParameter parm=data Source. get AssociateParameterO String parm Value=nul;/参数值 if(parm !=null) parm value= parm. get ValueO toString 以参数值为过滤条件取数据,构造 RowSet… return rowset. ∥其它分支 自行构造 RowSet的参考代码: DynamicRowSet drs=new DynamicRowSet(3); //13 g1 drs. sctColInfo(1, "ficldI", "ficld1 " Typcs VARCHAR, null); drs. setCollnfo(, "field2","field2", Types. DECMMAL, null); drs set ColInfo(3, "field3", "field3", Types. BINARY, nul); for(inti=1;i<=10;i++)/10行 drs. move TolnsertRowo) drs. update String(" fieldI'","第"+i+"行"); drs, update BigDecimal(field2", new Big Decimal()) drs update Bytes(" field3", new byte[0]);/可支持图片 drs. insertRow0 drs bcforc First 23其它常用接口 23.1打印次数控制 public int getMaxPrint Times(String template Type) throws KDRSExceplion 在套打管理中,可以对一个业务单元(文件夹)设置数据的最多打印次数。此方 法用于获取该设置值。 public boolean isPrint Times Controllable( String template Type) 如果在一个业务路径上设置了打卬次数控制,该静态方法将返回urue public int getCopieso 取得打印设置中,一次打印的份数 public void set Copies(int times) 设置一次打印的份数 public void addk DNoteActionListener(IPrintActionListener listener) 添加打印事件,可获得打印前处珵事情的机会。 public void diposePrinto 取消打印 通常的实现逻辑:数据的实际打印次数由业务开发自行管理。每次打印前,判断 已打份数是否达到最多打印次数( gctMax PrintTimcs),达到了不能打,取消打印 ( diposePrin)。再判断凵打份数加上将打份数( getCopies)是否超过最多打印次数,超 过则调整当前打印份数( set Copies)。记录已打次数。 以上逻辑都是在 IPrintaction listener的 before Print事件中完成。注意, beforePrint 发生在点∫打印按钮(可能是业务界面上的打印,也可能是顶览后在预览界面中点打印) 后数据传送给打印机之前,打印时是与外部设各(打印机)通讯,由于技术上的原因, 目前不存在“打印后”或“打印顺利完成”事件。 232组织过滤 有些客户,个同的组织使用不同的打印模板。于是在同一业务中,可能存在数十 个甚至更多的模板,使用时很不方便。系统提供了选择模板时可以组织过滤的功能。模 板设计者在食打管理界面中,可以将模板“绑定当前组织”。使用者在选择模板时,就 可以过滤出当前组织对应的模板。 APl public void setOrg FilterMode(boolean is Selected, boolean is Enabled) 控制选择模板时出现的组织过滤勾选框状态。 参数说明 is Selected 组织过滤勾选框是否勾上。 缺省为 false;自动启用用户的上次操作状态。 可置为true;每次进入都勾上,用户的上次操作状态不生效。 Enabled 缺省为true。允许置为 false,让控件禁灰。 使用示例 KDNoteHelper helper new KDNoteHelperO helper. setOrg FilterMode(true, true) helper print("/FI/GL/Voucher", dataProvidcr, ctrl) 西选择模板 Q国只显示当前组织的模板 口③套打配置 采购订单 白供应链(GCM 白③供应管理(SN ③采购订单( Purorden □将本次选中保存为缺省模板〔可在“系统平台套打套打配置”中更改〕 L确定匚取消 图组织过滤 3模板发布 二次丌发基本上不需要关心模板发布的问题。如果是开发时制作的模板,保存在 开发时连接的数据库中,做完后导出、导入到客户的真实场景中即可。可能需要适当做 些备份,因为套打管理屮对模板的删除功能是不能恢复的 由研发中心开发人员制作的出厂模板(也称标准模板),以文件的形式发布在服务 端的 deploy ctrlhomelserver'storage目录下。初始数据库是不带模板的 服务器启动后,套打第一次被连接,系统自动将所有标准模板导入到数据库中。 视环境,此时可能会有几十秒钟的等待,通常被实應人员承受。然后系统自动在 deploy ctrlhome server\eas kdnote下创建一个 upgrade. xml的文件,用以标识经过 了“第一次” 此后,所有模板的存储、使用,鄱是通过数据库。而模板的补丁依然是以标准模 板的方式发布,用户(或实施人员)需要在套打管理中,通过“从标准模板导入”功能 进行导入。这样看似不够自动化的方式最大限度保证了用户自定义模板(包括对标准模 板的修改)的安全,不会因为升级、打补」等原因使其丢失 注意到前面所述第一次连接的处理方式,有二种特殊情况:一、研发经常做的 个服务器连多个数据库。后续增加的初始库,不能自动得到模板。可在套打管理中手 工做“从标准模板导入”解决。二、重澌安装服务器使标识文件丟失,或版本升级,会 増量式(只处理新増资源)地自动导入所有新增模板,此时数据库中已存在的模板是安全 的。对」以前发布的现在修改内容的模板,须手工做“从标准模板导入”才能覆盖。

...展开详情
试读 9P BOS V6.2开发指南_套打二次开发
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
  • 分享王者

    成功上传51个资源即可获取
关注 私信 TA的资源
上传资源赚积分or赚钱
    最新推荐
    BOS V6.2开发指南_套打二次开发 50积分/C币 立即下载
    1/9
    BOS V6.2开发指南_套打二次开发第1页
    BOS V6.2开发指南_套打二次开发第2页

    试读结束, 可继续读1页

    50积分/C币 立即下载 >