【问题标题】:Oracle ApEx collection info not appearing within PL/SQL regionOracle ApEx 集合信息未出现在 PL/SQL 区域内
【发布时间】:2012-08-31 03:28:38
【问题描述】:

我在使用 Oracle ApEx 集合时遇到问题,不确定为什么我没有看到我认为的结果。

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

关于保留 Joel Kallman 的复选框,我基本上具有本示例中所述的以下设置,即:

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

描述我的场景,我通过用户选择任意数量的复选框来向用户发送记录列表,使用 Joel 的示例,选择的记录存储在顶点集合“EMP_COLLECTION”中。

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

此时页面尚未提交。因此,当用户选择多个复选框,这些复选框正在后端存储在“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?

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

【问题讨论】:

  • 您是否随时设置了截断集合?
  • 嗨,汤姆,我会看看,但我不相信。那么,您是不是根据您的问题说我正在尝试做的事情实际上应该有效?请参阅下面我对托尼回复的评论:iframe。谢谢。

标签: plsql oracle-apex


【解决方案1】:

另外,请确保集合名称是大写的,同时创建和查询它。(遇到类似问题并已解决)

【讨论】:

【解决方案2】:

再次感谢托尼和汤姆的帮助。

按照建议,我基本上执行了这里概述的内容:

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

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

一切正常。

【讨论】:

    【解决方案3】:

    我也会加入。 :-)
    老实说,唯一出错的是你的 iframe 的渲染点。你可以做几件事:

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

    这也应该解决它,没有太多麻烦。

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

      • 嗨,托尼,我的带有复选框的报告实际上是通过 iframe 调用到主页中的,因此它位于 iframe 中,我通过 javascript 执行顶点收集处理。即使我是通过基于另一个页面的 iframe 来处理这个,我仍然认为我应该可以从我的 Apex 会话中的任何页面访问整个“EMP_COLLECTION”——这听起来对吗?谢谢。
      • 是的,您应该这样做,但是您尝试显示集合数据的区域显示的是页面加载时的内容,而不是现在的内容。它需要“刷新”,但您不能在不重新加载页面的情况下刷新 PL/SQL 区域。
      • 那么,托尼,难道我没有做我需要做的事吗?关于您上面的主要答案,不确定该怎么做。仅供参考,我使用的是 Oracle ApEx 3.0.1。我可以使用 jQuery 根据 oracle apex 集合刷新我的数据,然后将该信息输入 .html() 吗?
      • iframe 中的另一个页面确实可以访问该集合。集合是按会话存储的,所以这应该没问题。然而!如果您在页面加载时生成 iframe 代码,则可能是您在此处引用的 src 已经加载!在这种情况下,您的页面确实是空的。最好通过 DOM 检查工具检查这一点(如果您确实事先生成了 iframe 代码):当您的页面加载后,转到 iframe,单击其内容 -> 如果有内容,那么当然已经太晚了。
      • APEX 3.0?!不确定当时在刷新报告区域方面可以做些什么;我相信,如果它启用了 PPR,则可以通过调用 APEX 本身用于进行分页的相同 Javascript 以某种方式刷新它。另一个想法将被添加到我的答案中......
      猜你喜欢
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多