【问题标题】:Set Page Item Value on Page load oracle apex在页面加载 oracle apex 上设置页面项目值
【发布时间】:2021-05-19 03:56:36
【问题描述】:

我试图在页面加载开始时设置页面元素的值。 该值依赖于另一个已经从数据库中检索到并且已经在开始时设置的元素。

为了设置 id,我创建了一个函数,并调用此函数来实现页面加载时的动态操作,如下所示:

declare
id number;

begin

id:= set_ID(V('P1_page_item')); 
apex_util.set_session_state('P17_ID',id);

end;

但是没有设置页面项目的值。 您对如何在页面加载时设置页面项值有什么建议吗?

【问题讨论】:

    标签: oracle oracle-apex session-state


    【解决方案1】:

    有很多方法可以在页面加载时设置页面项目的值。您可以使用页面进程、计算、页面项目的默认值或页面项目的源值。动态动作也是可能的,但我从来没有这样做过......

    就我个人而言,我发现计算是为页面项设置值的最简洁方法。它只是为了这个 - 计算一个项目的价值。在您的情况下,您可以使用源 set_ID(:P1_PAGE_ITEM) 为类型表达式的项目 P17_ID 创建计算

    现在页面项未设置的问题可能是其他问题。尝试提供尽可能多的有关该页面的信息,以便为我们提供有关为什么未正确设置的线索。您是否在调试中运行该页面?这应该让您了解正在发生的事情。

    附注:

    • 函数V 不应在应用程序中使用。创建它是为了允许在应用程序上下文之外引用顶点项值,例如在存储过程或视图中。使用V 函数存在性能问题,应尽可能避免使用。在应用程序中,只需使用绑定变量语法 (:P1_ITEM) 即可引用和设置变量值。
    • P1_PAGE_ITEM 是如何设置的?作为最佳实践,请尽量避免引用其他页面上的页面项目。 P1_PAGE_ITEM 只能在第 1 页上引用和操作,依此类推。使用分支或链接,您将在第 17 页设置相应的项目P17_PAGE_ITEM。这将在以后为您节省大量调试时间。此外,如果您清除第 1 页上的缓存,则 P1_PAGE_ITEM 的值将被清除,如果该页面项目存在于其他页面上,这可能会导致意外行为。

    【讨论】:

    • 关于“函数 V 不应该在应用程序中使用” - 您有该建议的链接/来源吗?我们一直在讨论是否在我们的团队中禁止使用 v(),目前还没有得出结论。
    • 好吧.. 我假设 v 函数查询会话表以找到一个值,因此它的性能肯定会降低。如果存在与绑定变量相同的值,为什么要使用函数为您查询值?在对我来说绝对不行的申请中
    • 如果找到此文档:docs.oracle.com/html/E39147_04/bldapp_item.htm#CEGJAFEA,其中明确指出“在包或存储过程和函数的 PL/SQL 代码中使用此语法”并提示 sql 语句中的性能问题。所以我坚持不使用应用程序:)
    • 正是我想要的,谢谢!
    【解决方案2】:

    我会使用

    id := set_ID(:P1_PAGE_ITEM); 
    

    另外,您是否将动态操作设置为在初始化时触发?我想你应该这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      相关资源
      最近更新 更多