【发布时间】:2021-02-11 09:00:00
【问题描述】:
我有一个主细节交互式网格,一切正常。一旦我在 master 上选择一行,它就会毫无问题地填充详细信息交互式网格。
我想要实现的事情是我想在主节点上选择两行或更多行并填充详细信息网格上的所有数据。
有可能吗?
【问题讨论】:
标签: oracle plsql grid oracle-apex interactive
我有一个主细节交互式网格,一切正常。一旦我在 master 上选择一行,它就会毫无问题地填充详细信息交互式网格。
我想要实现的事情是我想在主节点上选择两行或更多行并填充详细信息网格上的所有数据。
有可能吗?
【问题讨论】:
标签: oracle plsql grid oracle-apex interactive
我发现您的问题非常具有挑战性,它可能对其他用户有用。
我不确定建议的解决方案是否适用于所有条件,因为它没有经过足够的测试。我用APEX_COLLECTIONS、一些JS 和PL/SQL 解决了你的问题。
但让我们从下面的示例开始,我将使用标准的HR 数据集,更准确地说是DEPARTMENTS 和EMPLOYEEStables。
Before Header 部分添加一个进程,定义为:
BEGIN
APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION(
p_collection_name => 'SELECTED_MASTER');
END;
Ajax Callback 进程,将其命名为SELECTOR:BEGIN
APEX_COLLECTION.TRUNCATE_COLLECTION(p_collection_name => 'SELECTED_MASTER');
FOR i IN 1..apex_application.g_f01.count LOOP
APEX_COLLECTION.ADD_MEMBER ( p_collection_name => 'SELECTED_MASTER',
p_n001 => apex_application.g_f01(i));
END LOOP;
htp.p('Done.');
END;
创建第一个IG:Load Dept
在 Source 部分下设置以下值:
列:
静态 ID:loadDept
在IG上创建一个DA:
现在添加一个执行以下 JS 的 True 动作:
var array = []
var i;
for (i = 0; i < this.data.selectedRecords.length; i++) {
array[i] = this.data.selectedRecords[i][0];
}
apex.server.process( "SELECTOR", {
f01: array,
},
{
dataType : 'text',
success: function( data ) {
apex.region( "loadEmp" ).refresh();
},
error: function( jqXHR, textStatus, errorThrown ) {
apex.message.clearErrors();
apex.message.showErrors([
{
type: "error",
location: "page",
message: errorThrown,
unsafe: false
}
]);
}
} );
IG:Load Emp
SELECT EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO,
CREATED,
LAST_UPDATED
FROM EMPLOYEES
WHERE
APEX_COLLECTION.COLLECTION_MEMBER_COUNT ('SELECTED_MASTER') = 0
OR
(
APEX_COLLECTION.COLLECTION_MEMBER_COUNT ('SELECTED_MASTER') > 0
AND
EXISTS (SELECT 'x' FROM apex_collections
WHERE collection_name = 'SELECTED_MASTER' AND n001 = DEPTNO)
)
虽然它有效,但始终选择主表中的第一条记录,这是唯一已知的错误或功能。 :)
【讨论】: