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

下载本文档

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

文档简介

1、应用框架开发指南(V5.0 版)修订历史版本号1.02.03.0修订日期修订者修订类型新建新增及补充新增及补充说明宋志海、宋志海、2005-9-28、目录应用框架概述4应用框架设计模型结构.通用设计模式及功能说明....1.6.取数虚模式5操作状态提示模式5操作模式6快速定位模式6表头排序模式7界面状态管理72.2.业务对象层........11.通用设计方法11业务数据状态管理11类体系13所有业务对象

2、超类 CoreBase13普通业务对象超类ObjectBase14基础资料超类 DataBase15层次数据超类 TreeBase16单据超类 CoreBillBase(单据头)17单据超类 CoreBillEntryBase(单据体)19财务类单据超类 BillBase(单据头)19财务类单据超类 BillEntryBase(单据体)192.3.UI 层........8.通用

3、设计方法20数据绑定20UI 元素的使能控制21UILoadListener21序时簿类UI21类体系21通用基类 CoreUI22普通序时簿类 ListUI22带通用查询的序时簿类 CommonQueryListUI24单据序时簿类 UI25层次数据序时簿类UI25带拥有者的层次数据序时簿类UI27带分类的层次数据序时簿 UI27带拥有者和分类的层次数据序时簿 UI28编辑类 UI28类体系28普通编辑类UI28单据编辑类UI303.应用框架典型范例323.1. 32总结错误!未定义书签。附录 A错误!未定义书签。.应用框架 FQA错误!未定义书签。应用框架初始目标即是实现基本

4、数据结构及通用界面交互的处理。减轻业务系统通用界面的开发工作量,提高工作效率。目前的应用框架分为两层,一部分是 uiM主要是对于 UI 层的抽象,独立于 EAS 开发系统;另一部分是与 EAS 进行紧密集成的 eas_framework 部分。本文档主要描述 eas_framework 的设计实现部分。1. 应用框架概述2.1. 通用设计模式及功能说明2.1.1. 取数虚模式对于列表方式数据查询,应用框架使用虚模式进行取数。1.意图:在数据量较大的情况下,进行分批取数,减少网络流量,加快响应速度。2.:在信息系统中,数据查询是最常用的操作,但如果查询结果数据量很大情况下,一方面会增加网络传输的

5、数据量,另一方面是一个耗时的过程,客户会出现一个可能较长时间的等待。这两方面都会降低的可用性。为解决这个问题,使用虚模式。如果列表中定义了主键,则先取前 100 条数据,然后在获取所有的数据 ID 值。如果没有定义主键,则使用 top 100 等方式来获取。后3.适用性:在数据量较大情况下非常有效。式不使用。如果是海量数据,如查询结果很大,比如 100000 条以上,所有的 ID 获取也是一个不小的数据量与耗时过程,这时需要进行特殊处理。4.应用:ListUI 中使用。5.缺点及注意事项:因为大于 100 条数据时,会启动一个线程来取数。在大并况下会出现 N*2 的数据请求量。2.1.2. 操

6、作状态提示模式对于操作提示,应用框架则为对应框方式处理。1.意图:了提示方式。如果界面中有状态条,则在状态条中提示;如果没有状态条,在状态条中进行信息提示。2.:在企业信息管理系统中,用户与系统的交互非常多。在用户操作过程中,一些的提示、成功完成操作,不成功的操作,传统的做法是给用户一个框提示,显示这些信息。但这样一来,会增加用户的无意义的操作,中断用户的连续操作,对用户非常不友好。为了解决这类问题,对于一些系统的提示,采用状态条进行用户仅在状态栏就可以获取系统信息。3.适用性:的提示,减少用户的一些无意义的操作。对用户的一些常用而且连续的操作界面,这种模式大大方便用户的交互。2. 应用框架设

7、计模型结构对于无状态栏或信息较多的情况应用: CoreUI,EditUI缺点及注意事项:为力。对于模式框,目前由于没有显示状态栏,所以此模式不生效。2.1.3.操作模式对于长时间的耗时操作,应用框架到其他业务界面继续操作。1.意图:了处理机制,当前界面锁定,状态栏进度条提示。但用户可切换长时间操作进行多线程处理,不影响其他任务。2.:在企业应用管理系统中,有一些长时间的操作功能,如过账、结账等功能。这时传统的做待,直到操作完成。这样用户这段时间内基本上对系统不可操作,大大降低了用户的可用性。让用户等为了解决这个问题,框架采用了对某些功能使用多线程机制,对于耗时操作新起一个线程来运行。这样其他任

