马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622 。
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 sunny_swufe 于 2009/8/20 12:58 编辑
JB0-27021
Tag: OAF AttributeLoadException JBO-27021 java.sql.SQLException
有些希奇古怪的问题,也许有些人一辈子也遇不到,也许,你运气来了,就让你遇到这么一两个。我就是属于那种运气来了,什么古怪问题都能遇到的人。这JBO-27021、JBO-27022,我就这么遇到了,而且,我断断续续用了差不多5天的时间,才把这问题的原因找出来。而这个原因却又让人如此哭笑不得!现在,我把案件完整拿出来,请老大些,高手些,帮忙看看,遇到此等问题,怎么分析,怎么着手解决,不至于让我等菜鸟些花这么多冤枉时间。废话少说,转如正题。
问题:
Error Page
Exception Details.
oracle.apps.fnd.framework.OAException: oracle.jbo.AttributeLoadException: JBO-27021: ?? java.sql.SQLException, ????? oracle.jbo.domain.Number ? java ????? 9 ??? CustomDatum ????
at oracle.apps.fnd.framework.OAException.wrapperException(Unknown Source)
at oracle.apps.fnd.framework.OAException.wrapperException(Unknown Source)
附件是Error Details
问题背景:
选择供应商单选框之后,页面局部刷新(PPR),效果如图所示:
选择1号供应商,下表局部刷新列出该供应商的所有地点:
(图一)
选择2号供应商,下表局部刷新列出该供应商的所有地点:
(图二)
为了练习PPR,我做了一个BBS DEMO,效仿上图的效果。
1、创建两个EO(BbsBoardsEO和BbsClassEO),创建一个AO(ClassToBoardsAO)
2、创建两个VO(BbsBoardsVO和BbsClassVO),在BbsClassVO中新增了一个String型非数据库字段SelectFlag,用于保存单项框的选择标记。再创建一个VL
3、创建页面testPG.xml
(图三)
选择框singleSelection属性设置如下:
View Instance:BbsClassVO1
View Attribute:SelectFlag
Action type:firePartialAction
Event:classSelect
4、为页面testPG创建CO(testCO),在processRequest()中查询图三四上表数据,在processFormRequest()中捕捉到页面中的classSelect事件后,调用AM中的方法。
5、在AM中添加handleClassSelectionEvent()方法,为选中的行,赋“Y”值给SelectFlag- public void handleClassSelectionEvent()
- {
- OAViewObject vo = (OAViewObject)findViewObject("BbsClassVO1");
- Row masterRow = vo.getFirstFilteredRow ("SelectFlag", "Y");
- if (masterRow != null)
- {
- vo.setCurrentRow(masterRow);
- }
- }
复制代码 环境已经介绍清楚,请各位高手帮忙分析一下,如上的错误,解决思路是怎样的?
问题原因:
这里涉及很多知识:Master-Detail、PPR、EO、AO、VO、VL的创建等,这里涉及的PPR很简单,我怀疑是在AO、VL的设置有问题,于是,我花了大把的时间去研究DeveloperGuid,然后,做DEMO,重新建表,建EO、AO、VO、VL,DEMO做好了,没有任何问题。然后将整个过程和BBS DEMO比较,经过几十次的测试之后。找到问题了。
(图四)
(图五)
将SQL列出来:- SELECT b.BOARDS_ID,
- b.BOARDS_NAME,
- b.BOARDS_CLASS_ID,
- b.BOARDS_IMAGE,
- b.BOARDS_INFO,
- b.ANNOUNCES_NUM,
- c.CLASS_NAME,
- decode(nvl((select distinct a.ann_boardsid
- from BBS_ANNOUNCES a
- where a.ann_boardsid = b.boards_id),
- -1),
- -1,
- 'DeleteEnabled',
- 'DeleteDisabled') as DELETE_SWITCHER
- FROM BBS_BOARDS b, BBS_CLASS c
- where b.BOARDS_CLASS_ID = c.CLASS_ID
复制代码 很明显,在SQL当中,没有定义5个WHO字段,而Attribute中却显示已经定义了。所以,VL在根据设置好的AO关系,读取BbsBorads中数据的时候,就报错JBO-27021。而现在,我已经无法还原当时的操作了,无法同时得到图四和图五的结果了。因为如果SQL中没有定义5个WHO字段,那么Attribute中JDeveloper会自动将这5个WHO字段设置为Transient,而,这样,也不会报JBO-27021错误。
(图六)
注:如图六,五个WHO字段的位置不同,还会报出如下几种相似的错误:
JBO-27021: ?? java.sql.SQLException, ?????oracle.jbo.domain.Number
JBO-27022: ?? java.sql.SQLException, ?????oracle.jbo.domain.String
JBO-27022: ?? java.sql.SQLException, ?????oracle.jbo.domain.Date
BySunny.Zhang
2009年8月19日22时44分10秒 |