参考应用框架编程指南_第1页
参考应用框架编程指南_第2页
参考应用框架编程指南_第3页
参考应用框架编程指南_第4页
参考应用框架编程指南_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、应用框架开发指南应用框架开发指南(V5.0 版)修订历史版本号1.02.03.0修订日期修订者张红斌宋志海、霍煦 宋志海、霍煦、张旭修订类型新建新增及补充新增及补充说明2005-9-28第1页,总32页应用框架开发指南目录应用框架概述4应用框架设计模型结构.通用设计模式及功能说明....1.6.取数虚模式5操作状态提示模式5操作模式6快速模式6表头排序模式7界面状态管理72.2.业务对象层........

2、11.通用设计方法11业务数据状态管理11类体系13所有业务对象超类 CoreBase13普通业务对象超类 ObjectBase14基础资料超类 DataBase15层次数据超类 TreeBase16单据超类 CoreBillBase(单据头)17单据超类 CoreBillEntryBase(单据体)19财务类单据超类 BillBase(单据头)19财务类单据超类 BillEntryBase(单据体)192.3.UI 层........3.2.3.

3、8.通用设计方法20数据绑定20UI 元素的使能. 21UILoadListener21序时簿类 UI21类体系21通用基类 CoreUI22普通序时簿类 ListUI22带通用的序时簿类 CommonQueryListUI24单据序时簿类 UI25层次数据序时簿类 UI25带拥有者的层次数据序时簿类 UI27带分类的层次数据序时簿 UI27带拥有者和分类的层次数据序时簿 UI28编辑类 UI28类体系28普通编辑类 UI28单据编辑类 UI303.应用框架典型范例32第2页,总32页应用框架开发指南3.1. 32总结错误!未定义书签。

4、附录 A错误!未定义书签。.应用框架 FQA错误!未定义书签。第3页,总32页应用框架开发指南 1. 应用框架概述应用框架初始目标即是实现基本数据结构及通用界面交互的处理。减轻业务系统通用界面的开发工作量, 提高工作效率。目前的应用框架分为两层,一部分是 uiM主要是对于 UI 层的抽象, 是与 EAS 进行紧密集成的 eas_framework 部分。本文档主要描述 eas_framework 的设计实现部分。于 EAS 开发系统;另一部分第4页,总32页应用框架开发指南 2. 应用框架设计模型结构2.1. 通用设计模式及功能说明2.1.1. 取数虚模式对于列表方式数据,应用框

5、架统一使用虚模式进行取数。1.意图:在数据量较大的情况下,进行分批取数,减少网络流量,加快响应速度。2.:在信息系统中,数据是最常用的操作,但如果结果数据量很大情况下,一方面会增加网络传输的数据量,另一方面是一个耗时的过程,客户会出现一个可能较长时间的等待。这两方面都会降低软件的可用性。为解决这个问题,我们使用虚模式。如果列表中定义了主键,则先取前 100 条数据,然后在获取所有的数据 ID 值。如果没有定义主键,则使用 top 100 等方式来获取。后3.适用性:在数据量较大情况下非常有效。式不推荐使用。如果是海量数据,如结果很大,比如 100000 条以上,所有的 ID 获取也是一个不小的

6、数据量与耗时过程,这时需要进行特殊处理。4. 应用: ListUI 中使用。5. 缺点及注意事项:因为大于 100 条数据时,会启动一个线程来取数。在大并况下会出现 N*2 的数据请求量。2.1.2. 操作状态提示模式对于操作提示,应用框架统一了提示方式。如果界面中有状态条,则在状态条中提示;如果没有状态条, 则为对应框方式处理。1.意图:在状态条中进行统一信息提示。2.:在企业信息管理系统中,用户与系统的交互非常多。在用户操作过程中,一些的提示、完成操作,不的操作,我们传统的做法是给用户一个框提示,显示这些信息。但这样一来,我们会增加用户的无意义的操作,中断用户的连续操作,对用户非常不友好。

