Oracle ApEx集合信息未出现在PL / SQL区域内

时间:2012-09-06 10:21:03

标签: plsql oracle-apex

我遇到了Oracle ApEx Collections的问题,并且不确定为什么我没有看到我认为的结果。

首先,我使用的是Oracle ApEx v3.0

我基本上有这个例子中描述的关于保留Joel Kallman复选框的设置,即:

http://joelkallman.blogspot.com.au/2008_03_01_archive.html

描述我的场景,我向用户提供了一个记录列表,他们选择了任意数量的复选框,使用Joel的例子,所选记录存储在顶点集合'EMP_COLLECTION'中。

现在所有这些似乎都在'EMP_COLLECTION'中正确存储,但是当我尝试从集合中访问这些存储的值时,在PL / SQL区域(jQuery UI对话框)中,我似乎无法获得价值观。

此时此页面尚未提交。因此,当用户选择存储在后端的ajax的多个复选框到'EMP_COLLECTION'中时,用户然后按下调用基本执行.dialog('open')调用的javascript函数的按钮,这一切都正常。

然后调用我的PL / SQL区域块,在Region Header中,我定义了以下内容:

<div id="dialog-1up-br" title="Requests - No Email Address"><img src="#WORKSPACE_IMAGES#info.gif" height="30" width="30"/>
  Please Note: You are receiving this notification as a valid email address is not available for: <br/><br/>

此PL / SQL区块的我的区域来源是:

BEGIN
  htp.p('<ul>');
  FOR i_rec IN ( SELECT a.c001 staff_id
                 FROM   apex_collections a
                 WHERE  a.collection_name = 'EMP_COLLECTION') LOOP
    htp.p('<li>'||i_rec.staff_id ||'</li>');
  END LOOP;
  htp.p('</ul>');
END;

基于以上信息,当我的jQuery UI对话框基于此PL / SQL区域出现时,我的区域标题信息正确显示,但根据我的区域源PL / SQL,它下面没有任何内容?

是不是因为我实际上没有提交我的页面,因为我可以在会话变量中看到我的收藏,并且它有正确的信息?

3 个答案:

答案 0 :(得分:2)

如果PL / SQL区域是当前页面的一部分,则在加载页面时呈现其内容。当你使用Javascript“显示”它时它没有刷新,它仍然显示它最初显示的内容。

如果您使用报告区域而不是PL / SQL区域,则可以从Javascript动态刷新它。您只需要一个特殊的报告模板来构建列表而不是表格。

由于您使用的是APEX 3.0,刷新报表区域可能并不那么简单(我无法确定)。在这种情况下,也许您可​​以在按需流程中构建区域的整个HTML并返回它,然后您的Javascript可以调用按需流程并使用流程返回的HTML填充(HTML)区域。

答案 1 :(得分:0)

再次感谢Tony和Tom的帮助。

正如你建议托尼,我基本上执行了你在这里概述的内容:

  

由于您使用的是APEX 3.0,因此刷新报表区域可能不是这样   简单(我不记得肯定)。在那种情况下,也许你可以   在按需进程中构建区域的整个HTML   返回它,然后你的Javascript可以调用按需进程和   使用流程返回的HTML填充(HTML)区域。

基本上使用按需进程来获取所需的结果集,我从javascript函数调用,从我页面上的“提交”按钮触发。现在使用HTML区域,我已经设置了区域页眉和区域页脚,我只需使用$('#div-id')将结果集返回到对话框中.html(gReturn);来自我的按需流程。

一切正常。

再次感谢。

答案 2 :(得分:0)

我还要插手。 :-)
老实说,唯一出错的就是你的iframe呈现的点。你可以做几件事:

  • 在渲染上创建iframe,但不要设置其来源。当按钮 单击,设置源,然后.dialog
  • 不要在渲染上创建iframe。调用该按钮时,创建 iframe $("div#container").html("<iframe src='...'></iframe>"), 然后是.dialog
  • 还可以选择简单地重新加载iframe源,请参阅 Reload an iframe with jQuery

这也应该解决它而不会有太多的麻烦。