2012-09-06 28 views
1

我遇到了Oracle ApEx集合的问题,并且不确定为什么我没有看到我认为我会的结果。Oracle ApEx集合信息未出现在PL/SQL区域中

首先,我使用的是Oracle APEX 3.0

我基本上有以下设置为与问候在这个例子中所描述的乔尔卡尔曼保存复选框,即:

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

钍描述我的情况,我憎恨用户在记录列表中选择任意数量的复选框,使用Joel的示例,所选记录存储在顶点集合“EMP_COLLECTION”中。

现在所有这些似乎都正确地存储在'EMP_COLLECTION'中,但是当我试图从集合内访问这些存储值时,在作为jQuery UI对话框的PL/SQL区域内,我似乎无法获取值。

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

这就要求凡在Region Header,我已经定义了以下我的PL/SQL区块:

<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?

是因为我没有真正提交我的页面,因为我可以在会话变量中看到我的集合,并且它有正确的信息吗?

任何帮助,将不胜感激。

谢谢。

+0

您是否在任何时候都设置了truncate集合? – Tom

+0

嗨汤姆,我会看看,但我不这么认为。那么你是根据你的问题说,我正在尝试做什么,实际上应该工作吗?看到我的评论下面Tony的回复:iframe。谢谢。 – tonyf

回答

0

谢谢托尼和汤姆再次为您提供帮助。

如你所说托尼,我基本上执行您介绍了这里什么:

由于您使用APEX 3.0,刷新报表区域可能没有这么简单 (我不记得肯定) 。在这种情况下,也许你可以在按需处理过程中构造区域的整个HTML,并且 返回它,然后你的Javascript可以调用按需处理过程,并且 用该过程返回的HTML填充(HTML)区域。

基本使用的需求的过程,以获得所需的结果集,这是我从一个JavaScript函数调用,从我的页面上的“提交”按钮触发。现在使用一个HTML区域,我已经设置了区域标题和区域页脚,我只需使用$('#div-id')。html(gReturn)将我的结果集返回到我的对话框;从我的点播过程。

一切正常。

再次感谢。

2

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

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

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

+0

嗨,托尼,我的报告与复选框实际上是通过iframe调用到主页面,所以它是在我通过JavaScript执行apex集合处理的iframe中。尽管我通过基于另一个页面的iframe来处理这个问题,但我仍然会认为我应该可以从我的Apex会话中的任何页面访问整个“EMP_COLLECTION” - 这听起来适合您吗?谢谢。 – tonyf

+0

是的,你应该这样做,但是你试图展示收集数据的区域正在显示当页面加载时有什么,而不是现在有什么。它需要“刷新”,但如果不重新加载页面,则无法刷新PL/SQL区域。 –

+0

所以托尼,不管怎么样,我是否还没有做我需要做的事情呢?不知道该怎么做,关于上面的主要答案。仅供参考,我正在使用Oracle ApEx 3.0.1。我可以使用jQuery刷新基于oracle apex收集的数据,然后将该信息提供给.html()? – tonyf

0

我只是插一脚。 :-)
老实说,唯一出错的地方就是你的iframe被渲染的地步。有几件事你可以做的:

  • 在渲染上创建iframe,但不设置其来源。当单击按钮 时,设置源,然后.dialog
  • 不要在渲染上创建iframe。当按钮被调用时,创建 的iframe $("div#container").html("<iframe src='...'></iframe>"),其次是.dialog
  • 还有的干脆重装的iframe源选项 ,看到 Reload an iframe with jQuery

这应该也是解决这个问题没有太多的麻烦。