KINGDEE DOC ID:KDSP_EAS_T_V3.0.0 软件构架设计文档 第 11 页 共 31 页
其中的字段“FBillType”与前面的表对象一样,不一定要存在。根据命名规范,字段名以F开头,这样可以防止与数据库系统的内部变量冲突。 3.3.1.1.2. 定义逻辑键
定义好属性列表后,就可以指定其中的某些属性作为逻辑键,此处我们保留默认的继承属性id为逻辑键。
KINGDEE DOC ID:KDSP_EAS_T_V3.0.0 软件构架设计文档 第 12 页 共 31 页 3.3.1.1.3. 定义方法
业务对象的方法最终被发布为EJB组件的接口方法,可以远程调用。方法可以直接从基类导入或者手工创建。一般来说,我们只导入getCollection系列方法,这样可以提供强类型的集合对象返回值(注意:SampleBillCollection直接从AbstractObjectCollection继承,与BillBaseCollection没有派生关系),其它方法可以直接在派生类中override。
我们还定义了一个方法fetchInitData,用于返回界面初始化需要的参数,该方法只执行查询,因此事务属性设置为“Supports”,返回值类型为java.util.HashMap,并且抛出com.kingdee.eas.common.EASBizException。注意,参数、返回值、已经异常声明必须从下拉列表中选择或者直接填写完整的类名(包含包名)。 3.3.1.2. 定义业务对象—单据体
单据体的定义过程与单据头类似,不再赘述。需要注意的是“金额”属性的数据类型应该选用BigDecimal,该属性类型可以提供任意精度的数字,在财务核算系统中这个特性尤为重要。 3.3.1.3. 定义业务对象的关联关系
单据头与单据体是一对多的关系。为了在程序中可以在两者直接相互导航,我们可以给这两个对象建立一个关联。首先定义一个关系对象:
KINGDEE DOC ID:KDSP_EAS_T_V3.0.0 软件构架设计文档 第 13 页 共 31 页
基于该关系对象,在单据头中定义entries属性关联到单据体,对应地,单据体上的bill属性关联到单据头:
同样地,定义出单据体与科目的关联关系。
3.3.1.4. 定义数据表
完成业务对象的定义后,我们可以利用BOS的导表功能轻松得到表结构元数据。在BOS的“包视图”中右键选择实体对象,并选择“实体导出为表”,就可以得到下列表结构:
KINGDEE DOC ID:KDSP_EAS_T_V3.0.0 软件构架设计文档 第 14 页 共 31 页 需要注意其中的FDesc字段,单据体的备注字段被设计成可以存储Unicode字符(NVARCHAR),最大长度为200。对于金额字段,不允许存储空值,可以设置默认值为0,当设计跨数据库程序时,这点非常重要,因为不同数据库对聚合函数中空值的处理可能不一致。对于FSeq和FBillID,这两个字段不允许为空,从数据库约束层面来保证业务逻辑。 之后右键选择数据表将它们导出到业务数据库。
3.3.1.5. 定义编辑界面
与业务对象相对应,应用框架在UI层也有一个类库体系,我们可以选择BillEditUI作为该功能的基类。在向导的第二步,可以指定界面与SampleBill实体绑定。在第三步中可以选择与控件绑定的属性。点击完成后,BOS自动生成了相关的控件,并按照默认布局排列。 为了适应不同的显示分辨率,应该界面的布局为KDLayout,该布局管理器可以根据窗口大小自动重排控件。 对于单据体上的科目属性,BOS目前无法生成绑定信息,必须手工在表格设计器中新建一列:
KINGDEE DOC ID:KDSP_EAS_T_V3.0.0 软件构架设计文档 第 15 页 共 31 页
然后手工增加绑定信息:
3.3.1.6. 发布元数据
至此,我们完成了编辑功能所需元数据的定义,现在可以右键选择它们发布。切换到Java透视图,刷新包资源管理器,我们可以看到src文件夹下新建了很多Java源文件。 (1) 协议类
com.kingdee.eas.sample包下放置的都是协议类,包括:数据包、组件接口以及枚举对象等。最终部署时,客户端与服务器都将装载这些类。协议类中不要编写引用服务器或客户端特有类的代码,否则将出现类无法装载的异常。
协议类类型 类名 接口类 数据包 ISampleBill SampleBillFactory AbstractSampleBillInfo、 说明 SampleBill组件接口 创建组件接口的工厂 SampleBill的数据包,提供强类型的数