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

Oracle APEX 22.2.1传递39位超长ID至模态页失败问题求助

问题描述

背景

  • 最初使用以下SQL构建APEX层级树,链接可正常打开对应模态页:
select 
case when connect_by_isleaf = 1 then 0
    when level = 1             then 1
else                           -1
    end as status, 
level, 
C."Name" || ' (' || C."Alias" || ')' as title, 
null as icon, 
C.ID as value, 
null as tooltip, 
f?p=&APP_ID.:1105:'||:APP_SESSION||'::::P1105_ID:'||"ID" as link 
from VBORGUNT C
WHERE C.ID_STNT = 190925678486461946459250188392520804336
start with C.ID_BORGUNT = 0
connect by prior C.ID = C.ID_BORGUNT
order siblings by C."Name"
  • 后续将SQL移至View(移除链接字段),用该View填充树属性后,「Selected Node Page Item」无法填充页面项P1124_NODE_ID
  • 改为在树属性的链接字段配置JS:javascript:apex.item("P1124_NODE_ID").setValue(&ID.),可成功填充ID;为P1124_NODE_ID添加动态动作:值变化时提交页面,通过「After Processing」分支跳转至页面P1105

异常现象

  • 传递短ID(如11111)时,模态页P1105正常打开
  • 传递39位超长ID时,模态页显示「未找到记录」错误
  • 交互式网格中使用相同的超长ID,可正常打开模态页P1105
问题原因

JavaScript的Number类型仅能精确表示16位以内的整数(最大为2^53),39位超长ID会被JS自动转换为不精确的数值,导致P1124_NODE_ID最终存储的是失真后的ID值,传递到P1105后无法匹配到对应记录。

而交互式网格的链接直接使用f?p=格式拼接字符串传递ID,没有经过JS的数值转换环节,因此能完整保留超长ID的精度。

解决方法

方法1:修正JS代码,将ID作为字符串传递

把树的链接URL修改为:

javascript:apex.item("P1124_NODE_ID").setValue("&ID.");

通过给&ID.添加双引号,让JS将ID识别为字符串类型,避免数值转换导致的精度丢失。

方法2:修复「Selected Node Page Item」填充问题

如果希望回到使用View的原生树节点选择逻辑,可检查以下配置:

  • 确认树属性的「Value Column」已绑定到View中的ID字段
  • 确保P1124_NODE_ID的页面项类型为文本字段(而非数字字段),避免数值转换
  • 若数据库中ID是数值类型,在View中显式将其转换为字符串输出(例如TO_CHAR(C.ID) as ID)

方法3:检查目标页P1105的配置

确认P1105中接收ID的页面项P1105_ID类型为文本字段,且查询记录时使用字符串匹配逻辑,避免因数值类型转换导致的ID失真。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:38:35