1、判断请求组是否存在函数:
FND_PROGRAM.request_group_exists()
返回:BOOLEAN类型,TRUE/FALSE 。
参数:
(1)、request_group: 请求组名称。
(2)、application:请求组的应用简称,如:BOM 物料清单系统
2、增加请求组过程
FND_PROGRAM.request_group()
参数:
(1)、request_group: 请求组名称。
(2)、application:请求组的应用简称,如:BOM 物料清单系统
(3)、code: 请求代码,默认为空
(4)、description: 请求组说明,选填。
例子: 复制四个请求组。
/*********************
** 1、导入请求组API
****/
declare
v_count number;
CURSOR c_grp is
select frg.application_id,
(select fa.application_short_name from
apps.fnd_application_vl fa
where fa.application_id = frg.application_id
)as application_short_name,
frg.request_group_id,
frg.request_group_name,
frg.request_group_code,
frg.description
from apps.fnd_request_groups frg
where frg.REQUEST_GROUP_NAME in ('MRP_MU',
'PO_KEY_RG',
'OM_KEY_RG',
'INV_KEY_RG'
);
v_new_request_group_name fnd_request_groups.REQUEST_GROUP_NAME%type;
BEGIN
FOR R1 IN C_GRP LOOP
-- 在原请求组名后加“_ou”结尾。
v_new_request_group_name := r1.request_group_name ||'_OU' ;
-- 请求组命名规则 : 为业事部或子公司提供请求组时,以"_OU"结尾 。
-- 导入请求组(不存在则导入,存在则更新)
if FND_PROGRAM.request_group_exists(request_group => v_new_request_group_name,
application => r1.application_short_name ) = false then
APPS.FND_PROGRAM.request_group(
request_group => v_new_request_group_name,
application => r1.application_short_name,
code => null, --r1.request_group_code,
description => r1.description ||'(OU)'
);
end if;
END LOOP;
END;
3、在请求组里添加并发程序的API过程
FND_PROGRAM.ADD_TO_GROUP()
参数:
(1)、program_short_name:并发程序代码,例如: CUXBOM0001
(2)、program_application:并发程序的应用简称,如:BOM 物料清单系统
(3)、request_group: 请求组名称,例如: CUX_REQUESTS
(4)、group_application:请求组的应用简称,如:BOM 物料清单系统
3.1、判断并发程序是否存在请求组里的函数
FND_PROGRAM.program_in_group()
返回:BOOLEAN类型,TRUE/FALSE 。
参数:
(1)、program_short_name:并发程序代码,例如: CUXBOM0001
(2)、program_application:并发程序的应用简称,如:BOM 物料清单系统
(3)、request_group: 请求组名称,例如: CUX_REQUESTS
(4)、group_application:请求组的应用简称,如:BOM 物料清单系统
4、在请求组里添加应用程序的API过程
FND_PROGRAM.ADD_APPLICATION_TO_GROUP()
参数:
(1)、application_name:并发程序代码,例如: CUX,
(2)、request_group: 请求组名称,例如: CUX_REQUESTS
(3)、group_application:请求组的应用简称,如:BOM 物料清单系统
4.1、判断应用程序是否存在请求组里的函数,
FND_PROGRAM.application_in_group()
返回:
返回:BOOLEAN类型,TRUE/FALSE 。
参数:
(1)、application_name:并发程序代码,例如: CUX,
(2)、request_group: 请求组名称,例如: CUX_REQUESTS
(3)、group_application:请求组的应用简称,如:BOM 物料清单系统
例子:将指定请求组导入新的请求组。
/**
-----******************************************----
** 2、导入请求组的并发程序清单
**/
DECLARE v_request_group_name varchar2(150); -- 请求组名称
v_request_group_name_new varchar2(150); -- 请求组名称
CURSOR c_grp is
select frg.application_id,
(select fa.application_short_name from
apps.fnd_application_vl fa
where fa.application_id = frg.application_id
)as application_short_name,
frg.request_group_id,
frg.request_group_name,
frg.request_group_code,
frg.description
from apps.fnd_request_groups frg
where frg.REQUEST_GROUP_NAME in ('MRP_MU',
'PO_KEY_RG',
'OM_KEY_RG'
);
CURSOR C_FRGU( P_REQUEST_GROUP_NAME IN VARCHAR2) IS
--N: 系统管理员>>安全性>>责任>>请求
-- 程序
SELECT FRG.APPLICATION_ID, -- 请求组-应用ID
FA.APPLICATION_SHORT_NAME, -- 请求组-应用简称
FA.APPLICATION_NAME, -- 请求组-应用名称
FRG.REQUEST_GROUP_ID, -- 请求组ID
FRG.REQUEST_GROUP_NAME, -- 请求组-名称
FRG.DESCRIPTION AS REQUEST_GROUP_DESC, -- 请求组-说明
FRG.REQUEST_GROUP_CODE, -- 请求组-代码
FRGU.REQUEST_UNIT_TYPE,
DECODE(FRGU.REQUEST_UNIT_TYPE,'P','程序','S','集',
'A','应用',FRGU.REQUEST_UNIT_TYPE ) AS "请求-类型",
FRGU.REQUEST_UNIT_ID,
FCP.CONCURRENT_PROGRAM_NAME AS PROGRAM_NAME, -- "请求-名称代码",
FCP.USER_CONCURRENT_PROGRAM_NAME AS "请求-名称",
FCP.DESCRIPTION AS "请求-说明",
FRGU.UNIT_APPLICATION_ID AS "请求-应用ID",
FA2.APPLICATION_SHORT_NAME AS "PROGRAM_APPLICATION" ,-- "请求-应用简称",
FA2.APPLICATION_NAME AS "请求-应用名称"
--'' AS SS2
FROM apps.FND_REQUEST_GROUPS frg, -- 请求组
APPS.FND_APPLICATION_VL FA, -- 应用程序
APPS.FND_REQUEST_GROUP_UNITS FRGU, -- 请求组单元
APPS.FND_CONCURRENT_PROGRAMS_VL FCP, -- 并发程序
APPS.FND_APPLICATION_VL FA2 -- 应用程序
WHERE FRG.APPLICATION_ID = FA.APPLICATION_ID
AND FRG.REQUEST_GROUP_ID = FRGU.REQUEST_GROUP_ID
AND FRGU.REQUEST_UNIT_ID = FCP.CONCURRENT_PROGRAM_ID
AND FRGU.UNIT_APPLICATION_ID = FCP.APPLICATION_ID
AND FRGU.UNIT_APPLICATION_ID = FA2.APPLICATION_ID
-- AND FRGU.REQUEST_UNIT_TYPE = 'P' -- P: 程序
AND FRG.REQUEST_GROUP_NAME = P_REQUEST_GROUP_NAME
-- AND FCP.USER_CONCURRENT_PROGRAM_NAME LIKE 'CUX销售订单和订单%' --AS "请求-名称",
-- ORDER BY FRG.REQUEST_GROUP_NAME, FCP.USER_CONCURRENT_PROGRAM_NAME
UNION ALL
-- 应用
SELECT FRG.APPLICATION_ID, -- 请求组-应用ID
FA.APPLICATION_SHORT_NAME, -- 请求组-应用简称
FA.APPLICATION_NAME, -- 请求组-应用名称
FRG.REQUEST_GROUP_ID, -- 请求组ID
FRG.REQUEST_GROUP_NAME, -- 请求组-名称
FRG.DESCRIPTION AS REQUEST_GROUP_DESC, -- 请求组-说明
FRG.REQUEST_GROUP_CODE, -- 请求组-代码
FRGU.REQUEST_UNIT_TYPE,
DECODE(FRGU.REQUEST_UNIT_TYPE,'P','程序','S','集',
'A','应用',FRGU.REQUEST_UNIT_TYPE ) AS "请求-类型",
FRGU.REQUEST_UNIT_ID,
FA3.APPLICATION_SHORT_NAME AS PROGRAM_NAME, -- "请求-名称代码",
-- FCP.USER_CONCURRENT_PROGRAM_NAME AS "请求-名称",
-- FCP.DESCRIPTION AS "请求-说明",
FA3.APPLICATION_NAME AS "请求-名称",
FA3.DESCRIPTION AS "请求-说明",
FRGU.UNIT_APPLICATION_ID AS "请求-应用ID",
FA2.APPLICATION_SHORT_NAME AS "PROGRAM_APPLICATION" ,-- "请求-应用简称",
FA2.APPLICATION_NAME AS "请求-应用名称"
--FRGU.*
FROM apps.FND_REQUEST_GROUPS frg, -- 请求组
APPS.FND_APPLICATION_VL FA, -- 应用程序
APPS.FND_REQUEST_GROUP_UNITS FRGU, -- 请求组单元
--APPS.FND_CONCURRENT_PROGRAMS_VL FCP, -- 并发程序
APPS.FND_APPLICATION_VL FA3,
APPS.FND_APPLICATION_VL FA2 -- 应用程序
WHERE FRG.APPLICATION_ID = FA.APPLICATION_ID
AND FRG.REQUEST_GROUP_ID = FRGU.REQUEST_GROUP_ID
AND FRGU.REQUEST_UNIT_ID = FA3.APPLICATION_ID --FCP.CONCURRENT_PROGRAM_ID
-- AND FRGU.UNIT_APPLICATION_ID = --FCP.APPLICATION_ID
AND FRGU.UNIT_APPLICATION_ID = FA2.APPLICATION_ID
AND FRGU.REQUEST_UNIT_TYPE = 'A' -- P: 程序 , A:应用, S:集
AND FRG.REQUEST_GROUP_NAME = P_REQUEST_GROUP_NAME
UNION ALL
-- 程序集
SELECT FRG.APPLICATION_ID, -- 请求组-应用ID
FA.APPLICATION_SHORT_NAME, -- 请求组-应用简称
FA.APPLICATION_NAME, -- 请求组-应用名称
FRG.REQUEST_GROUP_ID, -- 请求组ID
FRG.REQUEST_GROUP_NAME, -- 请求组-名称
FRG.DESCRIPTION AS REQUEST_GROUP_DESC, -- 请求组-说明
FRG.REQUEST_GROUP_CODE, -- 请求组-代码
FRGU.REQUEST_UNIT_TYPE,
DECODE(FRGU.REQUEST_UNIT_TYPE,'P','程序','S','集',
'A','应用',FRGU.REQUEST_UNIT_TYPE ) AS "请求-类型",
FRGU.REQUEST_UNIT_ID,
FRS.REQUEST_SET_NAME AS PROGRAM_NAME, -- "请求-名称代码",
-- FCP.USER_CONCURRENT_PROGRAM_NAME AS "请求-名称",
-- FCP.DESCRIPTION AS "请求-说明",
FRS.USER_REQUEST_SET_NAME AS "请求-名称",
FRS.DESCRIPTION AS "请求-说明",
FRGU.UNIT_APPLICATION_ID AS "请求-应用ID",
FA2.APPLICATION_SHORT_NAME AS "PROGRAM_APPLICATION" ,-- "请求-应用简称",
FA2.APPLICATION_NAME AS "请求-应用名称"
--FRGU.*
FROM apps.FND_REQUEST_GROUPS frg, -- 请求组
APPS.FND_APPLICATION_VL FA, -- 应用程序
APPS.FND_REQUEST_GROUP_UNITS FRGU, -- 请求组单元
--APPS.FND_CONCURRENT_PROGRAMS_VL FCP, -- 并发程序
-- APPS.FND_APPLICATION_VL FA3,
APPS.FND_REQUEST_SETS_VL FRS, -- 请求集
APPS.FND_APPLICATION_VL FA2 -- 应用程序
WHERE FRG.APPLICATION_ID = FA.APPLICATION_ID
AND FRG.REQUEST_GROUP_ID = FRGU.REQUEST_GROUP_ID
AND FRGU.REQUEST_UNIT_ID = FRS.REQUEST_SET_ID --FCP.CONCURRENT_PROGRAM_ID
AND FRGU.UNIT_APPLICATION_ID = FRS.APPLICATION_ID
AND FRGU.UNIT_APPLICATION_ID = FA2.APPLICATION_ID
AND FRGU.REQUEST_UNIT_TYPE = 'S' -- P: 程序 , A:应用, S:集
AND FRG.REQUEST_GROUP_NAME = P_REQUEST_GROUP_NAME
;
BEGIN
for r_grp in c_grp loop
v_request_group_name := r_grp.REQUEST_GROUP_NAME; -- 'MRP_MU';
v_request_group_name_NEW := v_request_group_name || '_OU';
FOR R_FRGU IN C_FRGU(v_request_group_name) LOOP
IF R_FRGU.REQUEST_UNIT_TYPE = 'P' THEN
if FND_PROGRAM.program_in_group (
program_short_name => r_frgu.PROGRAM_NAME,
program_application => r_frgu.program_application,
request_group => v_request_group_name_new ,
group_application => r_frgu.APPLICATION_SHORT_NAME
) = FALSE THEN -- 判断不存在时导入
-- 1、并发程序
FND_PROGRAM.ADD_TO_GROUP(
program_short_name => r_frgu.PROGRAM_NAME,
program_application => r_frgu.program_application,
request_group => v_request_group_name_new ,
group_application => r_frgu.APPLICATION_SHORT_NAME
);
END IF;
ELSIF R_FRGU.REQUEST_UNIT_TYPE = 'A' THEN
IF FND_PROGRAM.application_in_group(
application_name => r_frgu.PROGRAM_NAME,
request_group => v_request_group_name_new ,
group_application => r_frgu.APPLICATION_SHORT_NAME
) = FALSE THEN -- 判断不存在时导入
-- 2、应用程序
FND_PROGRAM.ADD_APPLICATION_TO_GROUP(
application_name => r_frgu.PROGRAM_NAME,
request_group => v_request_group_name_new ,
group_application => r_frgu.APPLICATION_SHORT_NAME
);
END IF;
-- 3、请求集, 没有API过程
END IF;
END LOOP;
end loop;
END;