0

我需要复制选定的行值并存储为新记录。我正在使用 Oracle Apex 4.2 和表格形式。我需要使用复选框来选择行和按钮副本。当我选择多行然后单击复制按钮将所有选定的行值复制为新行并保存时。

谁能帮忙

4

1 回答 1

0

通过 APEX 表格形式输入复制记录

通过 Oracle APEX 表格形式从单个表中克隆现有记录的想法不会对您可以通过 APEX 向导为页面区域内容设置的默认设计产生太大干扰。

  1. 建立一个具有独立主键的表。

  2. 建议包括两个辅助列:COPY_REQUESTCOPIED_FROM用于运行复制操作。特定的表单元素将映射到要设置的表格表单上的这些列。

  3. 构建一个可以读取需要复制哪些记录的 Oracle 存储过程。每次SUBMIT按下按钮时都会调用此过程。

  4. (可选)如果没有要处理的内容(即,没有标记为复制的记录),考虑包括对步骤 (3) 的抑制。

接收输入的工作表:COPY_ME

支持自动记录复制的COPY_ME演示表

提示:如果您使用标准的表创建向导,您将有一个更轻松的时间。指定CUSTOMER_ID为 PRIMARY_KEY 并让 APEX 在顶部创建其标准自动递增功能。(序列加触发器设置。)

这是我使用的示例数据......虽然没关系。您可以输入自己的值并能够轻松验证发生的事情。

COPY_ME 演示表样本数据

繁重的工作:COPY_ME 中克隆记录的存储过程

此过程一次处理 1 条或多条记录,并在COPY_REQUEST表中具有特殊标识符。任务完成后,程序会清理并再次重置请求值。

 create or replace procedure proc_copy_me_request is

      c_request_code   CONSTANT   char(1):= 'Y';

      cursor copy_cursor is
         SELECT cme.CUSTOMER_ID, cme.CUSTOMER_NAME, cme.CITY, cme.COUNTRY,
                cme.COPY_REQUEST
           FROM copy_me cme
          WHERE cme.COPY_REQUEST = c_request_code
            FOR UPDATE OF cme.COPY_REQUEST;

 BEGIN

 FOR i in copy_cursor LOOP

    INSERT INTO copy_me (customer_name, city, country, copied_from)
    VALUES (i.customer_name, i.city, i.country, i.customer_id);

    UPDATE copy_me
       SET copy_request = null
     WHERE CURRENT OF copy_cursor;

 END LOOP;

 COMMIT;

 END proc_copy_me_request;

还有一列可以隐藏。它跟踪记录最初是从哪里复制的。

请注意,光标使用FOR UPDATE OFandWHERE CURRENT OF表示法。这很重要,因为该过程正在更改它所引用的记录。

APEX 页面设置说明

设置标准FORM类型页面并选择TABULAR FORM样式。按照设置说明进行操作,注意映射正确的主键,以及在上述步骤中使用表创建的 PK 序列对象。

完成这些步骤后,您的页面设置如下所示:

Apex 上的 COPY_ME 页面配置

  1. 编辑COPY_REQUEST表单值:

    • 列属性部分下,将显示为选项更改为“简单复选框”
    • 值列表部分下,在 LOV 定义下放置一个值:Y(无论哪种方式都区分大小写......只是保持一致)
  2. 编辑COPIED_FROM表单值:在列属性部分下,将显示为选项更改为“显示为文本(保存状态)”。这只是为了防止用户踩到这个只读字段。如果知道不重要,你也可以压制它。

  3. 创建一个新进程: 执行复制过程

COPY_ME 自定义流程定义首页

这是同一个配置页面的底部,有很少的东西可以更改或添加:

COPY_ME 自定义流程定义底部页面

演示:COPY_ME 表格表单页面在操作中的屏幕截图

下面的第一个屏幕截图是在页面整理和复选框控件到位之前。

COPY_ME 表格形式:第一版

插入一些测试数据并尝试一下。在上述步骤中创建的页面进程有条件地调用存储过程,该存储过程处理在SUBMIT选择表单按钮时同时发出的所有复制请求。

COPY_ME 表格形式:演示版

评论: 如果您花足够的时间修补 Oracle APEX 中的内置向导,就有机会学习与该工具兼容的新设计模式和流程。调整你的方法可以减少额外的工作量和挫败感。

于 2014-03-29T04:19:01.550 回答