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

Oracle APEX Map Region 初始位置与缩放配置二次访问失效问题

问题根因分析
  • 页面项会话状态配置异常:你使用的P17_GPS_LATITUDE、P17_GPS_LONGITUDE两个页面项,默认配置为「仅提交时保留值」,首次加载时会话状态存在有效值,第二次进入页面时会话状态被清空,SQL查询返回空值,地图组件读取到空的经纬度参数时会自动丢弃该字段,同时触发容错逻辑把缩放值兜底为0。
  • 地图组件缓存机制冲突:Oracle APEX 20.2及以上版本的地图区域默认会将初始化配置缓存到浏览器会话存储,resetMapPosition参数默认不会写入持久化缓存,第二次加载时组件优先读取缓存配置,直接覆盖了SQL查询返回的参数值。
  • 渲染时序错位:如果你的经纬度页面项是通过动态行动态赋值的,地图初始化SQL的执行时机早于动态行赋值时机,SQL读取到空值就会导致参数丢失。
解决方案
  • 调整页面项存储配置:将两个经纬度页面项的「值保留规则」从「仅提交时保留」修改为「会话级别始终保留」,如果是全局通用参数可改为应用级项,避免页面跳转后值丢失。
  • 强制覆盖地图初始化配置:在地图区域的「高级→自定义初始化函数」中添加如下代码,跳过缓存强制读取最新页面项值:
function(options) {
  options.resetMapPosition = true;
  options.initPosition = {
    basedOnFeatures: false,
    lon: parseFloat(apex.item("P17_GPS_LONGITUDE").getValue()),
    lat: parseFloat(apex.item("P17_GPS_LATITUDE").getValue()),
    zoom: 15,
    getFromBrowser: false
  };
  return options;
}
  • 调整SQL增加非空兜底:避免空值触发组件容错逻辑,可修改原有SQL为:
select nvl(to_number(:P17_GPS_LATITUDE), 45.97590926950204) as LAT,
nvl(to_number(:P17_GPS_LONGITUDE), 1.8246315941379123) as LON,
15 as ZOOM
from DUAL
  • 调整动态行执行时机:如果经纬度为动态赋值,将赋值动态行的触发时机改为「页面加载前(Before Header)」,确保SQL执行前页面项已经有有效值;或者关闭地图的「页面加载时自动渲染」,待经纬度赋值完成后调用apex.region("localitzacioMapa").refresh()手动刷新地图。

内容的提问来源于stack exchange,提问作者Fabià Figueras

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:39:03