8、务还可以继续使用,增加了用户体验。3.适用性:对于一些操作提供了方便。长时间操作的当前操作页签会锁定,直到系统完成后应用: CoreUI缺点及注意事项:。如果业务系统的状态在锁定之后控件完成一些状态改变,当别注意处理。操作完成后的状态恢复不生效。需要特2.1.4. 快速定位模式对于列表方式数据查询,业务系统可定制定位字段,应用框架根据定制字段在列表中自动定位。1.意图:对于大数据量情况下,快速定位到用户期望操作的数据下。2.:对于大数据量的列表,框架已经使用了虚模式,但用户要在列表中找一条符合条件的数据,就可能需要拉动滑动条来查看,这对于用户来说是一件不愉快的事。为了解决这个问题,3.适用性:

9、对常用的列使用了快速定模式,方便用户来进行查找操作。用户可快速地在列表中找到符合条件的应用: ListUI缺点及注意事项:由于此定位方式是基于表格查找方法,。的情况上,把所有虚模式的数据取回来后发现没有匹配项,这时提示用户没有找到。这种情况下效率。2.1.5. 表头排序模式对于列表浏览界面,可通过单击表头来实现使用表头字段进行重新的全排序。1.意图:对于列表数据,用户可地重新排序他希望的列。2.:对于大数据量的列表结果,通常做过滤时会让用户指定排序的列。但在结果查询后,用户也希望可以在结果集中进行重新排序,而不是进行重新过滤后指定排序字段。为了解决这个问题,3.适用性:允许用户对指定的表列头进

10、行排序,而不需要重新在过滤中指定排序字段。用户可对结果集进行快速的重新排序。应用:ListUI 表头排序。缺点及注意事项:如果表格中有列为 Query 中没有的,会出错。2.1.6. 界面状态管理模式对于新增、查看、编辑状态进行了1.意图:处理。2.:3.适用性:4.应用:5.缺点及注意事项:2.1.7. 数据绑定模式1.意图:2.:3.适用性:4.应用:5.缺点及注意事项:2.1.8. 表格设置模式1.意图:2.:3.适用性:4.应用:5.缺点及注意事项:2.1.9. 通用校验框架模式1.意图:2.:3.适用性:4.应用:5.缺点及注意事项:2.1.10.通用异常框架模式1.意图:2.:3.

11、适用性:4.应用:5.缺点及注意事项:2.1.11.树型结构的算法优化模式1.意图:2.:3.适用性:4.应用:5.缺点及注意事项:2.1.12.查看编辑界面的编辑与删除模式1.意图:2.:3.适用性:4.应用:5.缺点及注意事项:2.1.13.打印设置用户相关性支持模式1.意图:2.:3.适用性:4.应用:5.缺点及注意事项:2.2. 典型 UI 交互及生命周期管理2.2.1. UI 创建的过程及处理说明及注意事项:所有的 UI 创建都由 UIFactory 来完成;UIFactoryHelper 完成 UI 中的对象初始化工作;2.3. 业务对象层应用框架在业务对象层建立了一些典型业务对象

12、,可用做设计建立自己的业务对象的超类。这些用做超类的业务对象,既定义了对象属性,也提供了业务方法。例如,层次数据的超类 TreeBase 在数据保存时会自动level、isLeaf 和 longNumber 的正确性。2.3.1. 通用设计方法2.3.2. 业务数据状态管理业务数据状态属于数据的附加描述属性,表达业务数据经过的处理过程,例如:是否已生效、是否已审核,并据此进行相应的逻辑控制。业务数据状态根据业务数据的不同类型会有不同组合,例如:基础资料中可能只有是否生效状态,而单据中会有是否已审核及是否已关闭等状态。在应用架构中会抽象业务数据中存在的状态种类,并在超类体系里对某些通用状态的处理

