只读条件不起作用



我正在开发一个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

最新更新