Oracle APEX实现点击添加项至Apex Collection功能求助
Oracle APEX实现点击ADD按钮将项添加至Apex Collection的方案
问题分析
你当前的设置仅完成了隐藏项赋值,但未触发动态动作执行服务器端代码,导致数据无法写入Apex Collection。以下是两种可行的修正/优化方案:
方案一:改进现有配置
修改列链接的URL
将原有URL替换为:javascript:$s('P8_ACTION','#PRODUCT_CODE#'); apex.event.trigger(document, 'trigger_add_collection');作用:设置隐藏项值后,触发自定义事件启动动态动作。
调整动态动作触发条件
- 动态动作的触发事件改为「自定义事件」,事件名称填写
trigger_add_collection - 确保动态动作执行时机为「页面加载时」(默认已配置)
- 动态动作的触发事件改为「自定义事件」,事件名称填写
修正服务器端代码
移除代码末尾多余的/,正确的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回调传递参数,避免隐藏项冗余操作:
创建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;给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
相关产品推荐
相关产品推荐