7、为了解决这类问题,对于一些系统的提示,采用状态条进行统一的提示,减少用户的一些无意义的操作。用户仅在状态栏就可以获取系统信息。3.适用性:对用户的一些常用而且连续的操作界面,我们这种模式大大方便用户的交互。第5页,总32页应用框架开发指南对于无状态栏或信息较多的情况4. 应用: CoreUI,EditUI5. 缺点及注意事项:为力。对于模式框,目前由于没有显示状态栏,所以此模式不生效。2.1.3.操作模式对于长时间的耗时操作,应用框架统一了处理机制,当前界面锁定,状态栏进度条提示。但用户可切换到其他业务界面继续操作。1.意图:长时间操作进行多线程处理,不影响其他任务。2.:在企业应用管理系统中

8、,有一些长时间的操作功能,如过账、结账等功能。这时传统的做待,直到操作完成。这样用户这段时间内基本上对系统不可操作,大大降低了用户的可用性。让用户等为了解决这个问题,框架采用了对某些功能使用多线程机制,对于耗时操作新起一个线程来运行。这样其他任务还可以继续使用,增加了用户体验。3.适用性:对于一些操作提供了方便。长时间操作的当前操作页签会锁定,直到系统完成后4. 应用: CoreUI5. 缺点及注意事项:。如果业务系统的状态在锁定之后控件完成一些状态改变,当别注意处理。操作完成后的状态恢复不生效。需要特2.1.4. 快速模式对于列表方式数据1.意图:,业务系统可定制字段,应用框架根据定制字段在

9、列表中自动。对于大数据量情况下,快速到用户期望操作的数据下。2.:对于大数据量的列表,框架已经使用了虚模式,但用户要在列表中找一条符合条件的数据,就可能需要拉动滑动条来查看,这对于用户来说是一件不愉快的事。为了解决这个问题,我们对常用的列使用了快速定模式,方便用户来进行查找操作。3.适用性:用户可快速地在列表中找到符合条件的4. 应用: ListUI5. 缺点及注意事项:。由于此方式是基于表格查找方法,的情况上,把所有虚模式的数据取回来后发现没有匹配项,第6页,总32页应用框架开发指南这时提示用户没有找到。这种情况下效率。2.1.5. 表头排序模式对于列表浏览界面,可通过单击表头来实现使用表头

10、字段进行重新的全排序。1.意图:对于列表数据,用户可自由地重新排序他希望的列。2.:对于大数据量的列表结果,通常我们做过滤时会让用户指定排序的列。但在结果以在结果集中进行重新排序,而不是进行重新过滤后指定排序字段。后,用户也希望可为了解决这个问题,我们3.适用性:用户对指定的表列头进行排序,而不需要重新在过滤中指定排序字段。用户可对结果集进行快速的重新排序。4. 应用:ListUI 表头排序。5. 缺点及注意事项:如果表格中有列为 Query 中没有的,会出错。2.1.6. 界面状态管理模式对于新增、查看、编辑状态进行了统一处理。1.意图:2.:3.适用性:4.应用:5.缺点及注意事项:2.1

11、.7. 数据绑定模式1.意图:2.:3.适用性:4.应用:第7页,总32页应用框架开发指南5.缺点及注意事项:2.1.8. 表格设置模式1.意图:2.:3.适用性:4.应用:5.缺点及注意事项:2.1.9. 通用校验框架模式1.意图:2.:3.适用性:4.应用:5.缺点及注意事项:2.1.10.通用异常框架模式1.意图:2.:3.适用性:4.应用:第8页,总32页应用框架开发指南5.缺点及注意事项:2.1.11.树型结构的算法优化模式1.意图:2.:3.适用性:4.应用:5.缺点及注意事项:2.1.12.查看编辑界面的编辑与删除模式1.意图:2.:3.适用性:4.应用:5.缺点及注意事项:2.

