EBS OAF中如何在页面的表中实现简单的关键性弹性域(KFF)
在OAF中要实现一个简单的关键性弹性域是很简单的,只需要简单的步骤就可以了。这里只记录在OAF的实现,如何在FORM中定义KFF请参考其它文章。而且这里的实现,即是使用KFF,也就是”外键”引用KFF,而不是KFF的维护页面,而且现在版本OAF也只支持外键实现KFF。
1. 定义KFF,请参考其它文章。
2. 先实现一个简单的查询页面,其中的VO对应的表中包含了KFF主键的外键,如果没有外键关联KFF,自然无从实现KFF。
3. 更改VO定义,将KFF外键加入到VO定义中。如下图,这里FwkitemId是KFF外键。
4. 在查询结果表中添加一个新为KFF类型的列(item),并设置属性如下:
这里的关键属性有:
Ø Item Style:一定要是flex.
Ø View Instance:就是这个表对应的VO实例.
Ø Appl Short Name:是KFF定义所属的产品的缩写名.
Ø Name:是KFF定义的编码
Ø Type:是弹性域的类型,可以选择key或者descriptive,我们这里是关键性弹性域,所以要选择key.
Ø Segment List:弹性域的结构和分段列表,可以定义必填字段,只读字段等。详细使用可以参考我的关于KFF和DFF的翻译文章。我们这里不填,也就是要显示所有分段。
Ø Read Only和Rendered:这个不是必填字段,可利用PPR(SPEL)来动态控制。
5. 在页面的控制器的processRequest方法中添加下面代码来处理
public void processRequest(OAPageContextpageContext, OAWebBean webBean) { super.processRequest(pageContext, webBean); OAKeyFlexBean flexBean =(OAKeyFlexBean)webBean.findIndexedChildRecursive("KFF"); flexBean.setStructureCode("FWK ItemFlexfield"); flexBean.setCCIDAttributeName("FwkitemId"); }
这里结构代码"FWK Item Flexfield"就是KFF分段定义中的结构代码,"FwkitemId"就是VO定义中的KFF外键。
6. 实现的的效果如下.
2014-02-25 更正
1.之前上传的图片有问题,现在上传正确的图片了
2.如果你测试使用的KFF也是FWK,并且是在R12上的话,有可能KFF的值出现....的问题,那是因为Oracle提供的数据有问题,
在FND_ID_FLEX_STRUCTURES中ID_FLEX_NUM的值为52737
select * from FND_ID_FLEX_STRUCTURES where ID_FLEX_CODE = 'FWK';但是在KFF的基表FWK_TBX_ITEM_CCIDS中,对应的结构ID FWKITEM_STRUCTURE_ID的值为101
select * from FWK_TBX_ITEM_CCIDS;所以虽然在VO的基表FWK_TBX_ITEMs中的KFF 的CCID都是正确的,也会在OAF中显示错误,用下面的脚本更改FWK_TBX_ITEM_CCIDS中的数据为正确的结构ID就可以了
update FWK_TBX_ITEM_CCIDS set FWKITEM_STRUCTURE_ID = 52737