2017-06-14 77 views
0

我的主页中有不同的区域。我想完成的是根据记录的用户动态禁用一个或多个区域。APEX ORACLE - 使用PL/SQL + Javascript动态禁用区域

我已经设法以'静态方式'禁用一个区域。在页面属性,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; 

这是行不通的。有什么建议么?谢谢!

回答

1

服务器端条件是正常的,您可以有任何形式的声明性表达式或PL/SQL或SQL查询等。 页面呈现后可能无法切换,因为它们不会呈现首先。

一个客户端的条件可能是从动态动作射击页面加载,这也可以通过授权方案的保护,因此,只有某些动态行为存在火灾。但正如有人建议的那样,这并不安全。

提供的代码永远不会在一个良好的书面申请APEX存在,虽然我怀疑可能是OP是APEX 3.x或那里了解到。

+0

我在Apex 4.2,我在这里学习。那么最好的解决方案是改变该地区的授权方案? – Dygne

+1

是的,如果您不想向某些用户显示特定的区域/按钮,那么授权方案是可行的。我建议你按功能应用方案,而不是业务角色,恕我直言,但这是一个更深入的讨论 – Scott

+0

谢谢!还有一个问题:正如我在答案中提到的,我只想禁用特定区域,而不是隐藏它。这仍然可能与认证计划? – Dygne

0

问题解决了。

的脚本需要推出On Load - After Regions

煤矿被设置为On Load - Before Header

所以它是不是能够得到各区域的ID

+2

您也可以更改特定区域的授权方案,例如对于'R4'选择'Not Admin'(假设你有一个管理员授权方案)。 – RLOG

+0

@RLOG同意,这将是一个更强大的方法恕我直言。目前的方法可以很容易地避开。也许这在OP的环境中不是问题。 – hisnameismyname2