Oracle EBS 12.0.0
Oracle EBS 12.0.0 开始,OA Framework的 多语言转换的实现基本上已经和一般的实现没有什么区别,大大简化了开发的复杂性。
下面是基本的开发步骤:
1,按照下面的规则为 _TL表创建一个实体对象
命名实体为<Entity>TLEO,如LOOKUP_CODES_TL表被命名为LookupCodeTLEO实体名称
- 包括表中所有的列,并且保证LANGUAGE列被命名为Language属性,SOURCE_LANG列被命名为SourceLang属性
- 然后设置LANGUAGE列作为主键的一部分
- 并且保证实体和其它实体一样继承了OAEntityImpl
- 其它的实体相关的验证逻辑,多语言转换的无需添加任何验证
默认情况下,只要满足如下条件的所有字段都会被认为是需要进行多语言转换的:
- 不是主键列,而且
- 不是一个entity accessor,而且
- 是数据类型之一:VARCHAR, CHAR, FIXED_CHAR, LONGVARCHAR, CLOB
如果说需要覆盖默认的规则,可以在各属性级别的客户化属性中设置OA_TRANSLATABLE属性,
属性值为true,说明此列需要进行多语言转换
属性值为false,说明此列不需要进行多语言转换
2,按照下面的规则为 _VL视图创建一个多语言实体对象
- 按照创建一般实体对象的规则来创建实体对象,如LOOKUP_CODES_VL视图,对应的实体名称为LookupCodesEO
- 不要包括伪列RowId,包括视图中其它所有的列
- 检查主键正确设置
- 设置一个实体级别的自定义属性OA_BASE_TABLE,它的值为多语言视图_VL所对应的基表,如LOOKUP_CODES_B或者LOOKUP_CODES
OA Framework自动覆盖了实体对象中的doDML方法来确保当对多语言视图进行插入、更新和删除操作的时候实际上是对基表进行相应的操作。所有的读取操作则依赖于_VL视图
3,根据以下规则在_VL(Source)和_TL(destination)间创建一个实体关联
- 按照常规的关联规则创建
- 关系必须是 1:*,取消Cascade Delete选项的选择,_VL实体选择为Source,_TL实体为Destination
- 更改destination entity的Accessor Name名称为OA_TL_ENTITIES
4,使用多语言视图创建视图对象
当创建一个视图对象来访问多语言转换实体的时候,总是使用基于_VL视图创建的实体对象。基于EBS的设计,访问多语言都是基于VL,TL被自动处理为“不可见”状态
上面的开发步骤除了需要进行几个必要属性的设置之外,和非多语言转换的开发步骤基本上没有什么区别,而在EBS R12之前,如果需要进行多语言转换的开发,
需要使用OAPlsqlEntityImpl来实现,同时需要编写数据库程序包 ON_INSERT、ON_UPDATE、ON_DELETE 和 ON_LOCK 方法。而从EBS R12版本之后,已经进行了简化。
后面我们就来看看Oracle究竟是怎么样来解决这个问题,使开发人员无须更多关注多语言转换开发实现的技术细节。