【问题标题】:Oracle Apex Interactive Grid Master Multiple selection to DetailOracle Apex Interactive Grid Master 多选到详细信息
【发布时间】:2021-02-11 09:00:00
【问题描述】:

我有一个主细节交互式网格,一切正常。一旦我在 master 上选择一行,它就会毫无问题地填充详细信息交互式网格。

我想要实现的事情是我想在主节点上选择两行或更多行并填充详细信息网格上的所有数据。

有可能吗?

【问题讨论】:

    标签: oracle plsql grid oracle-apex interactive


    【解决方案1】:

    我发现您的问题非常具有挑战性,它可能对其他用户有用。

    我不确定建议的解决方案是否适用于所有条件,因为它没有经过足够的测试。我用APEX_COLLECTIONS、一些JSPL/SQL 解决了你的问题。

    但让我们从下面的示例开始,我将使用标准的HR 数据集,更准确地说是DEPARTMENTSEMPLOYEEStables。

    • 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;
    
    • 创建第一个IGLoad Dept

      • Source 部分下设置以下值:

        • 位置:本地数据库
        • 类型:表格/视图
        • 表所有者:解析架构
        • 表名称:部门
      • 列:

        • APEX$ROW_SELECTOR (!important)
        • APEX$ROW_ACTION
        • DEPTNO
        • DNAME
        • 定位
      • 静态 IDloadDept

      • IG上创建一个DA:

        • 名称:SELECT_ROWS
        • 事件:选择更改 [交互式网格]
        • 选择类型:区域
        • 地区:装载部门
      • 现在添加一个执行以下 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
                    }
            ]);
        }
    } );
    
    • 第二个IGLoad Emp
      • 静态 ID : loadEmp
      • Source 部分下设置以下值:
        • 位置:本地数据库
        • 类型:SQL 查询
        • SQL 查询
    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)
        )
    

    虽然它有效,但始终选择主表中的第一条记录,这是唯一已知的错误或功能。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2019-12-10
      • 2019-05-30
      • 1970-01-01
      相关资源
      最近更新 更多