在WEBADI中实现组织屏蔽

本文介绍了一种在Oracle WEBADI中实现组织屏蔽的方法,通过编写特定的函数获取当前用户的配置信息,并利用这些信息来限制业务实体的选择范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天做了个WEBADI的任务,要求在模板里实现组织屏蔽。也就是有个业务实体列让用户选,但只能选当前职责能操作的业务实体。

最初用这样的方法来实现LOV 提取可操作OU:
select name
  from hr_operating_units hou
 where mo_global.check_access(hou.organization_id) ='Y' 

但发现不行,原因可能是mo_global需要进行初始化。

最后用了下面的笨方法:
思路是: 检查当前职责,当前用户的配置文件,取MO业务实体,MO默认业务实体,MO安全性配置文件的信息,然后计算可操作的OU.

1. 写个函数取当前模板的职责用户所用的安全性配置文件,默认只取用户层及职责层的,如果用户层有,则不取职责层.

   FUNCTION get_sec_profile_id(pi_user_id IN NUMBER, pi_resp_id IN NUMBER)
    RETURN NUMBER IS
  
    v_profile_id NUMBER;
  BEGIN
    BEGIN
      SELECT to_number(pov.profile_option_value)
        INTO v_profile_id
        FROM fnd_profile_options       po
            ,fnd_profile_option_values pov
       WHERE po.profile_option_name = 'XLA_MO_SECURITY_PROFILE_LEVEL'
         AND po.profile_option_id = pov.profile_option_id
         AND pov.level_id = 10004 --用户层
         AND pov.level_value = pi_user_id;
    EXCEPTION
      WHEN no_data_found THEN
        BEGIN
          SELECT to_number(pov.profile_option_value)
            INTO v_profile_id
            FROM fnd_profile_options       po
                ,fnd_profile_option_values pov
           WHERE po.profile_option_name = 'XLA_MO_SECURITY_PROFILE_LEVEL'
             AND po.profile_option_id = pov.profile_option_id
             AND pov.level_id = 10003 --职责层
             AND pov.level_value = pi_resp_id;
        EXCEPTION
          WHEN no_data_found THEN
            v_profile_id := NULL;
        END;
    END;
  
    RETURN v_profile_id;
  
  
  END;

2. 然后业务实体的LOV用如下SQL来构造:
SELECT hou.name
     , hou.organization_id
  FROM hr_operating_units hou
 WHERE hou.organization_id = $profiles$.org_id
    OR hou.organization_id = $profiles$.default_org_id
    OR EXISTS (SELECT 1
          FROM per_security_profiles sp
         WHERE sp.security_profile_id =
               cux_common_utilities_pkg.get_sec_profile_id($env$.userid,
                                                           fnd_profile.value('RESP_ID'))
           AND sp.view_all_organizations_flag = 'Y')
    OR EXISTS (SELECT 1
          FROM per_security_organizations so
         WHERE so.security_profile_id =
               cux_common_utilities_pkg.get_sec_profile_id($env$.userid,
                                                           fnd_profile.value('RESP_ID'))
           AND so.organization_id = hou.organization_id)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10359218/viewspace-750859/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10359218/viewspace-750859/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值