13、逻辑。状态配置表下表列出了所有已知的数据状态属性,这些属性将作为基础的状态属性供定义具体的业务对象时选择使用。状态名状态描述状态枚举类型属性名字段名说明生效状态0:暂存EffectedSusEnumEffectedSusFEffectedSus暂存的业务数据不需要进行数据 检查,不参与统计报表和结账结算处理1:生效作废状态0:普通DeletedSusEnumDeletedSusFDeletedSus作废的业务数据不参与统计报表和结账结算处理1:作废审核状态0:未审核CheckedSusEnumCheckedSusFCheckedSus1:已审核冻结状态0:未冻结BlockedSusEnumBl

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

15、、 Delivery block、 Invoicing block1:已冻结下达状态0:未下达ReleasedSusEnumReleasedSusFReleasedSus订单类的单据一般会有下达状态1:已下达预算审批状态0:未审批BudgetAuditedSu sEnumBudgetAuditedS usFBudgetAuditedS us1:审批未通过2:审批已通过交付状态0:未交付DeliveredSusEnu mDeliveredSu sFDeliveredSu s1:部分交付2:全部交付FI记账状态0:未记账FItedSusEnumFItedSusFFItedSus1:已记账MA记账状

16、态0:未记账MAtdSusEnumMAtdSusFMAtdSus1:已记账关闭(结清)状态0:未关闭ClosedSusEnumClosedSusFClosedSus1:已关闭在内部处理中,实际上选择了三个基础的状态属性来实现控制逻辑:作废状态、完成状态和关闭状态。控制逻辑的规则是:从编程的方便性考虑,为单据状态定义自己的枚举,并为值对象增加一个 getBillSus 方法。该方法通过计算基本属性的取值而得到对应的单据状态。需要注意的是,设置单据状态的操作仍将操作基本状态属性,并且在设置某个状态属性时可能需要根据控制逻辑同时设置其它属性。2.3.3. 类体系2.3.4. 所有业务对象超类 Cor

17、eBase职责所有 EAS 业务对象的超类,具有 ID 属性,完成数据的基本作。功能。如,新增、修改、删除、暂存等操类体系内容CoreBase所有业务对象的超类|- ObjectBase|- DataBase|- TreeBase|-CoreBillBase|- BillBase|- CoreBillEntryBase|-BillEntryBase普通业务对象的超类基础资料类业务对象的超类层次数据类业务对象的超类单据业务对象的超类,对应单据头部分财务类单据业务对象的超类,对应财务单据头部分单据业务对象的超类,对应单据体部分财务类单据业务对象的超类,对应财务单据体部分单据状态状态判断操作控制取消

18、关闭计划下达 进行中完成只要作废状态为 1单据不是取消状态且关闭状态为 1单据不是取消状态也不是关闭状态,且完成状态为 0(未下达)单据不是取消状态也不是关闭状态,且完成状态为 1(下达)单据不是取消状态也不是关闭状态,且完成状态为 2(进行中)单据不是取消状态也不是关闭状态,且完成状态为 3(完成)若单据进入取消状态,则只有恢复后才能进行其它所有单据操作除与取消相关外的其它操作允许下达操作允许撤消操作允许关闭操作属性方法常见问题1.问:如何查询的布署信息?答:应用框架实体层是抽象类,没有 EJB 布置信息,也就是说应用框架不需要布署。2.问:CoreBase 为什么没有 effectedS答

19、:并不是每个业务对象都有此属性,us 属性?这里进行了属性命名约束,如果要使业务对象生效,必须使用“effectedS3.这些基类us”名称。如果子类没有此属性,则基类中的 save 与 submit 作用一致。的方法,子类不可以再一次定义,否则就会覆盖掉基类方法,失去了基类的作用。2.3.5. 普通业务对象超类 ObjectBase属性名称描述数据类型对应字段名称描述addNew继承基类, 添加时设置 creator , createTime, lastUpdateUser, lastUpdateTime,等固定属性值。Update继 承 基 类 , 添 加 时 设 置 lastUpdate

