首页 > 数据库 > Oracle > 获得基于Multi-Org的视图中的数据
1:fnd_global.APPS_Initialize( user_id=>3070,resp_id=>50650,resp_appl_id
=>20003);
end;
2:在定义Cocurrent Program时定义参数P_ORG_ID,设定初始值为fnd_profile.value(‘ORG_ID’),
在报表的BeforeReport
Trigger中加入下面的代码:
fnd_client_info.set_org_context(to_char(x_org_id));
3: 在BeforeReport Trigger加入:SRW.USER_EXIT('FND
SRWINIT');
在AfterReport Trigger加入:SRW.USER_EXIT('FND
SRWEXIT');
报表中还要添加一个Number类型的用户参数P_CONC_REQUEST_ID
注:测试报表性能时还要将Cocurrent
Program定义中的Enable Trace打勾
随后总结了下,要查询得到基于Muti-Org的视图中的数据,一般有以下几种方法:
1.
begin
dbms_application_info.set_client_info(:org_id);-
end;
2.
Declare
x_org_id
number;
begin
Fnd_profile.GET('ORG_ID',x_org_id);
fnd_client_info.set_org_context(x_org_id);
end;
3.
begin
fnd_client_info.setup.client_info(application_id
=>
1,
responsibility_id =>
2,
user_id in number =>
3,
security_group_id => 4);
end;
4.
begin
fnd_global.APPS_Initialize(
user_id=>3070,resp_id=>50650,resp_appl_id =>20003);
end;
其原理都是直接或间接的获取OU的ORG_ID后设置环境环境变量,我一般用2,4最多
重点参考Package
fnd_global,Fnd_profile,可以得到获取许多其他profile或者环境变量的方法,比如:
fnd_profile.value('GL_SET_OF_BKS_ID')
from dual
fnd_profile.value('SO_ORGANIZATION_ID') from
dual;
fnd_profile.value('ORG_ID');
fnd_profile.value('MFG_ORGANIZATION_ID')
FND_PROFILE.VALUE('USER_ID');
FND_PROFILE.VALUE('login_ID');
FND_PROFILE.VALUE('USERNAME');
FND_PROFILE.VALUE('CONCURRENT_REQUEST_ID');
FND_PROFILE.VALUE('RESP_APPL_ID');
FND_PROFILE.VALUE('APPL_SHRT_NAME');
我的理解是对应于Form.
$PROFILE$块的字段:
外还要说明的是开发中经常需要获取的mfg_org_id,即库存组织Id
可以用fnd_profile.value('MFG_ORGANIZATION_ID')来获得,但是未必能得到,因为打开某些模块的Form时系统并不会给给变量赋值,直到执行Change
Oranization,选择一个库存组织后才能取到。
Form中通常采用的办法是在PRE-FORM或WHEN-NEW-FORM-INSANCE
trigger中使用:fnd_org.choose_org ;并添加4个用户参数chart_of_account_id(number),
org_name(char), org_code(char), org_id(number).
下表是一些和OU,库存组织相关的表和视图
表或视图说明
HR_OPERATING_UNITS
OU信息
ORG_ORGANIZATION
_DEFINITIONS
库存组织信息
OE_SYS_PARAMETERS_V
库存主组织,PARAMETER_CODE =
MASTER_ORGANIZATION_ID
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/269025/viewspace-1264975/ ,如需转载,请注明出处,否则将追究法律责任。