12、1.13.打印设置用户相关性支持模式1.意图:2.:3.适用性:4.应用:5.缺点及注意事项:第9页,总32页应用框架开发指南2.2. 典型 UI 交互及生命周期管理2.2.1. UI 创建的过程及处理说明及注意事项:1.2.所有的 UI 创建都由 UIFactory 来完成;UIFactoryHelper 完成 UI 中的对象初始化工作;第10页,总32页应用框架开发指南2.3. 业务对象层应用框架在业务对象层建立了一些典型业务对象,可用做设计建立的业务对象的超类。这些用做超类的业务对象,既定义了对象属性,也提供了业务方法。例如,层次数据的超类 TreeBase 在数据保存时会自动维护 le

13、vel、isLeaf 和 longNumber 的正确性。2.3.1. 通用设计方法2.3.2. 业务数据状态管理业务数据状态属于数据的附加描述属性,表达业务数据经过的处理过程,例如:是否已生效、是否已审核,并据此进行相应的逻辑。业务数据状态根据业务数据的不同类型会有不同组合,例如:基础资料中可能只有是否生效状态,而单据中会有是否已审核及是否已关闭等状态。在应用架构中会抽象业务数据中存在的状态种类,并在超类体系里对某些通用状态的处理逻辑。状态配置表下表列出了所有已知的数据状态属性,这些属性将作为基础的状态属性供定义具体的业务对象时选择使用。第11页,总32页状态名状态描述状态枚举类型属性名字段

14、名说明生效状态0:暂存1:生效EffectedStatusEnumEffectedStatusFEffectedStatus暂存的业务数据不需要进行数据 检查,不参与统计报表和结账结算处理作废状态0:普通1:作废DeletedStatusEnumDeletedStatusFDeletedStatus作废的业务数据不参与统计报表和结账结算处理审核状态0:未审核1:已审核CheckedStatusEnumCheckedStatusFCheckedStatus冻结状态0:未冻结BlockedStatusEnumBlockedStatusFBlockedStatus冻结的业务对象参与新的业务活动, 但

15、已经存在的业务活动不受影响。有的业务对象的冻结状态可能会进一步细分,如“客户”的冻结可能会包含:Posting应用框架开发指南说明:1、 属性对应的数据类型都是相应的枚举类型,类型为 Int。字段的数据类型也使用 Int。2、 在 com.kingdee.eas.framework 包中定义了枚举类型供使用。使用方法所有基础的状态属性被定义于配置表中,已集成于 BOS Studio 中。如果业务对象要使用某个状态属性,可方便地选取即可。单据状态单据状态往往是由多个基础状态属性组合后对外的统一表现形式。以订单处理为例,可能表现为六种状态:第12页,总32页1:已冻结block、Order blo

16、ck、Delivery block、Invoicing block下达状态0:未下达1:已下达ReleasedStatusEnumReleasedStatusFReleasedStatus订单类的单据一般会有下达状态预算审批状态0:未审批1:审批未通过 2:审批已通过BudgetAuditedStatu sEnumBudgetAuditedS tatusFBudgetAuditedS tatus交付状态0:未交付1:部分交付2:全部交付DeliveredStatusEnu mDeliveredStatu sFDeliveredStatu sFI记账状态0:未记账1:已记账FIPostedSta

17、tusEnumFIPostedStatusFFIPostedStatusMA记账状态0:未记账1:已记账MAPostdStatusEnumMAPostdStatusFMAPostdStatus关闭(结清)状态0:未关闭1:已关闭ClosedStatusEnumClosedStatusFClosedStatus应用框架开发指南在内部处理中,实际上选择了三个基础的状态属性来实现逻辑的规则是:逻辑:作废状态、完成状态和关闭状态。从编程的方便性考虑,推荐为单据状态定义的枚举,并为值对象增加一个 getBillStatus 方法。该方法通过计算基本属性的取值而得到对应的单据状态。需要注意的是,设置单据状

