一大早碰到一个很郁闷的问题,某些用户在登陆的时候,报了这个错误:
刚刚好最近又批量更新过员工,很担心是不是更新员工影响到用户登陆了?虽然正常来说应该不至于。
但是,问题还是得好好处理一下。
毕竟偶也算是玩了好几年的Java,还弄过自己的小作品的,所以这点小问题,还是难不了我。
接着,详细分析错误:
错误关键字:
java.lang.NullPointerException
at oracle.apps.fnd.framework.favorites.webui.ICXFavoritesPortletCO.processRequest (ICXFavoritesPortletCO.java:239)
根据错误的关键字Favorites,并且配合用户登录而报的异常错误,猜测问题,应该是登录之后,系统渲染登录主页出现了异常(空指针),而且这个异常是出现在处理收藏夹的时候(Favorites)。
所以,处理问题得先找出收藏夹的数据来源是从哪个表格。
在登录主页的OAF界面,查看个性化收藏夹:
到后台查询数据:
SELECT * FROM FND_USER WHERE USER_NAME = 'DMAFL3'
SELECT ICXCustomMenuEntriesEO.RESPONSIBILITY_APPLICATION_ID
,ICXCustomMenuEntriesEO.RESPONSIBILITY_ID
,ICXCustomMenuEntriesEO.SECURITY_GROUP_ID
,ICXCustomMenuEntriesEO.PROMPT
,ICXCustomMenuEntriesEO.FUNCTION_ID
,ICXCustomMenuEntriesEO.FUNCTION_TYPE
,ICXCustomMenuEntriesEO.URL
,ICXCustomMenuEntriesEO.USER_ID
,ICXCustomMenuEntriesEO.PLUG_ID
,ICXCustomMenuEntriesEO.DISPLAY_SEQUENCE
,ICXCustomMenuEntriesEO.REFERENCE_PATH
,ICXCustomMenuEntriesEO.FAVORITE_TYPE
FROM ICX_CUSTOM_MENU_ENTRIES ICXCustomMenuEntriesEO
WHERE 1=1--ICXCustomMenuEntriesEO.REFERENCE_PATH = :1
AND ICXCustomMenuEntriesEO.USER_ID = 13583
ORDER BY DISPLAY_SEQUENCE
发现有一笔数据很奇怪的,FUNCTION TYPE=XXX,别的都是空。
大胆猜测,就是用户登录的时候,主页page需要做页面的渲染数据处理,而这笔数据在处理生成右边的收藏夹的时候,由于找不到Function,所以报了一个空指针的错误。
然而,这个是否必须的?如果删掉了会不会有别的bug?所以我试看最近新增的一个用户,收藏夹的数据实际上可以为空的。
所以,简单的处理,就是删掉它,就行。因为并没什么风险,收藏夹的数据删错了让他们重新加就行,所以数据只是做了一个本地的导出备份。
DELETE ICX_CUSTOM_MENU_ENTRIES ICXCustomMenuEntriesEO
WHERE 1=1--ICXCustomMenuEntriesEO.REFERENCE_PATH = :1
AND ICXCustomMenuEntriesEO.USER_ID = 13583
修改数据后,重新登录,该用户已经可以正常登录系统。问题解决!