Interactive Grid新增行级联LOV失效问题求助
解决APEX交互式网格新增行级联LOV不即时加载的问题
针对你遇到的「已有记录级联LOV正常,新增行选择年份后月份列表为空,切换行才显示」的问题,给你几个实测有效的解决方向:
1. 手动触发新增行的LOV刷新动态操作
问题核心是新增行的模型数据未及时同步到LOV上下文,导致父列值变化时没触发子LOV更新。给年份列加个动态操作:
- 触发时机:当字段值改变
- 作用对象:选择你的IG年份列
- 动作类型:执行JavaScript代码,粘贴以下代码(替换占位符为你的实际ID):
var grid = apex.region("YOUR_IG_STATIC_ID").widget().interactiveGrid("getViews", "grid"); var activeRecord = grid.view$.grid("getActiveRecord"); if (activeRecord && activeRecord.isNew()) { // 先同步界面值到模型 grid.view$.grid("save"); // 强制刷新月份列的LOV数据 grid.model.refreshFields(activeRecord, ["MONTHS_COLUMN_NAME"]); // 触发字段重渲染 apex.item("YOUR_IG_MONTHS_COLUMN_ITEM_ID").refresh(); }
- 替换说明:
YOUR_IG_STATIC_ID是你的IG静态ID;MONTHS_COLUMN_NAME是月份列的数据库列名;YOUR_IG_MONTHS_COLUMN_ITEM_ID是月份列对应的页面项ID(在IG列属性的「高级」里能找到)。
2. 调整LOV的提交项与参数匹配
- 打开月份列的LOV定义,Items to Submit除了年份列,额外加上
APEX$ROW_STATUS——这个内部项会标识当前行是新增(值为C)还是修改状态,让LOV能识别新增行的上下文。 - 检查LOV的SQL查询,确保年份参数的引用和年份列数据类型完全匹配,比如年份是数字类型就用
:YEAR_COLUMN,别加引号转成字符串,避免隐式转换导致LOV查询无结果。
3. 关闭IG的LOV延迟加载优化
APEX默认对新增行的LOV做了延迟加载,可通过初始化代码关闭:
- 进入IG的「高级」属性,找到「JavaScript Initialization Code」,粘贴以下代码:
function(options) { options.featureDefaults = options.featureDefaults || {}; options.featureDefaults.lovs = { deferLoading: false }; return options; }
这样新增行时会立即加载LOV,不用等焦点切换。
4. 验证年份列的模型同步
如果之前用JS处理年份格式,确保修改后的值同步到了IG模型,而不只是界面显示。比如在格式化年份的DA里,加上同步模型的代码:
var grid = apex.region("YOUR_IG_STATIC_ID").widget().interactiveGrid("getViews", "grid"); var activeRecord = grid.view$.grid("getActiveRecord"); if (activeRecord) { grid.model.setValue(activeRecord, "YEAR_COLUMN_NAME", parseInt(apex.item(this.triggeringElement).getValue(), 10)); }
内容的提问来源于stack exchange,提问作者Márlon Ferreira
相关产品推荐
相关产品推荐

