1. FND_REQUEST.SUBMIT_REQUEST函数
FND_REQUEST.SUBMIT_REQUEST 函数提交一个请求,它返回一个NUMBER值(request_id),具体调用如下 :
v_request_id := fnd_request.submit_request(application CHAR, --模块
program CHAR, --应用程式
description CHAR, --请求说明(可选)
start_time CHAR, --RUN 时间(可选)
sub_request BOOLEAN, --立刻提交请求
argument1 CHAR, --参数1
argument2 CHAR, --参数2
argument3 CHAR, --参数3
argument4 CHAR, --参数4
argument5 CHAR, --参数5
......
argument100 CHAR);
A. 在Package里面调用只需要传递需要的参数个数,因为它有默认值指示结束;
B. 在form里面则不行,要写满105个,而且参数结束之后要用一个chr(0)来表示结束 。
2. FND_CONCURRENT.WAIT_FOR_REQUEST函数
请求运行之后,判断是否运行成功,使用函数FND_CONCURRENT.WAIT_FOR_REQUEST
等待当前请求运行完毕的程序,可以利用这个等待当前的请求程序运行完毕再运行之后的程序。
由于Oracle的请求操作时并发处理,执行此函数将很可能等待很长时间,因此,一般不建议使用该函数,其实fnd_request.submit_request函数返回值不为零已经表示成功提交请求了。
v_request_flag :=FND_CONCURRENT.WAIT_FOR_REQUEST
( request_id IN number default NULL, --请求ID
interval IN number default 60, --检查时间间隔
max_wait IN number default 0, --最大等待时间
phase OUT varchar2,
status OUT varchar2,
dev_phase OUT varchar2, --请求运行阶段
dev_status OUT varchar2, --各个阶段状态
message OUT varchar2 --运行完成后输出信息)
dev_phase有Pending,Running,Complete,Inactive等几种,每种对应不同的Dev-Status,比如Complete阶段后就有Normal,Error,Warning,Cancelled,Terminated等几种状态。
3. PLSQL提交请求示例
CREATE OR REPLACE PROCEDURE SUBMIT_REQUEST_C IS
v_request_id NUMBER;
v_phase VARCHAR2(30);
v_status VARCHAR2(30);
v_dev_phase VARCHAR2(30);
v_dev_status VARCHAR2(30);
v_message VARCHAR2(1000);
v_request_flag BOOLEAN;
v_start_time VARCHAR2(30);
l_layout_result BOOLEAN;
l_notification_result BOOLEAN;
L_DEFAULT_LANGUAGE VARCHAR2(20);
L_DEFAULT_TERRITORY VARCHAR2(20);
L_TEMPLATE_CODE VARCHAR2(200);
BEGIN
FND_GLOBAL.APPS_INITIALIZE(user_id => 1326,
resp_id => 50657,
resp_appl_id => 700);
v_start_time := to_char(SYSDATE,'DD-MON-YYYY HH24:MI:SS');
BEGIN
--查询请求的输出模板信息
SELECT XTV.DEFAULT_LANGUAGE,
XTV.DEFAULT_TERRITORY,
XTV.TEMPLATE_CODE
INTO L_DEFAULT_LANGUAGE,
L_DEFAULT_TERRITORY,
L_TEMPLATE_CODE
FROM XDO_TEMPLATES_VL XTV
WHERE XTV.APPLICATION_SHORT_NAME = 'CUX'
AND XTV.TEMPLATE_CODE = 'HUHITMLST';
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('RTF文件有误!');
END;
--ADD_LAYOUT函数添加输出模板
l_layout_result := fnd_request.add_layout(
template_appl_name => 'AR',
template_code => 'HUHITMLST',
template_language => 'en',
template_territory => 'US',
output_format => 'EXCEL');
L_notification_result := fnd_request.add_notification('ACENOL');
--FND_REQUEST.SUBMIT_REQUEST 函数提交请求
IF(l_layout_result and l_notification_result) THEN
v_request_id := FND_request.SUBMIT_request(
application => 'AR',
program => 'HUHITMLST', --采购合同
description => NULL,
start_time => NULL,
sub_request => false,
argument1 => 85, --parameter1
argument2 => 'Active', --Parameter2
argument3 => 'FG', --Parameter3
argument4 => CHR(0)); --end
Commit;
--等待请求
v_request_flag :=fnd_concurrent.wait_for_request(
request_id => v_request_id, --IN
interval => 5, --IN
max_wait => 0, --IN
phase => v_phase, --OUT
status => v_status, --OUT
dev_phase => v_dev_phase, --OUT
dev_status => v_dev_status, --OUT
message => v_message); --OUT
commit;
IF v_request_flag THEN
IF v_dev_status = 'NORMAL' THEN
dbms_output.put_line('request run success!');
dbms_output.put_line('v_request_id:'||v_request_id);
dbms_output.put_line('request start run at:'||v_start_time);
ELSE
dbms_output.put_line('Failed:' || v_dev_status);
END IF;
ELSE
dbms_output.put_line('request unfinished!');
END IF;
ELSE dbms_output.put_line('sumbit_request happen error:No layout!');
END IF;
END SUBMIT_REQUEST_C;