最近开发一个从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;