我使用的是 apex 22.1。我正在尝试设置一个页面字段,其值来自我当前所在行的交互式网格列,如果我更改我所在的行,它需要更改。
这是我尝试过的。我已将静态 ID 分配给网格“IG_GRID”。网格上的一列名为“OS_TIP”。我有一个名为“P660_LOV_OS_TIP”的页面项目。 我想单击一行上的 IG 区域,当我这样做时,我希望使用我所在行的 OS_TIP 列中的值填充项目 P660_LOV_OS_TIP。 我尝试过的是通过事件“选择更改[交互式网格]”在 IG 区域上创建动态操作。然后我创建了真正的动作“设置值”,设置类型“Javascript表达式”。 我用这段代码作为js:
apex.region("IG_GRID").widget().interactiveGrid("getViews").grid.model.getValue($v("CURRENT_ROW_INDEX"), "OS_TIP")
在受影响的项目选择类型下,我选择了“项目”,在项目下我将项目设置为“P660_LOV_OS_TIP”。 但是,当我单击网格上的任意位置时,没有任何反应,我的页面项目未设置值。 如果我打开控制台并输入上面的 JS 代码,我会得到“unedfined”响应。 我做错了什么?如何通过选择 IG 行来设置此页面项目。 我不擅长 javascript,所以可能存在错误。
这里是一个在选择行时将页面项目
P148_SELECTED_FIRST
设置为“ENAME”列的值的示例。 IG 位于 EMP/DEPT 样本数据集的 EMP 表中。
在“选择更改[交互式网格]”上创建动态操作。添加“执行 Javascript 代码”类型的真实操作,其来源为:
const model = this.data.model,
records = this.data.selectedRecords;
let values = records.map( r => model.getValue( r, "ENAME" ) );
apex.item( "P148_SELECTED_FIRST" ).setValue( values[0] );
注意
values
是一个数组,因为 - 如果复选框可见 - 用户可以选择多个记录。上面的代码将页面项设置为数组的第一个值。
--更新--
“Popup LOV”类型的交互式网格列有 2 个属性:显示值和值。如果你在控制台中输出 javascript 变量,就可以在控制台中看到这一点:
只需选择您需要的属性即可。设置显示值:
apex.item( "P148_SELECTED_FIRST" ).setValue( values[0].d );
或选择的值
apex.item( "P148_SELECTED_FIRST" ).setValue( values[0].v );
类似的答案。我只是将选定的记录直接放在同一行中,而不是单独的变量中。
var vFieldName = model.getValue(this.data.selectedRecords[0],'COLUMN_NAME');
apex.item('P600_DISPLAY_PARENT_TASK').setValue(vFieldName);