支持MOAC功能的Form开发步骤

注意:设置好安全性配置文件后,一定要跑一个请求:维护安全性清单

 

在R12版本中,OU的控制采取了MOAC的方式,使用户的操作得到了改善。
而如果客户化的Form能够支持MOAC的功能,需要在界面上提供当前用户可以选择的OU字段供用户选择。

这样在Form的开发过程中需要如下的开发步骤:
1,PRE-FORM 触发器初始化MOAC配置环境
  添加如下代码:
  MO_GLOBAL.init(‘ONT’);
  — global.mo_ou_count
  — global.mo_default_org_id
  — global.mo_default_ou_name
  IF l_default_org_id IS NOT NULL THEN — default org id not null
    MO_GLOBAL.SET_POLICY_CONTEXT(‘S’,l_default_org_id);
  ELSE
    MO_GLOBAL.SET_POLICY_CONTEXT(‘M’,null);
  END IF; — default org id not null  
  这段代码的作用是根据预制文件的设置,初始化OU的信息,将用户可以访问的OU信息插入到mo_glob_org_access_tmp表中,
  同时将默认的OU ID、OU Name和OU Count分别写到global.mo_default_org_id, global.mo_default_org_id, global.mo_default_ou_name
  具体细节可以查看数据库包:mo_global

2,WHEN-CREATE-RECORD触发器中拷贝OU默认值
  在此触发器中将默认的OU ID和OU Name拷贝给Form界面上对应的自动,实现创建记录的时候默认带出默认OU信息。
  copy(name_in(‘global.mo_default_org_id’),’’);
  copy(name_in(‘global.mo_default_ou_name’),’’);

3,创建OU的LOV
  Form界面上的OU 名称字段创建一个LOV,LOV对应记录组的SQL语句如下:
  SELECT hr.organization_id organization_id, hr.NAME organization_name
    FROM hr_operating_units hr
   WHERE mo_global.check_access(hr.organization_id) = ‘Y’
   ORDER BY organization_name

其它没有特殊的步骤。

 

当前职责可访问的OU(MO:安全性配置文件)

--初始化环境
BEGIN
  fnd_global.apps_initialize(user_id      => 0,
                             resp_id      => 50658,
                             resp_appl_id => 20003);
  mo_global.set_policy_context(p_access_mode => 'S', p_org_id => 82);
  mo_global.init('SQLAP');
END;

mo_global.init(<MO>);MO取值 为 FND_MO_PRODUCT_INIT表中

--以下SQL查询当前配置的MO:安全性配置文件
SELECT *
  FROM per_security_profiles psp
 WHERE psp.security_profile_id =
       to_number(fnd_profile.value('XLA_MO_SECURITY_PROFILE_LEVEL'));

--以下SQL用来获取当前安全性配置文件和当前用户可访问的OU
SELECT per.organization_id, hou.name
  FROM per_organization_list per, hr_operating_units hou
 WHERE per.security_profile_id =
       to_number(fnd_profile.value('XLA_MO_SECURITY_PROFILE_LEVEL'))
   AND per.organization_id = hou.organization_id
   AND hou.usable_flag IS NULL;

你可能感兴趣的:(支持MOAC功能的Form开发步骤)