You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Forms中fnd_org.choose_org调用后LOV二次打开不显示问题求助

Oracle Forms 组织选择LOV仅首次显示问题排查

问题概述

  • 首次打开开发的Oracle Forms表单时,正常显示用于选择组织的预筛选LOV
  • 填写表单信息并关闭后,再次打开表单,该LOV不再出现
  • 已调用fnd_org.choose_org函数,怀疑是Forms缓存问题,但无法确认

配图说明

  1. 第一张图:首次打开表单时的界面,显示组织选择LOV弹窗,包含组织名称、代码等可选选项
  2. 第二张图:再次打开表单时的界面,无组织选择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触发器中都被调用,而非仅在首次初始化时执行。

验证步骤

  1. 完成代码修改后,关闭所有Forms窗口
  2. 重新打开表单,确认LOV是否正常显示
  3. 填写表单信息并关闭,再次打开验证LOV是否仍能出现

内容的提问来源于stack exchange,提问作者Ecoreg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:04:59