18、态的操作仍将操作基本状态属性,并且在设置某个状态属性时可能需要根据逻辑同时设置其它属性。2.3.3. 类体系2.3.4. 所有业务对象超类 CoreBase职责所有 EAS 业务对象的超类,具有 ID 属性,完成数据的基本维护功能。如,新增、修改、删除、暂存等操作。第13页,总32页类体系内容CoreBase所有业务对象的超类|- ObjectBase|- DataBase|- TreeBase|-CoreBillBase|- BillBase|- CoreBillEntryBase|-BillEntryBase普通业务对象的超类基础资料类业务对象的超类层次数据类业务对象的超类单据业务对象的超

19、类,对应单据头部分财务类单据业务对象的超类,对应财务单据头部分单据业务对象的超类,对应单据体部分财务类单据业务对象的超类,对应财务单据体部分单据状态状态操作取消关闭计划下达进行中完成只要作废状态为 1单据不是取消状态且关闭状态为 1单据不是取消状态也不是关闭状态, 且完成状态为 0(未下达)单据不是取消状态也不是关闭状态, 且完成状态为 1(下达)单据不是取消状态也不是关闭状态, 且完成状态为 2(进行中)单据不是取消状态也不是关闭状态, 且完成状态为 3(完成)若单据进入取消状态,则只有恢复后才能进行其它所有单据操作除与取消相关外的其它操作下达操作撤消操作关闭操作应用框架开发指南属性方法常见

20、问题1.问:如何的布署信息?答:应用框架实体层是抽象类,没有 EJB 布置信息,也就是说应用框架不需要布署。2.问:CoreBase 为什么没有 effectedStatus 属性?答:并不是每个业务对象都有此属性,我们这里进行了属性命名约束,如果要使业务对象生效,必须使用“effectedStatus”名称。如果子类没有此属性,则我们基类中的 save 与 submit 作用一致。3.这些基类的方法,子类不可以再一次定义,否则就会覆盖掉基类方法,失去了基类的作用。2.3.5. 普通业务对象超类 ObjectBase属性第14页,总32页名称描述数据类型对应字段名称描述addNew继承基类,

21、添加时设置 creator , createTime, lastUpdateUser, lastUpdateTime,等固定属性值。Update继 承 基 类 , 添 加 时 设 置 lastUpdateUser, lastUpdateTime, company 等固定属性值。Submit设置业务数据生效,并保存save设为暂存状态,并保存cancel作废(逻辑删除),并保存cancelCancel取消作废状态,并保存checkStatusValid检查业务数据是否是有效canUpdate检查业务数据能否更新,逻辑条件是否满足更新要求(补充)isReferenced检查业务数据是否被,删除操作

22、会调用此函数(补充)名称描述数据类型对应字段Id对象 IDBOSUUIDFID应用框架开发指南方法常见问题1.问:Creator、CreateTime、LastUpdateUser、LastUpdateTime 作用及意义?答:所在普通业务对象的基本属性,由基类来维护,业务对象不能用作其他用途。2.3.6. 基础资料超类 DataBase属性第15页,总32页名称描述数据类型Name名称(多语言)StringNumber编码Stringdescription描述(多语言)StringsimpleName简称String名称描述CU单元连接属性 连接到控制单元中FcontrolUnitIDCre

23、ator创建者连接属性 连接到用户FcreatorIDCreateTime创建时间TimestampFcreateTimeLastUpdateUser最后修改者连接属性 连接到用户FLastUpdateUserIDLastUpdateTime最后修改时间TimestampFLastUpdateTime应用框架开发指南方法注:名称与编码检查方法都是需要根据业务要求进行调用的,应用框架本身不调用。常见问题1. 问:为何继承自 DataBase 的类没有自动进行名称及编码的检查?答:没办法统一检查机制,可能由于检查的条件不一样,如科目表使用全局的检查,就可直接调用如上的方法来完成。2. 问:编码规则

