注意:设置好安全性配置文件后,一定要跑一个请求:维护安全性清单
在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
其它没有特殊的步骤。
--初始化环境
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;