ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 在WEBADI中实现组织屏蔽

在WEBADI中实现组织屏蔽

原创 Linux操作系统 作者:asiaidea 时间:2012-12-10 16:00:58 0 删除 编辑
这几天做了个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博客 ” ,链接:https://blog.itpub.net/10359218/viewspace-750859/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-11-04

  • 博文量
    140
  • 访问量
    519105