24、如何起作用?答:编码规则在 DataBase 类起作用。从 DataBase 的类如果定义了编码规则就会自动由基类来完成, 子类不需要关心。2.3.7. 层次数据超类 TreeBase属性因为超类中定义的关系无法实例化,所以 TreeBase 并未定义 parent 关联属性。要求在子类中自行建立这个表示指向父节点的关联属性,并且约定属性名一定是 parent。方法第16页,总32页名称描述名称描述数据类型对应字段IsLeaf是否叶节点BooleanFIsLeafLevel所在级次IntegerFLevelLongNumbe r节点完整编号StringFLongNum ber名称描述check

25、NameBlank名称是否为空checkNameDup名称是否重复checkNumberBlank编码是否为空checkNumberDup编码是否重复getBizOUCoreBaseInfo 的接口。应用框架开发指南常见问题1. 问:isLeaf、level、longNumber 由基类处理吗? 答:是的。子类不需要进行干预。2. 问:检查编码重复的注意事项。答:原则:输入项必须完整,生成项可以没有,如 level,isLeaf,longnumber 等,传递给基类的值要求有 id,number,name,description。2.3.8. 单据超类 CoreBillBase(单据头)属性第

26、17页,总32页名称描述数据类型对应字段Number单据编号StringFNumberhandleTime经办时间TimeStampFHandleTimeHandler经手人连接属性连接到用户FhandlerIDDescription备注(多语言)StringFdescriptionhasEffected是否曾经生效BooleanFhasEffectedAuditor审核人连接属性连接到用户FcheckIDupdateLeafByLongNumber父节点编号更新时重设所有子节点编号checkParentDataExist检查该编号下的父节点是否存在checkParentValid校验父节点的

27、状态应为有效,父节点是否被删除。checkParentBeUsed校验父节点是否被其他数据使用。如果被使用则不能新建子节点。子类需要通过重载_isReference 来定义 逻辑getRoot获取根节点getChildren返回儿子节点集合glChildren返回所有后代节点集合deleteWithChildren删除自身及其所有后代节点moveTreeNode移动节点位置应用框架开发指南方法可选的方法:1. protectedSystem getOwnedSys():定义单据所属的系统。通常情况下一种单据所属的系统是确定的,可以在单据对象的扩展属性予以定义。超类负责处理这种情况。对于一种类型

28、的单据被实例化到不同系统的情况,可以增加实体属性,并重载这个方法。常见问题1. 问:单据生成凭证的处理?答:校验是否已经生成过凭证,如果已经生成过则抛异常。2. 问:单据关联关系处理。答:处理所有的分录关联。分为暂存与提交两类。第18页,总32页名称描述checkOut结清(关闭)业务数据passAudit审核通过UnpassAudit设置为未审核状态Freeze冻务数据Unfreeze解冻业务数据CheckStatusFreeze检查业务数据是否被冻结CheckNumberDup检查单据编号是否重复CheckNumberBlank检查单据编号是否为空checkHandleTimeBlank检

29、查经办时间是否为空checkHandlerBlank检查经办人是否为空CheckLineExist检查是否至少有一条分录getOwnedSys获取所属系统。generateVoucher生成凭证deleteVoucher删除凭证:若没有生成过凭证,则返回 false。saveRelations暂存关联关系submitRelations保存并递交关联关系sourceBillId原始单据 IDStringFsourceBillIDsourceFunction来源功能StringFsourceFunction应用框架开发指南2.3.9. 单据超类 CoreBillEntryBase(单据体)属性常见

30、问题2.3.10.财务类单据超类 BillBase(单据头)属性2.3.11.财务类单据超类 BillEntryBase(单据体)属性第19页,总32页名称描述数据类型对应字段名称描述数据类型对应字段Company公司连接属性连接到公司FcompanyID名称描述数据类型对应字段Sequence单据分录序列号(定义为序列属性即使用seq)IntegerFSequence应用框架开发指南2.4. UI 层UI 层提供数据的展现方式与客户端逻辑。2.4.1. 通用设计方法2.4.2. 数据绑定数据绑定主要分为两种类型:类界面的数据绑定和编辑类界面的数据绑定。对于类界面,数据绑定是一个从 Query