20、User, lastUpdateTime, company 等固定属性值。Submit设置业务数据生效,并保存save设为暂存状态,并保存cancel作废(逻辑删除),并保存cancelCancel取消作废状态,并保存checkSusValid检查业务数据是否是有效canUpdate检查业务数据能否更新,逻辑条件是否满足更新要求(补充)isReferenced检查业务数据是否被,删除操作会调用此函数(补充)名称描述数据类型对应字段Id对象 IDUUIDFID方法常见问题1.问:Creator、CreateTime、LastUpdateUser、LastUpdateTime 作用及意义?答:所在

21、普通业务对象的基本属性,由基类来,业务对象不能用作其他用途。2.3.6. 基础资料超类 DataBase属性名称描述数据类型Name名称(多语言)StringNumber编码Stringdescription描述(多语言)StringsimpleName简称String名称描述CU控制单元连接属性 连接到 控制单元中FcontroitIDCreator创建者连接属性 连接到 用户FcreatorIDCreateTime创建时间TimestampFcreateTimeLastUpdateUser最后修改 者连接属性 连接到 用户FLastUpdateUserIDLastUpdateTime最后修

22、改 时间TimestampFLastUpdateTime方法注:名称与编码检查方法都是需要根据业务要求进行调用的,应用框架本身不调用。常见问题1.问:为何继承自 DataBase 的类没有自动进行名称及编码的检查?答:没办法上的方法来完成。检查机制,可能由于检查的条件不一样,如科目表使用全局的检查,就可直接调用如2.问:编码规则如何起作用?答:编码规则在 DataBase 类起作用。从 DataBase 的类如果定义了编码规则就会自动由基类来完成,子类不需要关心。2.3.7. 层次数据超类 TreeBase属性因为超类中定义的关系无法实例化,所以 TreeBase 并未定义 parent 关联

23、属性。要求在子类中自行建立这个表示指向父节点的关联属性,并且约定属性名一定是 parent。方法名称描述名称描述数据类型对应字段IsLeaf是否叶节点FIsLeafLevel所在级次egerFLevelLongNumbe r节点完整编 号StringFLongNum ber名称描述checkNameBl名称是否为空checkNameDup名称是否重复checkNumberBl编码是否为空checkNumberDup编码是否重复getBizOUCoreBaseInfo 的接口。常见问题问:isLeaf、level、longNumber 由基类处理吗?答:是的。子类不需要进行干预。问:检查编码重复

24、的注意事项。答:原则:输入项必须完整,生成项可以没有,如 level,isLeaf,longnumber 等,传递给基类的值要求有 id,number,name,description。2.3.8. 单据超类 CoreBillBase(单据头)属性名称描述数据类型对应字段Number单据StringFNumberhandleTime经办时间TimeStampFHandleTimeHandler经手人连接属性连接到用户FhandlerIDDescription备注(多语言)StringFdescriptionhasEffected是否曾经生效FhasEffectedAuditor审核人连接属性连

25、接到用户FcheckIDupdaeafByLongNumber父节点更新时重设所有子节点checkParentDataExist检查该下的父节点是否存在checkParentValid校验父节点的状态应为有效,父节点是否被删除。checkParentBeUsed校验父节点是否被其他数据使用。如果被使用则不能新建子节点。子类需要通过重载_isReference 来定义 逻辑getRoot获取根节点getChildren返回儿子节点集合getAllChildren返回所有后代节点集合deleteWithChildren删除自身及其所有后代节点moveTreeNode移动节点位置方法可选的方法:1.

26、 protected System getOwnedSys():定义单据所属的系统。通常情况下一种单据所属的系统是确定的,可以在单据对象的扩展属性予以定义。超类负责处理这种情况。对于一种类型的单据被实例化到不同系统的情况,可以增加实体属性,并重载这个方法。常见问题问:单据生成凭证的处理?答:校验是否已经生成过凭证,如果已经生成过则抛异常。问:单据关联关系处理。答:处理所有的分录关联。分为暂存与提交两类。名称描述checkOut结清(关闭)业务数据passAudit审核通过UnpassAudit设置为未审核状态Freeze冻务数据Unfreeze解冻业务数据CheckSusFreeze检查业务数

