读书人

交付请求

发布时间: 2012-07-22 19:31:17 作者: rapoo

提交请求
1、首先调用函数 fnd_request.add_layout 来设置打印报表的rtf模板,

result := fnd_request.add_layout(template_appl_name => :template_appl_name,
template_code => :template_code,
template_language => :template_language,
template_territory => :template_territory,
output_format =>utput_format,
nls_language => :nls_language);
?
说明:
返回值: boolean 类型的变量;
template_appl_name:为请求模板对应的应用简;
template_code :为请求模板的简称,一般与请求的简称相同;
template_language :指运行请求时模板的语言,中文为 ZH,英文为US,此参数必需在挂模板时所选的语言范围内;
template_territory :指语言对应的区域,中国为 CN;
output_format: 指报表输出时的格式类型,如 PDF,EXCEL等;
nls_language: 留空即可。

2、在 result 返回值为 true 时再调用函FND_REQUEST.SUBMIT_REQUEST 来正式提交请求:

ln_request_id := fnd_request.submit_request(application => :application,
program => :program,
Description => :description,
start_time => :start_time,
sub_request => :sub_request,
argument1..100 => :argument1..100);
说明:
返回值:数值类型的变量;
application :指请求对应的应用简称;
program :指请求的简称;
description :指描述,在调用时留空即可;
start_time :指请求开始运行的时间,在调用时留空即可,表示即时执行;
sub_request :指当前请求是否是子请求,一般在调用时赋值 false;
argument1..100: 指调用请求时的参数,最多100个,在form中调用时可在最后一个参数后用 chr(0)来表示为最后一个参数,不用写满100个参数,如果在pl/sql中调用则需要写满100个参数。

3、执行后如果 ln_request_id > 0 表示提交成功,则需要显式执行 commit才可最终提交成功。
如果期间没有显式执行commit导致请求提交后不能立刻执行,而且会导致请求不成功。

4、 还可以使用函数
fnd_concurrent.wait_for_request(request_id IN NUMBER DEFAULT NULL,
???????????????????????????????????????? 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) RETURN BOOLEAN;
说明:
等待并发请求的完成,然后返回请求的阶段、状态以及完成消息。在等待的过程中每隔一段时间检查一下。其中,request_id指并发请求的id,interval指两次检查见等待的秒数,两次检查之间该程序会休息,max_wait指等待并发请求完成所能等待的的最长时间,单位为秒。
补充:
由于Oracle的请求操作时并发处理,执行此函数将很可能等待很长时间,因此,一般不建议使用该函数,其实fnd_request.submit_request函数返回值不为零已经表示成功提交请求了。

5、可以使用过程editor_pkg.report(REQUEST_ID,'Y')来显示成功执行请求之后生成的报表。但是因为Oracle的 并发处理机制,执行此函数将很可能等待很长时间才能够显示生成的报表,因为需要请求完成才能生成相应的报表,才能执行该过程。
例:
PROCEDURE print IS
l_default_language VARCHAR2(20);
l_default_territory VARCHAR2(20);
l_template_code VARCHAR2(200);
request_id NUMBER;
v_layout BOOLEAN;
BEGIN
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 = :print_bank_apy.template_code;
EXCEPTION
WHEN OTHERS THEN
fnd_message.set_name('CUX', 'RTF文件有误!');
fnd_message.error;
RAISE form_trigger_failure;
END;
v_layout := fnd_request.add_layout('CUX', l_template_code, l_default_language, l_default_territory, 'PDF');

request_id := fnd_request.submit_request(
application => 'CUX',
program => 'CUXAPYPNT',
description => NULL,
start_time => NULL,
sub_request => FALSE,
argument1 => :cux_exp_credit_headers.credit_header_id);
commit;
IF request_id IS NULL OR request_id <= 0 THEN
fnd_message.set_name('CUX', '提交合同打印请求出错');
fnd_message.error;
RAISE form_trigger_failure;
ELSE
fnd_message.set_name('CUX', '您提交了开证申请书打印请求,请求号为:' || request_id);
fnd_message.show;
cancle;
END IF;
END;

读书人网 >其他数据库

热点推荐