31、 对象到 KDTable 的单向过程。通常在设计期定义完绑定关系后,1.2.3.在代码中再关注绑定问题。相关方法是:由 KDTable 的 setFormatXML 方法完成列的定义由 KDTable 的 putBindContents 传递绑定关系在 KDTalbe 的 doRequestRowSet中完成数据的获取与显示对于编辑类界面,由 loadFields 和 storeFields 方法定义了 Entity 对象与界面控件双向的绑定关系。如果对象是聚合类型的数据(例如单据)并选择 KDTable 显示单据体,则进一步由 loadLineFields 和storeLineFields

32、定义了单据行与 KDTable 的绑定关系。如果在 BOS Studio 中定义绑定关系,那么这些方法会由 BOS 自动生成。注意:不管是完全不使用 BOS Studio 来定义绑定关系,还是只有部分控件使用 BOS Studio 定义了绑定关系,你都需要重载这些方法,并通过手工编码来把所有绑定关系补充完整。这是因为超类依赖于这些方法来管理绑定关系。第20页,总32页示例:假设币别编辑界面没有为 isoCode 在设计期定义绑定关系,那么需要补充定义:public void loadFields()super.loadFields();/ editData强类型txtIsoCode.setTe

33、xt(editData.getIsoCode();public void storeFields()super.storeFields(); editData.setIsoCode(txtIsoCode.getText();应用框架开发指南2.4.3. UI 元素的使能对 UI 元素进行使能有两种方法:一是利用 setOprtState 方法,二是利用 checkActionStatus 方法。在 BOS 的 UI 设计器中,可以利用状态编辑视图定义各种状态下控件的使能情况。BOS 会自动生成反映满足这种定义的 setOprtState 方法。当然,也可以不用 BOS 的定义能力而重载后完全自

34、行编码,尤其是在需要定义逻辑时:例如控件的使能可能需要检查当 OprtState 处于某种状态时,某些数据是否同时符合要求。而 checkActionStatus 方在按钮的响应完毕后被调用,作为一种推荐的检查控件使能的统一位置。checkActionStatus 的调用频率比较高,故检查逻辑最好比较简单。注意:这种方式与 UI 的 OprtState 没有关系,视为对 OprtState 机制的一种补充。2.4.4. UILoadListener应用框架提供一种扩展机制,在加载 UI 对象和注销 UI 对象时加入自定义的处理逻辑。public interface IUILoadListene

35、r extends EventListenerpublic void load(UILoadEvent e); public void unload(UILoadEvent e);例如,想实现用户功能,可以按如下步骤进行:1. 在 BOS Studio 中定义UI 对象的扩展属性。此处定义功能编号和功能描述。2. 编写 IUILoadListener 的实现类,在 load中UI 元数据,获取扩展属性中定义的信息,注册用户息。信息;在 unload中UI 元数据,获取扩展属性中定义的信息,注销用户信2.4.5. 序时簿类 UI序时簿是 EAS 规范地展现数据的方式,提供过滤的能力,可以进行表格

36、数据的,使用 KDTable 来展现数据。处理,并可打开维护数据的编辑类界面。序时簿使用对象来执行2.4.6. 类体系第21页,总32页类体系内容CoreUI|- ListUI|- CoreBillListUI|- BillListUIEAS 的 UI 最高超类,继承 BOS 定义的 CoreUIObject(从KDPanel 派生,这样 UI 可以方便地嵌入到其它 UI 中)。 序时簿类 UI 的最高超类,有通用过滤功能,提供数据与显示,关联编辑界面的管理等。单据序时簿类UI 的超类。支持单据类的通用操作处理, 例如结清、冻结、审核等。处理状态过滤与显示。财务单据序时簿类 UI 的超类。暂时

37、没有业务处理,以后添加。应用框架开发指南2.4.7. 通用基类 CoreUI完成了通用职责处理,在此,进行了权限、License、网络的通用处理。2.4.8. 普通序时簿类 ListUI从 CoreUI 继承下来。具有快速、通用过滤等基本功能。类方法介绍普通序时簿类 UI 从 com.kingdee.eas.framework.client.ListUI 继承。通过 BOS Studio 完成UI 对象的创建、更改继承 Query 对象的类型以及 KDTable 控件绑定等。必须重载的方法:1.protected abstract String getEditUIName():指示关联的编辑

38、UI 对象名2.protected abstract IObjectBase getBizInterface():获取列表对应实体的业务接口,以便调用业务方法。要求实体必须从 ObjectBase 及其子类派生。3.protected String getLocateNames()返回可的列名数组。默认实现。第22页,总32页示例:protected IObjectBase getBizInterface()return CurrencyFactory.getRemoteInstance();示例:protected String getEditUIName()return “com.king

39、dee.eas.basedata.assistant.client.CurrencyEditUI”;|- TreeListUI|- ComboTreeListUI|- TreeDetailListUI|- ComboTreeDetailListUI层次数据序时簿的 UI 超类。支持层次数据的展现,提供KDTree 与 KDTable 的关联处理,支持层次分类数据本身的编辑。带拥有者的层次数据序时簿的 UI 超类。适用于层次数据本身还有分类的情形,例如物料按仓位分类。层次数据序时簿的 UI 超类。支持层次数据的展现,提供KDTree 与 KDTable 的关联处理,支持层次分类数据本身的编辑。带

40、拥有者的层次数据序时簿的 UI 超类。适用于层次数据本身还有分类的情形,例如科目按科目表分类。应用框架开发指南4.protected FilterInfo getDefaultFilterForQuery()可选的方法:1.protected void prepareUIContext(UIContext uiContext,java.awt.event.ActionEvent e):构造传递给 EditUI 的 UIContext。利用这个方法,你可以加入需要的任何对象并传递给 EditUI。2.protected String getEditUIModal():产生编辑 UI 的方式,缺省

41、是 Dialog 方式。可以重载这个方法,指定其它的模式。3.4.protected boolean initDefaultFilter():设置默认过滤条件。该方法被 onLoad 调用。protected void refresh(ActionEvent e):界面刷新方法。通过传递的参数 e 可以知道触发源。在ListUI 的缺省实现中,refresh 是靠调用 execQuery 把数据重新获取一遍来达到刷新的效果的。派生类可以依据实际情况来定义更合理的刷新策略。protected String getKeyFieldName():获取 KDTable 中的主键列名称,供编辑/删除时获

42、取主键用。默认值为"id"。5.第23页,总32页示例:protected String getEditUIModal()return UIFactoryName.EDITWIN;示例:protected void prepareUIContext(UIContext uiContext, java.awt.event.ActionEvent e)/ 检查是否按下新建按钮if (e.getSource() = btnAddNew)uiContext.put(“myObject”, null);elseuiContext.pub(“myObject”, getMyObject

43、();/默认进行当前 CU 的过滤。子类可重载。protected FilterInfo getDefaultFilterForQuery()FilterInfo filter = new FilterInfo(); filter.getFilterItems().add(newFilterItemInfo("CU",SysContext.getSysContext().getCurrentCU(),CompareType.EQUALS);return filter;/业务系统可重载实现下面方法,返回合适的字符串数组(表格列名),来达到的目的。protected Strin

44、g getLocateNames()String locateNames = new String2; locateNames0 = IFWEntityStruct.dataBase_Number; locateNames1 = IFWEntityStruct.dataBase_Name; return locateNames;应用框架开发指南注意:BOS 自动生成 KDTable 的列时,使用的是 query 对象名.id 的形式,与超类中约定并不一致。要么在设计期将列名修改,要么在重载该方法返回正确的列名。常见问题1.问:序时簿界面打开时会自动并显示所有的数据,加入一个过滤条件应该怎么做?

45、答:重载 initDefaultFilter 方法,为 mainQuery 对象(类型是 EntityViewInfo)增加过滤条件(filterItem)。也可弹出一个框(例如通用框),让用户指定过滤条件。2.问:我增加了一个按钮,想在执行完毕的时候刷新一下列表,该怎么做? 答:在 actionPerformed 方法最后一行加调用 exceQuery()的代码即可。问:我增加了一个按钮,想在执行前先检查列表是否有选中的行,该怎么做?答:在 actionPerformed 方法第一行加调用 checkSelected()的代码即可。该方法在检查到没有选3.中的行时,会弹出框提示用户,并且不再

46、继续执行 actionPerformed 方法中后面的代码。4.问:如何得到选中行的主键值?答:使用 getSelectedKeyValue 方法即可2.4.9. 带通用的序时簿类 CommonQueryListUI界面样式。超类为 CommonQueryListUI,从 ListUI 继承。在超类基础上增加了对通用框的管理。类方法介绍带通用的序时簿类 UI 从 com.kingdee.eas.framework.client.CommonQueryListUI 继承。可选的方法:1. protected void prepareCommonQueryParam(CommonQueryPara

47、m param):在该方法中定义要传递给通用框的参数。超类的该方法已经把对象放到了 param 中,通常可不必再重载。如果有特别的需要,则按通用框的要求进行设置。常见问题1. 问:打开带通用的序时簿类 UI,缺省会弹出通用框,我怎么调整这个行为?第24页,总32页示例(用一个编写的过滤页面替换掉通用过滤页面):protected void prepareCommonQueryParam(CommonQueryParam param)super.prepareCommonQueryParam(param); param.setShowFilter(false); / 不显示通用过滤页面param

48、.addPanel(new MyQueryPanel(); / 加入的过滤页面应用框架开发指南答:超类使用 getDefaultFilterInited()方法来判定 UI 是否已设置了缺省的 filter。当没有设置时,就会弹出通用框。你可以重载 initDefaultFilter 方法,设置缺省的 filter 并返回true(不设置 filter 也没有关系,主要是返回 true 即可)。2.4.10.单据序时簿类 UI超类为 CoreBillListUI,从 ListUI 继承。在超类基础上增加了对单据通用操作的处理。2.4.11.层次数据序时簿类 UI超类为 TreeListUI,从

49、 ListUI 继承。在超类基础上,增加了一个 KDTree,以管理层次数据。除支持在KDTable 中展现数据的编辑外(该能力从 ListUI 继承),还支持 Tree 本身的编辑(典型如地址簿分类的编辑)。类方法介绍层次数据序时簿类 UI 从 com.kingdee.eas.framework.client.TreeListUI 继承。通过 BOS Studio 完成UI 对象的创建、更改继承 Query 对象的类型以及处理控件绑定等。KDTree 上每个节点的类型为 KDTreeNode类型。必须重载的 abstract 方法:1. protected abstract String g

50、etQueryFieldName():点击树上节点时形成过滤条件时的字段,例如地址簿序时簿界面右边的地址列表要依据左边 Tree 上选中的地址分类而刷新,此处则返回 Address.class 即可。2. protected abstract ITreeBase getTreeInterface():获取层次数据实体的业务接口,以便调用业务方法。要求实体必须从 TreeBase 及其子类派生。可选的方法:1. protected void buildTreeFilter():构造子节点数据的过滤条件。在 TreeListUI 中默认实现为在EntityViewInfo 中添加一个 getQue

51、ryFieldName()=treeNodeInfo 的过滤条件,即对象的某个属性关联到 Tree 节点所代表的对象。超类认为这种条件是是最常见的情况,例如地址簿对象有一个属性指向关联的地址簿分组对象。该默认实现依赖于 getQueryFieldName 纯虚方法。如果你需要构造的件不是这种形式,则需要重载本方法自行设定过滤条件。条第25页,总32页示例:protected void buildTreeFilter()KDTreeNode treeNode = (KDTreeNode)treeMain.getLastSelectedPathComponent(); AddressClassInfo info = (AddressClassInfo)treeNode.getUserObject();/ 清空并加入的过滤条件(通讯地址包含被选中地址簿分类的名称=>仅示意而已) FilterIte

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论