27、据是否被冻结CheckNumberDup检查单据是否重复CheckNumberBl检查单据是否为空checkHandleTimeBl检查经办时间是否为空checkHandlerBl检查经办人是否为空CheckLineExist检查是否至少有一条分录getOwnedSys获取所属系统。generateVoucher生成凭证deleteVoucher删除凭证:若没有生成过凭证,则返回 false。saveRelations暂存关联关系submitRelations保存并递交关联关系sourceBillId原始单据 IDStringFsourceBillIDsourceFunction来源功能Str

28、ingFsourceFunction2.3.9. 单据超类 CoreBillEntryBase(单据体)属性常见问题2.3.10.财务类单据超类 BillBase(单据头)属性2.3.11.财务类单据超类 BillEntryBase(单据体)属性名称描述数据类型对应字段名称描述数据类型对应字段Company公司连接属性连接到公司FcompanyID名称描述数据类型对应字段Sequence单据分录序列号(定义为序列属性即使用seq)egerFSequence2.4. UI 层UI 层提供数据的展现方式与客户端控制逻辑。2.4.1. 通用设计方法2.4.2. 数据绑定数据绑定主要分为两种类型:查询

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

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

31、许强类型 txtIsoCode.setText(editData.getIsoCode();public void storeFields()super.storeFields(); editData.setIsoCode(txtIsoCode.getText();2.4.3. UI 元素的使能控制对 UI 元素进行使能控制有两种方法:一是利用 setOprtSe 方法,二是利用 checkActionSus 方法。在的 UI 设计器中,可以利用状态编辑视图定义各种状态下控件的使能情况。会自动生成反映满足这种定义的 setOprtSe 方法。当然,也可以不用的定义能力而重载后完全自行编码,尤其

32、是在需要定义逻辑时:例如控件的使能可能需要检查当 OprtSe 处于某种状态时,某些数据是否同时符合要求。而 checkActionS置。checkActionSus 方在按钮的事件响应完毕后被调用,作为一种的检查控件使能的位us 的调用频率比较高,故检查逻辑最好比较简单。注意:这种方式与 UI 的 OprtSe 没有关系,视为对 OprtSe 机制的一种补充。2.4.4. UILoadListener应用框架提供一种扩展机制,允许在加载 UI 对象和注销 UI 对象时加入自定义的处理逻辑。public void load(UILoadEvent e);public void unload(U

33、ILoadEvent e);例如,想实现用户功能,可以按如下步骤进行:1. 在Studio 中定义 UI 对象的扩展属性。此处定义功能和功能描述。2. 编写 IUILoadListener 的实现类,在 load 事件中UI 元数据,获取扩展属性中定义的信息,注册用户息。信息;在 unload 事件中UI 元数据,获取扩展属性中定义的信息,注销用户信2.4.5. 序时簿类 UI序时簿是 EAS 规范地展现数据的方式,提供查询过滤的能力,可以进行表格数据的定位处理,并可打开数据的编辑类界面。序时簿使用查询对象来执行查询,使用 KDTable 来展现数据。2.4.6. 类体系类体系内容CoreUI

34、|- ListUI|- CoreBillListUI|- BillListUIEAS 的 UI 最高超类,继承定义的 CoreUIObject(从 KDPanel 派生,这样 UI 可以方便地嵌入到其它 UI 中)。 序时簿类 UI 的最高超类,有通用过滤功能,提供数据查询与显示,关联编辑界面的管理等。单据序时簿类UI 的超类。支持针对单据类的通用操作处理,例如结清、冻结、审核等。处理状态过滤与显示。财务单据序时簿类 UI 的超类。暂时没有业务处理,以后添加。publicerface IUILoadListener extends EventListener2.4.7. 通用基类 CoreUI

35、完成了通用职责处理,在此,进行了权限、License、网络控制的通用处理。2.4.8. 普通序时簿类 ListUI从 CoreUI 继承下来。具有快速定位、通用过滤等基本功能。类方法介绍普通序时簿类 UI 从 t.ListUI 继承。通过Studio 完成 UI 对象的创建、更改继承 Query 对象的类型以及 KDTable 控件绑定等。必须重载的方法:2.:获取列表对应实体的业务接口,以便调用业务方法。要求实体必须从 ObjectBase 及其子类派生。3. protected String getLocateNames()返回可定位的列名数组。默认实现。示例:protected IObj

36、ectBase getBizerface()return CurrencyFactory.getRemoteInstance();protected abstract IObjectBase getBizerface()1.protected abstract String getEditUIName():指示关联的编辑 UI 对象名示例:protected String getEditUIName()return “t.CurrencyEditUI”;|- TreeListUI|- ComboTreeListUI|- TreeDetailListUI|- ComboTreeDetailLis

37、tUI层次数据序时簿的 UI 超类。支持层次数据的展现,提供 KDTree 与 KDTable 的关联处理,支持层次分类数据本身的编辑。带拥有者的层次数据序时簿的 UI 超类。适用于层次数据本身还有分类的情形,例如物料按仓位分类。层次数据序时簿的 UI 超类。支持层次数据的展现,提供 KDTree 与 KDTable 的关联处理,支持层次分类数据本身的编辑。带拥有者的层次数据序时簿的 UI 超类。适用于层次数据本身还有分类的情形,例如科目按科目表分类。4.protected FilterInfo getDefaultFilterForQuery()可选的方法:1.:允许构造传递给 EditUI

38、 的 UIContext。利用这个方法,你可以加入需要的任何对象并传递给 EditUI。2.protected String getEditUIModal():产生编辑 UI 的方式,缺省是 Dialog 方式。可以重载这个方法,指定其它的模式。3.4.protected initDefaultFilter():设置默认过滤条件。该方法被onLoad 调用。protected void refresh(ActionEvent e):界面刷新方法。通过传递的参数e 可以知道触发事件源。在 ListUI 的缺省实现中,refresh 是靠调用 execQuery 把数据重新获取一遍来达到刷新的效果

39、的。派生类可以依据实际情况来定义更合理的刷新策略。protected String getKeyFieldName():获取 KDTable 中的主键列名称,供编辑/删除时获取主键用。默认值为id。5.示例:protected String getEditUIModal()return UIFactoryName.EDITWIN;示例:protected void prepareUIContext(UIContext uiContext, java.awt.event.ActionEvent e)/ 检查是否按下新建按钮if (e.getSource() = btnAddNew)uiConte

40、xt.put(“myObject”, null);elseuiContext.pub(“myObject”, getMyObject();protected void prepareUIContext(UIContext uiContext, java.awt.event.ActionEvent e)/默认进行当前 CU 的过滤。子类可重载。protected FilterInfo getDefaultFilterForQuery()FilterInfo filter = new FilterInfo(); filter.getFilterItems().add(newFilterItemIn

41、fo(CU,SysContext.getSysContext().getCurrentCU(),CompareType.EQUALS);return filter;/业务系统可重载实现下面方法,返回合适的字符串数组(表格列名),来达到定位的目的。 protected String getLocateNames()String locateNames = new String2; locateNames0 = IFWEntityStruct.dataBase_Number; locateNames1 = IFWEntityStruct.dataBase_Name; return locateNa

42、mes;注意:自动生成 KDTable 的列时,使用的是 query 对象名.id 的形式,与超类中约定并不一致。要么在设计期将列名修改,要么在重载该方法返回正确的列名。常见问题1.问:序时簿界面打开时会自动查询并显示所有的数据,加入一个过滤条件应该怎么做?答:重载 initDefaultFilter 方法,为 mainQuery 对象(类型是 EntityViewInfo)增加过滤条件(filterItem)。也可弹出一个框(例如通用查询框),让用户指定过滤条件。2.问:我增加了一个按钮,想在执行完毕的时候刷新一下列表,该怎么做?答:在 actionPerformed 方法最后一行加调用 e

43、xceQuery()的代码即可。问:我增加了一个按钮,想在执行前先检查列表是否有选中的行,该怎么做?答:在 actionPerformed 方法第一行加调用 checkSelected()的代码即可。该方法在检查到没有选3.中的行时,会弹出框提示用户,并且不再继续执行 actionPerformed 方法中后面的代码。4.问:如何得到选中行的主键值?答:使用 getSelectedKeyValue 方法即可带通用查询的序时簿类monQueryListUI界面样式。超类为 CommonQueryListUI,从 ListUI 继承。在超类基础上增加了对通用查询框的管理。类方法介绍带通用查询的序时

44、簿类 UI 从 com.kingdee.eas.frmonQueryListUI 继承。可选的方法:1. protected voidmonQueryParam(CommonQueryParam param):在该方法中定义要传递给通用查询框的参数。超类的该方法已经把查询对象放到了 param 中,通常可不必再重载。如果有特别的需要,则按通用查询框的要求进行设置。常见问题1. 问:打开带通用查询的序时簿类 UI,缺省会弹出通用查询框,我怎么调整这个行为?示例(用一个自己编写的过滤页面替换掉通用过滤页面):protected voidmonQueryParam(CommonQueryParam

45、param)monQueryParam(param); param.setShowFilter(false); / 不显示通用过滤页面 param.addPanel(new MyQueryPanel(); / 加入自己的过滤页面答:超类使用 getDefaultFilterInited()方法来判定 UI 是否已设置了缺省的 filter。当没有设置时,就会弹出通用查询框。你可以重载 initDefaultFilter 方法,设置缺省的 filter 并返回true(不设置 filter 也没有关系,主要是返回 true 即可)。2.4.10.单据序时簿类 UI超类为 CoreBillList

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

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

48、treeNodeInfo 的过滤条件,即查询对象的某个属性关联到 Tree 节点所代表的对象。超类认为这种查询条件是是最常见的情况,例如地址簿对象有一个属性指向关联的地址簿分组对象。该默认实现依赖于 getQueryFieldName 纯虚方法。如果你需要构造的查询条件不是这种形式,则需要重载本方法自行设定过滤条件。示例:protected void buildTreeFilter()KDTreeNode treeNode = (KDTreeNode)treeMain.getLponent(); AddressClassInfo info = (AddressClassInfo)treeNod

49、e.getUserObject();/ 清空并加入自己的过滤条件(通讯地址包含被选中地址簿分类的名称=仅示意而已) FilterItemCollection items = mainQuery.getFilter().getFilterItems(); items.clear();protected abstract ITreeBase getTreeerface()items().add(new FilterItemInfo (talAddress,info.getClaame(),CompareType.LIKE)2.protected String getGroupEditUIName(

50、):指示 Tree 关联的类别编辑 UI 对象名,如果界面需要实现类别编辑,则需要重载该方法。protected String getGroupEditUIModal():与ListUI 类似,表示产生类别编辑 UI 的方式。 protected void prepareGroupUIContext(UIContext uiContext, ActionEvent e):类似于ListUI 对关联 EditUI 的处理方式,允许构造传递给 GroupEditUI 的 UIContext。超类默认对于新增类别,传入了当 前选中的节点对象(默认为是新增节点的父节点,通过 UIContext.PAR

51、ENTNODE 传递)。protected String getRootName():定义一个虚拟根节点的显示名称,默认返回 null,即不需要虚拟根节点。此时,所有节点都依据实际的数据构造,可能会有多个一级节点。继承类可以重载,定义虚拟根 结点。.protected void initTree():初始化构造 Tree。一般情况下请不要重载这个方法,除非你决定用自己的 ITreeBuilder 接口的实现类替换掉超类默认提供的 LNTreeBtected ILNTreeNodeCtrl getLNTreeNodeCtrl():返回与 LNTreeBuilde

52、r 配合使用的 ILNTreeNodeCtrl实现类。超类提供默认的实现类 DefaultLNTreeNodeCtrl。在特定情况下需要重载,例如菜单树需要根据 权限进行过滤而不是仅根据 longnumber 过滤时。7.8.protectedisMoveTree() 是否要确认进行节点移动。常见问题1. 问:如何启用 TreeListUI 对 Tree 分组的编辑能力?答:首先将分组编辑相关的按钮 Visible 属性设置为 true,然后重载 getGroupEditUIName 方法指示关联的编辑 UI 对象名。2. 问:如何获得选点?如何获得选点的主键值?答:使用 getSelecte

53、dNode 获得选getSelectedNodeKeyValue 方法。点所对应的对象。 为方便获取主键值, 提供了Tree 的构造机制及如何扩展?树的构造由 ITreeBuidler 接口定义。主要的方法是:public JTree buildTree(JTree tree):构建树,若传入 tree 为 null,则新建树。public void refreshTreeNode(KDTreeNode treeNode):重新取数,刷新节点。/如果需要框提示,请重载,默认不需要。protectedisMoveTree()return true;示例(地址簿序时簿需要定义一个虚的根节点):pr

54、otected String getRootName()return 地址分类;针对 EAS 处理层次数据采用长编码(longnumber)的情况,应用框架提供了 LNTreeBuilder 这个特定实现类。与此配合,又定义了 ILNTreeNodeCtrl 接口和该接口的实现类 DefaultLNTreeNodeCtrl。1.2.LNTreeBuilder:实现 ITreeBuilder 接口,提供树的构建能力。ILNTreeNodeCtrl 接口:根据父结点信息,获取指定层次子孙结点信息。主要的方法是:public AbstractObjectCollection getChildren(

55、TreeBaseInfo parentNodeInfo, level):获取指定结点的指定级次的子孙结点。若 parent=null,则获取从 1 到指定级次的结点。3.DefaultLNTreeNodeCtrl:实现 ILNTreeNodeCtrl 接口,完成根据 longnumber 获取下级节点数据的能力。如果有不基于 longnumber 方式的层次数据,可通过实现 ITreeBuilder 接口予以扩展。2.4.12.带拥有者的层次数据序时簿类 UI超类为 ComboTreeListUI,从 TreeListUI 继承。2.4.13.带分类的层次数据序时簿 UI超类为 TreeDet

56、ailListUI,从 ListUI 继承。类方法介绍层次数据序时簿类 UI 从 t.TreeListUI 继承。通过Studio 完成UI 对象的创建、更改继承 Query 对象的类型以及处理控件绑定等。KDTree 上每个节点的类型为 KDTreeNode类型。必须重载的 abstract 方法:1.protected abstract String getQueryFieldName():点击树上节点时形成过滤条件时的字段,例如地址簿序时簿界面右边的地址列表要依据左边 Tree 上选中的地址分类而刷新,此处则返回 Address.class 即可。2.protected abstract

57、 ITreeBase getTreeerface():获取层次数据实体的业务接口,以便调用业务方法。要求实体必须从 TreeBase 及其子类派生。protected abstract String getGroupEditUIName():关联的类别编辑 UI 对象名,如果界面需要实现类别编辑,则需要重载该方法。TreeDetailListUI 中,protected abstract IObjectPK getSelectedTreeKeyValue();子类必须重载实现,否则不能实现定位与移动。3.4.示例:IObjectPK detail =new ObjectUuidPK(getSe

58、lectedKeyValue(); tryMyTreeDetailInfo treeInfo = (MyTreeDetailInfo)getBizerface().getValue(detail);IObjectPK tree = new ObjectUuidPK(treeInfo.getTree().getId();return tree;catch (Exception ex)handUIException(ex); return null;5.可选的方法:参考层次数据序时簿类 UI。2.4.14.带拥有者和分类的层次数据序时簿 UI超类为 ComboTreeDetailListUI,从

59、TreeDetalListUI 继承。2.4.15.编辑类 UI2.4.16.类体系2.4.17.普通编辑类 UI超类为 EditUI,从 CoreUI 继承。EditUI 支持实体对象的编辑,提供新增、删除、提交、暂存、作废数据、放弃作废、打印及上一条、下一条等功能。EditUI 支持的实体对象必须从 ObjectBase 及其子类继承。类方法介绍普通编辑类 UI 从 com.kingdee.eas.framework.c建、更改继承 Entity 对象的类型以及处理控件绑定等。nt.EditUI 继承。通过Studio 完成 UI 对象的创类体系内容CoreUI|- EditUI|- BillEditUIEAS 的 UI 最高超类,继承定义的 CoreUIObject(从 KDPanel 派生,这样 UI 可以方便地嵌入到其它 UI 中)。 编辑类 UI 的超类,支持实体对象的编辑能力,与 ObjectBase 配合使用。单据编辑类 UI 的超类,与 BillBase 配合使用。必须重载的方法:2.:获取实体对象的业务接口,供调用方法使用。可选的方法:1.protected void verifyInput () throws Exception:校验输入的。可以直接检查空或范围等条件,也可以调用服务端提供的校验方法。可使用 SysUtil.

温馨提示

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

评论

0/150

提交评论