最近开发一个从PLM系统中通过工作流程向ORACLE ERP系统中导入项目信息的程序,Oracle ERP系统有独立的请求模块,所以这样我们只需调用到ERP模块中的请求即可,由于PLM系统用的是windchill,底层代码是JAVA程序,并且从PLM系统中导出的数据需要经过验证后才能正式导入ERP,所以采用了使用JAVA调用存储过程的方式,过程为:
1. PLM导出文件流数据;
2. PLM系统导出数据导入Oracle ERP系统中临时表;
3. 验证临时表中数据;
4. 临时表导入ERP接口表;
5. 提交单个请求或请求集。
下面是如何提交单个请求代码,希望对大家有帮助。网络上有些文章在对参数是否作为子请求提交解释有错误,大家在使用时建议多看一下Oracle官方文档,以免使用过程中造成错误。
PROCEDURE prc_do_import_request(prm_org IN NUMBER,
prm_appcode OUT NUMBER,
prm_appmsg OUT VARCHAR2) IS
custom_exception EXCEPTION;
success BOOLEAN;
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);
BEGIN
prm_appcode := 0;
--初始化设置
fnd_global.apps_initialize(user_id => global_user_id,--用户ID
resp_id => global_resp_id, --责任ID
resp_appl_id => global_resp_appl_id); --应用ID
--设置打印参数
success := fnd_request.set_print_options(printer => global_printer,
style => global_style,
copies => global_copies);
IF NOT success THEN
RAISE custom_exception;
END IF;
v_start_time := to_char(SYSDATE, 'DD-MON-YYYY HH24:MI:SS');
--调用请求
v_request_id := fnd_request.submit_request('INV', --应用
'INCOIN', --程序
'', --程序说明
v_start_time, --开始时间
FALSE, --是否作为子请求提交,该请求如果是被其它请求调用设为TRUE,否则为FALSE
prm_org, --自定义参数1:组织机构
'1', --自定义参数2 :
'1', --自定义参数3:
'1', --自定义参数4:
'1', --自定义参数5:
'1', --自定义参数6:
'1', --自定义参数7:
chr(0)); --结束标识
IF v_request_id = 0 THEN
RAISE custom_exception;
ELSE
COMMIT;
END IF;
--等待
v_request_flag := fnd_concurrent.wait_for_request(request_id => v_request_id,--返回的请求ID
INTERVAL => 5, --重复检测时间差
max_wait => 0, --最长等待时间,0为一直等待
phase => v_phase,
status => v_status,
dev_phase => v_dev_phase,
dev_status => v_dev_status,
message => v_message);
IF v_request_flag THEN
IF v_dev_status = 'NORMAL' THEN
NULL;
ELSE
RAISE custom_exception;
END IF;
ELSE
RAISE custom_exception;
END IF;
EXCEPTION
WHEN custom_exception THEN
prm_appcode := -1;
prm_appmsg := '错误提示:导入ERP正式表出错!' || SQLERRM;
WHEN OTHERS THEN
prm_appcode := -1;
prm_appmsg := '错误提示:导入ERP正式表出错!' || SQLERRM;
END prc_do_import_request;