在PL/SQL中呼叫Oracle ERP請求(一)-提交單個請求
阿新 • • 發佈:2019-01-05
最近開發一個從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;