APEX_ITEM POPUP引用了另一个apex_item

时间:2019-06-24 13:57:04

标签: oracle-apex

我有一个页面,其中包含一些项目和一个PLSQL Dynamic内容。

动态内容,顾名思义,会生成一堆动态项目,它们是动态的,我从表中获取它们。

其中很多是POPUP_FROM_QUERY项,其中的QUERY也是从表中获取的。这在大多数情况下都很好用,但是有些查询使QUERY引用了另一个动态生成的项(例如,我为dept和name生成项,您选择一个dept,名称项仅在该dept中显示名称)。 / p>

代码看起来像这样:

  htp.p ((APEX_ITEM.POPUP_FROM_QUERY (p_idx => 2, p_value => '', p_item_id => 'dept_name', p_lov_query => 'SELECT dept department, dept_id id FROM departments WHERE dept_location = ''USA''', p_item_label => 'dept_name')));

  htp.p ((APEX_ITEM.POPUP_FROM_QUERY (p_idx => 2, p_value => '', p_item_id => 'emp_name', p_lov_query => 'SELECT emp emp_name, emp_id id FROM employees WHERE department = :dept_name', p_item_label => 'emp_name')));

我只把相关的行放在这里,实际上有三行,其中p_idx = 1,另一行p_idx = 4(显然您需要为LOV保留一行),但是这些都只显示。保存时,我用apex_application.g_f01(i)引用它们,在其中将p_idx替换为1。

我尝试用几乎所有内容替换:dept_name。 apex_application.g_f02(1),dept_name(p_item_id),g_f02(1),f02(1),f02_0001(在consol中检查该项目时,显示为id)。我已经尝试过所有这些,并且所有这些都在前面加上了“:”。我还尝试过将它们仅包含在select的括号中,并通过执行“ select ..... where .. =” || :dept_name || ”。这些似乎都不起作用,我在网上也找不到APEX_ITEM的文档中的任何内容

1 个答案:

答案 0 :(得分:0)

由于没有人回答我一直在研究它,直到我找到了一个有点简单化的解决方案,尽管它并不是完全动态的,正如您稍后会看到的。

所有动态生成的项目的ID都类似于f02_0000,其中02是该项目的IDx,而0000是行(它生成的第一个项目是0000,第二个项目是0001,...)

我在页面上制作了一堆隐藏的项目,并制作了相同数量的应用程序项目,并依次命名(ITEM_1,ITEM2,...)

然后我在页面上进行了一个动态操作,事件:更改,选择类型:jQuery选择器,jQuery选择器:input [name =“ f02”]-在我的场景中,您输入的所有apex_items均为p_idx => 2。

此DA具有Javascript操作,可使用以下命令获取触发元素的编号

parseInt(this.triggeringElement.id[this.triggeringElement.id.length -1])

这当然只获得ID的最后一个数字,但是更改它很容易。

然后我在这里还有一个动作,将页面项的值分配给其相应的应用程序项。

:APPLICATION_ITEM_1 := :ITEM_1;

在这里我还将所有项目都放入要提交的项目

然后我将所有LOV更改为使用相应的应用程序项。

我做了一些额外的事情,例如刷新时清除了所有页面和应用程序项,但是您可以尝试一下。

这可行,但是它有点脏的解决方案,因为您需要使它适用于所生成的项目。因此,如果您知道最多只能生成一定数量的项目,这很好,如果可以生成大量的项目,那么您需要一个不同的解决方案。