如何在页面提交后识别pl / sql内容中的项目值?

时间:2017-04-19 15:41:46

标签: oracle oracle-apex oracle-apex-5

我创建了一个包含pl / sql内容区域的页面,我在其中创建了一个html表。给出了用于创建表的表和截图的pl / sql代码。

该页面是向导列表中的第2页,共4页。因此,当单击第4页上的“完成”按钮时,我想将此html表的所有行插入到数据库表中。

我想知道如何识别放在html表中的值以及如何在数据库表中插入这些值。有人可以帮我这么做吗?

BEGIN
  htp.p('
    <HTML>
        <HEAD>
            <TITLE>Organization Records</TITLE>
        </HEAD>
        <BODY>
            <H1>Organization Records</H1>
            <TABLE id="DataForm" BORDER="1 " style="border-collapse: collapse; width="100%">
                <TR style="width=50%">
                    <TH>Hierarchy</TH>
                    <TH>Org Long Name</TH>
                </TR>
                <TR style="width=50%">
                    <TH><input type="text"/></TH>
                    <TH>
                        <select id="S1" name="S1">
                            <option value="id1">data1</option>
                            <option value="id2">data2</option>
                            <option value="id3">data3</option>
                        </select>
                    </TH>
                 </TR>
            </TABLE>
            <button type="button" onclick="addRow()">Add</button>
        </BODY>
    </HTML>

“); 端;

pl/sql content

3 个答案:

答案 0 :(得分:2)

您需要在提交第2页时捕获值,因为在您提交第4页时它们不再出现在HTML中。

name的{​​{1}}属性更改为APEX允许的属性 - 即&#34; f01&#34;,&#34; f02&#34;,...,&之一#34; F50&#34 ;. (有关详细信息,请参阅docs。)

提交页面后,APEX将填充相应的数组,例如selectapex_application.g_f01

所以你需要做的就是遍历相关数组以获取值并将它们插入到表中:

apex_application.g_f02

答案 1 :(得分:2)

我真的不明白为什么你会陷入编写自己的HTML的陷阱。你做自己和APEX是一种伤害 根据您提供的内容,您已经证明对plsql块没有任何用处,也不需要生成自己的HTML。您甚至遇到了必须将项目从页面映射到后端的问题 我会更进一步说,你发布的内容会在你的页面中创建完全无效的HTML,并且它的唯一原因是因为你的浏览器(可能不是目标受众)是所以无论如何要宽容地解析它。 (标记HTML是一个根标记,可能只出现一次。所以在这里你已经在HTML文档中堆叠了一个HTML文档。检查你的页面源并通过验证器运行它。)

为什么或者什么原因,您没有使用经过验证的方法将经典报告与apex_item api结合使用?或者,为什么不使用表格形式,它可以提供验证和每行处理?无论哪种方式都是陈述性的和快速的 通过经典报告,我所需要的只是一个经典的报告区域和一些SQL,我会更快地发布你在这里写的相同的东西。

select apex_item.text(p_idx => 1, p_value => text_value) hierarchy
     , apex_item.select_list_from_query(p_idx => 2, p_value => org_id, p_query => 'select dname, depto from dept') org_name
from my_table

使用表格形式时甚至更短,因为我不需要输出html。 (并考虑apex 5.1的交互式网格......)

此外,您可能需要考虑使用apex_collection将数据映射到,因为这是一个向导。如果您没有,您将直接将数据映射到表中,这在向导中通常不是所需的方法。此外,如果发生处理或验证错误怎么办?以表格形式(自创建或其他方式)输入的数据不会在出错时存储,导致在重新呈现页面时清除/重置表单。

除非你有充分的理由在顶点生成自己的自定义html,而这些html无法在模板中捕获(页面,区域,报告,html表达式),否则不要这样做。考虑两次。

答案 2 :(得分:0)

我也在开发一个自定义表单,在组合查询中,表格形式是无用的,所以你必须编写自己的进程。

正如Tony所说,您可以在apex_application.g_f01apex_application.g_f50数组中设置值,该值可以在p_idx参数中设置。

例如:APEX_ITEM.HIDDEN(1,empno)

另见(在隐藏的例子中,它解释得更详细):https://docs.oracle.com/cd/E14373_01/apirefs.32/e13369/apex_item.htm#AEAPI196