只读条件不起作用

Read-only condition not working

我正在开发 Oracle Application express (APEX 4.2) 应用程序。

其中一个页面控件(文本框,title)具有 "PL/SQL Expression" 只读条件:
: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是否只读:

我该如何解决?

你的问题是时间顺序。 页面呈现,条件评估,然后您在浏览器页面加载时计算您的应用程序项。

将您的代码移动到计算中,可能在区域之前,因此作为页面呈现的一部分完成。

REQUEST 值只能在页面处理中有机地使用,因此除非您明确设置它,否则可能需要注意。

您还应考虑尽可能使用声明性操作。

www.grassroots-oracle.com/2013/05/performance-of-apex-conditions.html