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

Oracle APEX 21.1 如何识别不同模态对话框关闭并触发对应操作

Oracle APEX 21.1 多模态对话框关闭事件区分及触发方案

你之前的方案失效是因为交互式报表的链接列是循环渲染的,静态ID只会作用于第一行数据,且Dialog Closed事件的触发源是模态页本身,不是打开它的链接元素,所以绑定到列静态ID的选择器无法捕获事件。可按如下方案实现需求:

步骤1:给不同链接列配置自定义对话框属性

编辑两个Link类型列,在「链接」属性的「高级」→「对话框属性」中添加自定义属性:

  • examination_dialog列添加:data-dialog-type="examination"
  • followup_dialog列添加:data-dialog-type="followup"

自定义属性会被注入到生成的模态对话框DOM上,用于后续类型识别。

步骤2:创建全局Dialog Closed动态动作

在交互式报表所在页创建1个动态动作,配置如下:

  • 事件:Dialog Closed
  • 选择类型:jQuery选择器
  • 选择器:body
  • 事件范围:动态(Dynamic),避免交互式报表分页、刷新后事件失效

步骤3:编写区分对话框类型的执行逻辑

True动作选择「执行JavaScript代码」,填入如下逻辑:

// 读取关闭的对话框的自定义类型标识
const dialogType = this.data.dialogEl.attr('data-dialog-type');
// 读取模态页返回的参数,需提前在模态页的关闭动作中配置要返回的页项
const returnParams = this.data.dialogPageItems;

if(dialogType === 'examination'){
    // 检查类对话框关闭逻辑,传递对应参数
    apex.navigation.openInNewWindow(
        `f?p=&APP_ID.:你的目标页号:&APP_SESSION.::NO::Pxx_PARAM1:${returnParams.P6_RETURN_FIELD}`,
        '_blank'
    );
}else if(dialogType === 'followup'){
    // 随访类对话框关闭逻辑,传递不同参数
    apex.navigation.openInNewWindow(
        `f?p=&APP_ID.:另一目标页号:&APP_SESSION.::NO::Pxx_PARAM2:${returnParams.P7_RETURN_FIELD}`,
        '_blank'
    );
}

测试环境修复方案(第2页+第6页)

  1. 编辑第2页的open dialog链接列,在对话框属性中添加data-dialog-type="test"
  2. 删除原来绑定到列的Dialog Closed动态动作,按上述步骤创建绑定到body的全局动态动作
  3. 验证阶段可先用如下代码测试触发效果:
const dialogType = this.data.dialogEl.attr('data-dialog-type');
if(dialogType === 'test') alert('测试对话框已关闭');

需要新增更多对话框场景时,只需给对应链接列添加新的data-dialog-type值,在JS分支中新增对应逻辑即可,无需额外创建动态动作。

注意:如果需要传递模态页的参数,要在模态页的「关闭对话框」按钮/动态动作的「要返回的页项」属性中,勾选需要带回父页的字段,返回值才会被注入到Dialog Closed事件的回调参数中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 20:24:03