我正在开发一个Oracle Application express(APEX 4.2(应用程序。
其中一个页面控件(文本框、title
(具有"PL/SQL 表达式"只读条件:
:APP_PROJECT_READ_ONLY = 'YES'
:APP_PROJECT_READ_ONLY
是一个应用程序项,它是从在页面加载时触发的动态操作on_load
设置的:
DECLARE
CURR_USER VARCHAR2(50);
BEGIN
IF :REQUEST = 'NEW' THEN
:APP_PROJECT_ID := 0;
:APP_PROJECT_READ_ONLY := 'NO';
ELSE
:APP_PROJECT_ID := :P2_ID;
SELECT OWNER INTO CURR_USER
FROM PROJECTS
WHERE ID = :APP_PROJECT_ID;
IF CURR_USER = :APP_USER THEN
:APP_PROJECT_READ_ONLY := 'NO';
ELSE
:APP_PROJECT_READ_ONLY := 'YES';
END IF;
END IF;
EXCEPTION WHEN NO_DATA_FOUND THEN
NULL;
END;
检查会话状态显示:APP_PROJECT_READ_ONLY
的值是正确的,但它似乎并不能决定title
是否为只读:
- 如果我将
on_load
的"要返回的页面项目"留空,则title
始终是可编辑的。 - 但是,如果我将其设置为
title
,那么title
将始终是只读的,而且它的源代码管理不起作用,它为空(在以前的情况下它工作正常(。
我该如何解决它?
你的问题是时间顺序。页面呈现,条件评估,然后在浏览器的页面加载时计算应用程序项。
将代码移动到计算中,也许在区域之前,因此作为页面呈现的一部分完成。
REQUEST 值仅在页面处理中有机地可用,因此除非您明确设置,否则可能需要注意。
如果可能,还应考虑使用声明性操作。
www.grassroots-oracle.com/2013/05/performance-of-apex-conditions.html