Oracle Apex交互式网格:选中/未选中行执行不同流程的实现咨询
在Oracle Apex交互式网格中根据行选中状态执行不同流程
下面分前端JavaScript和后端PL/SQL两种场景,实现"有选中行执行指定流程,无选中行执行另一流程"的逻辑:
一、前端JavaScript实现(客户端触发,无需提交页面)
适合按钮点击、网格事件触发的轻量操作,直接在页面动态动作中配置:
1. 获取交互式网格选中行
添加「执行JavaScript代码」的动态动作,替换ig_static_id为你的交互式网格静态ID:
var igWidget = apex.region("ig_static_id").widget(); var igGridModel = igWidget.interactiveGrid("getViews", "grid").model; var selectedRows = igGridModel.getSelectedRecords();
2. 分支执行逻辑
在同一JavaScript代码块中,根据选中行数量判断并执行对应流程:
if (selectedRows.length > 0) { // 有行选中时,调用指定Ajax流程(需提前在共享组件创建) apex.server.process("FLOW_FOR_SELECTED_ROWS", { x01: "optional_param" // 传递自定义参数 }, { success: function(response) { // 成功回调:比如刷新网格、提示消息 igWidget.interactiveGrid("refresh"); apex.message.showPageSuccess("选中行流程执行完成"); } }); } else { // 无行选中时,调用另一Ajax流程 apex.server.process("FLOW_FOR_NO_SELECTED_ROWS", { x01: "optional_param" }, { success: function(response) { apex.message.showPageSuccess("无选中行流程执行完成"); } }); }
二、后端PL/SQL实现(服务器端触发,适合复杂业务逻辑)
如果需要执行数据库操作、调用存储过程等,可通过页面流程实现:
1. 创建PL/SQL流程步骤
在页面流程中新增「PL/SQL代码」类型的步骤,替换ig_static_id为你的网格静态ID:
DECLARE l_selected APEX_APPLICATION_GLOBAL.VC_ARR2; BEGIN -- 获取交互式网格选中行ID集合 l_selected := APEX_IG.GET_SELECTED_ROWS( p_page_id => :APP_PAGE_ID, p_region_id => APEX_UTIL.GET_REGION_ID('ig_static_id') ); IF l_selected.COUNT > 0 THEN -- 有选中行时执行的业务逻辑 -- 示例:调用存储过程、执行DML EXECUTE YOUR_SELECTED_PROC(); ELSE -- 无选中行时执行的业务逻辑 EXECUTE YOUR_UNSELECTED_PROC(); END IF; END;
2. 绑定按钮触发流程
将页面按钮的「动作」设置为「提交页面」,并指定触发上述PL/SQL流程。
注意事项
- 交互式网格的静态ID可在区域属性的「高级」标签下查看。
- 前端Ajax流程需在「共享组件 > Ajax回调」中创建,对应
apex.server.process中的流程名称。 - 若需要获取选中行的具体数据,前端可通过
selectedRows遍历获取,后端可通过l_selected集合关联查询。
内容的提问来源于stack exchange,提问作者user20983281
相关产品推荐
相关产品推荐

