Oracle APEX采购订单交互式网格Part Code LOV实现:分类联动+新增跳转功能求助
Oracle APEX采购订单交互式网格Part Code LOV实现:分类联动+新增跳转功能求助
嘿,我来帮你搞定这个问题!你现在要实现两个核心需求:一是让Part Code的LOV根据当前行的备件类别动态过滤,二是选择「New Part」时跳转到新增备件页面。咱们一步步排查和解决:
一、先搞定LOV的分类联动过滤
你之前的LOV没有关联备件类别,所以不管选什么category,都会显示所有备件。咱们修改LOV的SQL,让它能根据当前行的spare_parts_category值动态过滤:
SELECT PART_NAME AS DISPLAY_VALUE, PART_ID AS RETURN_VALUE FROM SPARE_PARTS WHERE SPARE_PARTS_CATEGORY = :SPARE_PARTS_CATEGORY -- 绑定当前行的category列值 UNION ALL SELECT 'New Part' AS DISPLAY_VALUE, -1 AS RETURN_VALUE FROM DUAL ORDER BY DISPLAY_VALUE;
然后在LOV的配置里,找到Cascading LOV Parent Columns,把SPARE_PARTS_CATEGORY选进去。这样当你在IG里修改某行的备件类别时,Part Code的LOV会自动刷新,只显示对应类别的备件。
二、修复「New Part」的跳转动态动作问题
你之前的JS没生效,大概率是触发时机、元素选择或者URL格式的问题,咱们调整一下:
1. 正确配置动态动作
- 新建动态动作,事件选择Change
- 触发元素选择jQuery Selector,输入:
.a-IG-cell[data-column="PART_CODE"] select(精准定位IG里Part Code列的下拉框) - 条件选JavaScript Expression,输入:
this.triggeringElement.value === '-1' - 动作选Execute JavaScript Code,用下面的代码替换你原来的:
// 打开新增备件的模态对话框 apex.navigation.dialog({ url: 'f?p=' + apex.env.APP_ID + ':13:' + apex.env.SESSION + '::NO:::', title: '新增备件', height: 550, width: 750, modal: true, // 可选:关闭对话框后刷新IG,让新增的备件立即出现在LOV里 success: function() { // 替换成你交互式网格的静态ID var igRegion = apex.region('PURCHASE_ORDER_IG').widget().interactiveGrid('getViews','grid'); igRegion.model.fetch(); // 刷新IG数据 } });
2. 注意几个关键细节
- 把代码里的
13换成你实际的新增备件页面ID,别留<13>这种占位符 - 把
PURCHASE_ORDER_IG换成你交互式网格的静态ID(在IG的属性里能找到) - 打开浏览器控制台(F12)看有没有JS报错,比如元素找不到、URL格式错误,这是排查问题的最快方式
三、最后检查Part Code列的配置
确保Part Code列的Display Type是Select List,并且关联了你刚才修改的LOV,同时把Cascading LOV Parent Columns设置为SPARE_PARTS_CATEGORY,这样联动才会生效。
这样调整后,应该就能实现你想要的功能了:选不同的备件类别,Part Code的LOV会自动过滤;选「New Part」会弹出新增备件页面,关闭后IG还能自动刷新显示新备件。
备注:内容来源于stack exchange,提问作者Retal Omar
相关产品推荐
相关产品推荐

