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

Oracle APEX实现点击添加项至Apex Collection功能求助

Oracle APEX实现点击ADD按钮将项添加至Apex Collection的方案

问题分析

你当前的设置仅完成了隐藏项赋值,但未触发动态动作执行服务器端代码,导致数据无法写入Apex Collection。以下是两种可行的修正/优化方案:


方案一:改进现有配置

  1. 修改列链接的URL
    将原有URL替换为:

    javascript:$s('P8_ACTION','#PRODUCT_CODE#'); apex.event.trigger(document, 'trigger_add_collection');
    

    作用:设置隐藏项值后,触发自定义事件启动动态动作。

  2. 调整动态动作触发条件

    • 动态动作的触发事件改为「自定义事件」,事件名称填写trigger_add_collection
    • 确保动态动作执行时机为「页面加载时」(默认已配置)
  3. 修正服务器端代码
    移除代码末尾多余的/,正确的PL/SQL块如下:

    BEGIN
      IF NOT apex_collection.collection_exists('MY_COLLECTION') THEN
        apex_collection.create_collection('MY_COLLECTION');
      END IF;
      apex_collection.add_member(
        p_collection_name => 'MY_COLLECTION',
        p_c001 => :P8_ACTION
      );
    END;
    

方案二:无需隐藏项的简化实现(推荐)

直接通过AJAX回调传递参数,避免隐藏项冗余操作:

  1. 创建AJAX回调过程
    进入「共享组件」→「AJAX回调」,新建过程命名为ADD_TO_COLLECTION,代码如下:

    BEGIN
      IF NOT apex_collection.collection_exists('MY_COLLECTION') THEN
        apex_collection.create_collection('MY_COLLECTION');
      END IF;
      apex_collection.add_member(
        p_collection_name => 'MY_COLLECTION',
        p_c001 => apex_application.g_x01
      );
    END;
    
  2. 给ADD按钮绑定动态动作

    • 触发元素选择卡片中的ADD按钮,事件选择「点击」
    • 添加「执行JavaScript代码」动作,内容为:
      apex.server.process('ADD_TO_COLLECTION', {x01: '#PRODUCT_CODE#'}, {
        success: function() {
          // 可选:添加成功后的提示,比如 apex.message.showPageSuccess('已添加至集合');
        }
      });
      

验证方法

可以创建一个经典报表,使用以下SQL查询集合数据,确认添加是否成功:

SELECT c001 AS product_code FROM apex_collections WHERE collection_name = 'MY_COLLECTION'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:22:23