Oracle Forms中fnd_org.choose_org调用后LOV二次打开不显示问题求助
Oracle Forms 组织选择LOV仅首次显示问题排查
问题概述
- 首次打开开发的Oracle Forms表单时,正常显示用于选择组织的预筛选LOV
- 填写表单信息并关闭后,再次打开表单,该LOV不再出现
- 已调用
fnd_org.choose_org函数,怀疑是Forms缓存问题,但无法确认
配图说明
- 第一张图:首次打开表单时的界面,显示组织选择LOV弹窗,包含组织名称、代码等可选选项
- 第二张图:再次打开表单时的界面,无组织选择LOV弹窗,直接进入表单主编辑界面
可能原因及解决方法
1. 组织上下文已缓存(最可能)
fnd_org.choose_org会将用户选择的组织信息存入FND会话上下文,后续打开表单时Forms会直接读取已存在的上下文值,不再触发LOV。
- 解决方法:在表单的
WHEN-NEW-FORM-INSTANCE触发器中添加代码,主动清除已存在的组织上下文,强制触发LOV:-- 清除组织上下文 fnd_profile.put('ORG_ID', NULL); fnd_global.apps_initialize(user_id, resp_id, appl_id); -- 重新初始化应用上下文 -- 再次调用组织选择 fnd_org.choose_org;
2. LOV触发条件未重置
如果LOV的显示依赖于某个表单变量的初始值,填写表单后该变量未被重置为初始状态,会导致LOV不再触发。
- 解决方法:检查表单中控制LOV显示的逻辑,确保每次打开表单时,相关触发变量(如是否已选择组织的标记)被重置为默认值,例如:
:GLOBAL.SELECTED_ORG := NULL;
3. Forms客户端/服务器端缓存
虽然Oracle Forms的会话上下文通常存储在服务器端,但客户端或服务器进程可能缓存了部分会话信息。
- 解决方法:
- 关闭所有Forms客户端窗口,重新打开表单
- 若使用Web方式访问,清除浏览器的Forms插件缓存
- 重启Forms服务进程(针对服务器端缓存)
4. fnd_org.choose_org调用时机问题
如果fnd_org.choose_org仅在表单首次加载时调用一次,后续打开表单时未执行该逻辑。
- 解决方法:确保
fnd_org.choose_org在每次WHEN-NEW-FORM-INSTANCE触发器中都被调用,而非仅在首次初始化时执行。
验证步骤
- 完成代码修改后,关闭所有Forms窗口
- 重新打开表单,确认LOV是否正常显示
- 填写表单信息并关闭,再次打开验证LOV是否仍能出现
内容的提问来源于stack exchange,提问作者Ecoreg
相关产品推荐
相关产品推荐

