问题描述
我试图在开始时在页面加载时设置页面元素的值。 该值依赖于已经从数据库中检索到并且已经在开头设置的另一个元素。
为了设置 id,我创建了一个函数,我调用这个函数来执行页面加载的动态操作,如下所示:
declare
id number;
begin
id:= set_ID(V('P1_page_item'));
apex_util.set_session_state('P17_ID',id);
end;
但是页面项目的值没有被设置。 您对如何在页面加载时设置页面项目值有任何建议吗?
解决方法
有很多方法可以在页面加载时设置页面项的值。您可以使用页面处理、计算、页面项目的默认值或页面项目的源值。动态动作也是一种可能,但我从未这样做过...
我个人认为计算是为页面项目设置值的最简洁的方法。这只是为了 - 计算项目的价值。在您的情况下,您可以使用源 set_ID(:P1_PAGE_ITEM)
现在页面项没有设置的问题可能是别的。尝试提供有关页面的尽可能多的信息,以便为我们提供有关为什么未正确设置的线索。您是否在调试中运行该页面?这应该能让您了解正在发生的事情。
附注:
- 不应在应用程序中使用函数
V
。创建它是为了允许在应用程序上下文之外引用顶点项目值,例如在存储过程或视图中。使用V
函数存在性能问题,应尽可能避免。在应用程序中,只需使用绑定变量语法(:P1_ITEM
)来引用和设置变量值。 -
P1_PAGE_ITEM
是如何设置的?作为最佳实践,尽量避免引用其他页面上的页面项目。P1_PAGE_ITEM
应该只在第 1 页等上被引用和操作。使用分支或链接,您可以在第 17 页上设置相应的项目P17_PAGE_ITEM
。这将节省您以后的大量调试时间。此外,如果您清除第 1 页上的缓存,则 P1_PAGE_ITEM 的值将被清除,如果该页项存在于其他页面上,这可能会导致意外行为。