【问题标题】:APEX ORACLE - Disable a region dynamically with PL/SQL + JavascriptAPEX ORACLE - 使用 PL/SQL + Javascript 动态禁用区域
【发布时间】:2017-06-14 07:54:50
【问题描述】:

我的主页中有不同的区域。我想要完成的是根据登录的用户动态禁用一个或多个区域。

我已经设法以“静态方式”禁用一个区域。在页面属性中,在 JavaScript 菜单下,在Execute when Page Loads 我放了这段代码:

$('#R4').addClass('apex_disabled').attr('tabindex', '-1');

其中R4 是其中一个区域的ID

对于“动态方式”,我创建了一个Process。例如,如果用户是ADMIN,我想禁用区域R4。这是代码(现在我不检查用户,我只是想开始使用禁用功能):

    DECLARE
    user VARCHAR2 (50);

    BEGIN

    select username into user
    from USER
    where username = V('APP_USER');


    htp.p (' <script type = "text/javascript"> ');
    htp.p (' function disableRegion()');
    htp.p (' { ');
    htp.p (' 
    $(''#R4'').addClass(''apex_disabled'').attr(''tabindex'',''-1''); ');
    htp.p (' } ');
    htp.p (' </script> ');


    END;

这不起作用。有什么建议么?谢谢!

【问题讨论】:

    标签: oracle-apex


    【解决方案1】:

    服务器端条件是正常的,您可以有任何形式的声明性表达式,或 PL/SQL 或 SQL 查询等。 一旦页面被渲染,这些可能不会被切换回,因为它们不会首先被渲染。

    客户端条件可能来自页面加载时触发的动态操作,这也可以受授权方案保护,因此只有某些动态操作可以触发。但正如有人建议的那样,这并不安全。

    提供的代码永远不会存在于编写良好的 APEX 应用程序中,尽管我怀疑 OP 可能在 APEX 3.x 上,或者在那里学习。

    【讨论】:

    • 我在 Apex 4.2 上,我在这里学习。那么最好的解决方案是更改区域上的授权方案?
    • 是的,如果您不想向某些用户显示某些区域/按钮,那么授权方案是可行的方法。我建议您按功能应用方案,而不是按业务角色,恕我直言,但这是一个更深入的讨论
    • 谢谢!还有一个问题:正如我在答案中提到的,我只想禁用特定区域,而不是隐藏它。使用身份验证方案仍然可能吗?
    • 禁用,你的意思是添加一个特定的类?您可以将其作为动态操作(以身份验证方案为条件)运行,或者有条件地计算一个项目并将其替换为区域类。
    【解决方案2】:

    问题解决了。

    脚本需要启动On Load - After Regions

    我的设置为On Load - Before Header

    所以它无法获取区域的ID

    【讨论】:

    • 您也可以只更改特定区域的授权方案,例如对于R4,选择Not Admin(假设您有管理员授权方案)。
    • @RLOG 同意,恕我直言,这将是一种更强大的方法。目前的方法很容易被规避。也许这在 OP 的环境中不是问题。
    猜你喜欢
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2021-02-10
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多