金蝶EAS BOS开发之扩展表应用

  我们在客户业务系统开发中,经常会遇到一些单据信息量很大(字段很多),由于关系数据库的表中一行最多只能存储8000个字符,这样经常会导致我们通过一个实体(通常是一个实体一张表)无法解决,需要再另外新建一个实体,和当前实体(以后称为主实体)进行关联,在单据的编辑界面自己编码代码进行绑定。这样做有主要以下2点不足。
        1、要手动编写代码,工作量大
        2、由于是2个实体,在保存时分别为2个单独的事务,容易造成主实体外的单据保存多条的情况

        在hibernate中,可以通过级联的关联方式配置来实现这种需求,同时支持1对1和1对多(即EAS中的单据头和分录的关系)。


        由于在EAS BOS中,组合关系无法实体1对1的关系,但是BOS中提供了一种扩展表的方式,一个实体中的属性,可以指定映射到扩展表中字段,从而实现把一个有很多属性的实体(比如超过200个属性)对应到多张数据表上。操作步骤如下:


1、使用BIM创建好一个业务单据,并字段字段,如下图



2、使用BOS,新增一张扩展表,并定义要映射过来和字段


3、打开实体对应的数据表,指定关联的扩展表





4、打开实体,重新指定属性,关联到扩展表上


5、发布业务单据和新建的扩展表,并在数据库中创建扩展表(注:通过BIM发布业务单元在同步数据库步骤不会创建扩展表)


6、启动开发环境,使用上面新建的业务单据新增数据进行测试,数据可以正在存取。



如果要正常运行上面的例子,需要修改好下面的问题2,可以使用我提供的补丁包和进行验证。希望金蝶研发能够尽快发补丁解决下面的2个问题。
补丁包下载路径:http://download.csdn.net/detail/yjshang/4103919

问题:
在验证过程中,发现扩展表的实现有2个问题

1、在实体的取值实现中,对扩展表别名设置有Bug,最终导致在打开单据时,因为取值的SQL错误报中断。EditUI在加载实体属性时,要根据生成的SQL从数据取数,实体对应表及各关联属性对应的表,设置别名,如果有多个扩展表属性,由于代码错误,会出现每个对应扩展表字段的属性都对应一个数据表的别名,这样就从第2个对应扩展表字段的属性都对应了一个不存在的表别名,从而导致出现中断。
代码错误在实现类com.kingdee.bos.dao.ormapping.impl.SQLGeneratorImpl中。



2、如果一个实体关联2张或多张扩展表,在Query元数据中如果同时引用了2个扩展表的属性,生成的SQL只关联第1个属性对应的扩展表,对应其它扩展表的属性都被解析为对应第1张扩展表,从而导致生成 的SQL无法执行。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值