KINGDEE DOC ID:KDSP_EAS_T_V3.0.0 软件构架设计文档 第 16 页 共 31 页 SampleBillInfo、 据访问接口。其中抽象基类在每次发布AbstractSampleBillCollection、 时重新生成,所以不要在其中编写逻辑。 SampleBillCollection 枚举对象 SampleBillType 提供多语言支持的枚举类 (2) 服务端组件
com.kingdee.eas.sample.app包下放置的是EJB组件类,这些组件类与EJB规范相同, 不再赘述。 (3) 客户端代码
com.kingdee.eas.sample.client包下放置了客户端相关的代码。其中的抽象基类
AbstractSampleBillEditUI中包含了:初始化界面、数据绑定相关的逻辑,每次发布元数据,该文件将被重新生成。我们可以在SampleBillEditUI中编写特定的逻辑,该文件在重新发布时不会被覆盖。
3.3.2. 编写业务逻辑
前面提到AbstractSampleBillEditUI中包含了初始化界面、数据绑定等基本逻辑,我们现在所要做的是在SampleBillEditUI中编写特定的业务逻辑。重点在于下列方法:
方法名称 onLoad 描述 界面初始化事件。可以在此: 1、 获取UI的上下文和初始化数据; 2、 设置控件风格; 3、 设置界面组件的状态; 将业务数据装载到控件。数据绑定代码在super.loadFields中。 从控件中获得最新的业务数据。数据绑定代码在super.storeFields中。 指定查询单据对象时需要的属性列表。 在客户端检查业务逻辑合法性,不合法时抛出异常。 此处的检查不能代替服务端的校验,只是为了在业务数据非法时尽量少地提交服务端。 创建一个新业务对象,在新增时被调用。 可以在此处为业务对象的属性赋默认值。 创建一个新分录对象,在新增分录时被调用。 可以在此处为分录对象的属性赋默认值。 在复制业务对象时,需要将它的一些属性置空或改变,例如对象的ID和分录的ID。 创建各个属性的编辑器,重点关注: 1、 带扩展解析器的F7; 2、 可支持模糊查询与专用对话框的F7; 3、 金额编辑器的创建; 创建各个属性的绘制器,重点关注: loadFields storeFields getSelectors verifyInput createNewData createNewDetailData setFieldsNull getXXXEditor getXXXRender KINGDEE DOC ID:KDSP_EAS_T_V3.0.0 软件构架设计文档 第 17 页 共 31 页 1、金额格式化输出;
这些方法中都有很详细的代码注释。
服务端的代码相对简单,重点关注3个方法: 方法名称 _fetchInitData _submit 描述 获取初始化数据,重点关注: 1、 如何从Context中获取登录信息; 提交业务数据,重点关注: 1、 如何使用_exists等方法; 2、 如何存取分录; 删除业务数据,重点关注: 1、如何删除分录; _delete 至此,我们已经完成了单据编辑的基本功能,具备了新增、修改、删除、复制等功能,支持各种编辑器和格式化的输出。
3.4. 实现一个单据序时簿功能
3.4.1. 元数据建模
3.4.1.1. 定义查询对象
通过定义查询对象(Query),我们可以快速地实现序时簿这种简单的查询功能。以SampleBill实体为主对象,我们定义了如下的Query:
KINGDEE DOC ID:KDSP_EAS_T_V3.0.0 软件构架设计文档 第 18 页 共 31 页 对于查询字段,需要注意“可见性”这个选项,若不选择该项,则Select字句中将不出现该字段,但它还可用于Where或Order by子句中。 为了使用通用的过滤排序对话框,我们还需要定制字段的扩展属性。如下: 名称 isCommonQueryFilter isCommonQuerySorter isUsingF7 defaultF7Query 类型 布尔 布尔 布尔 字符串 描述 字段是否出现在“自定义”页签的下拉列表中。 字段是否出现在“排序”页签的下拉列表中。 在“自定义”页签中,是否可以用F7输入比较值。 若isUsingF7为true,该属性制定一个F7 Query的全路经。 Query的主键指定为id,这样列表界面在查询时将先取ID列表,然后分批次用ID取实际数据;若不指定主键,则列表界面将采用SELECT TOP N方式查询,在数据量很大时,这种方式的性能表现不是非常理想。 3.4.1.2. 定义列表界面
以ListUI为父类,以上节定义的Query作为绑定对象,可以很容易地生成一个列表界面。该界面的绑定信息如下:
KINGDEE DOC ID:KDSP_EAS_T_V3.0.0 软件构架设计文档 第 19 页 共 31 页
3.4.1.3. 定义过滤页签
所有的过滤页签都必须从com.kingdee.eas.base.commonquery.client.CustomerQueryPanel继承。该页签主要用于放置一些无法用通用过滤形式表示的条件选项,例如多选一、对起始和结束日期有约束等。我们在SampleFilterUI中放置了起始日期和结束日期两个选项。 3.4.1.4. 发布元数据
发布后,client下将生成SampleBillListUI和SampleFilterUI相关的类文件。
3.4.2. 编写业务逻辑
由于列表界面SampleBillListUI功能相对简单,所需重写的方法较少: 方法名称 onLoad 描述 界面初始化事件。可以在此: 1、获取UI的上下文和初始化数据; 2、设置控件风格; 3、设置界面组件的状态; getDefaultFilterForQuery 返回默认的过滤条件,本例中,只过滤当前公司的单据。 initCommonQueryDialog 必要时构造一个通用过滤排序对话框,重点关注: 1、 如何设置对话框大小; 2、 如何预置过滤排序条件; 3、 如何添加特有的过滤页签;
过滤界面SampleFilterUI的重要方法: 方法名称 getParam setParam getFilterInfo verify clear 描述 将界面控件值封装到参数对象。 解析参数对象将数据装载到控件。 将参数对象转化成FilterInfo,让通用对话框组合出一个完整的过滤排序条件。 在按确定按钮前被调用,用于验证过滤条件的合法性。 新建一个过滤方案时将被调用,可以在此处赋方案的默认值。 KINGDEE DOC ID:KDSP_EAS_T_V3.0.0 软件构架设计文档 第 20 页 共 31 页
3.5. 让程序运行起来
如下定义一个Java应用程序:
为了调试服务端程序还必须保证W:/admin/StartServer.pl中Apusic的启动参数包含下列选项:-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000,然后在eclipse中配置一个远程Java应用程序:
启动Apusic后,在eclipse中先后启动server与client应用程序,我们就进入了调试程序的阶段。 首先利用EAS的菜单编辑功能增加一个菜单:单据序时簿。唯一重要的一个菜单属性“UI对象”设置为:com.kingdee.eas.sample.client.SampleBillListUI。重新登录后就可以直接双击打开单据序时簿了。 现在单据的查询、新增、修改、删除等功能基本上已经齐备了。