這個程式,根據輸入的參數可以自動處理WIP_MOVE_TXN_INTERFACE表。
雖然一般都是排一個“WIP 移動交易處理管理器”定期處理,但是個人認為這樣子處理還是有一定的滯後性。使用者想操作完畢立刻看到效果,但是老要等上幾分鐘。
所以專門開發了這個自動處理的程式。也是蠻實用。
邏輯也很簡單,就是自動認可一個“WIP 移動交易處理工作流程”處理對應GROUP_ID的資料。
代碼也共用出來:
-----------------------------
--處理介面表,可選處理方式
-----------------------------
PROCEDURE PROCESS_MOVE_TXN_INTERFACE(
P_PROCESS_TYPE VARCHAR2 ---處理方式,目前只有 提交請求 SUBMIT_REQUEST 希望以後有 立刻過賬 PROCESS_ONLINE
,P_GROUP_ID NUMBER ---處理的組ID
,x_REQUEST_ID OUT NUMBER --輸出的請求ID
,x_retcode OUT NUMBER ---0:成功 非0:失敗( 或者:0:成功 1:警告 2:錯誤 ----注意:確定警告的時候要做什麼動作)
,x_errbuf OUT VARCHAR2 ---具體的錯誤資訊
)
IS
L_PROCESS_PHASE NUMBER; --標識程式的進度
---
L_REQUEST_ID NUMBER;
---
BEGIN
x_retcode := 0;
x_errbuf := Null;
L_PROCESS_PHASE := 0;
---首先的第一步是:檢查不可以為空白的參數
IF P_PROCESS_TYPE IS NULL OR P_GROUP_ID IS NULL
THEN
x_errbuf := '調用PROCESS_MOVE_TXN_INTERFACE的時候,必要的參數不存在,請檢查參數!';
x_retcode := 2;
RETURN;
END IF;
L_PROCESS_PHASE := 1;
------------Start------------
IF P_PROCESS_TYPE = 'SUBMIT_REQUEST' THEN
---自動認可過賬的請求
---WIP 移動交易處理工作流程
-----WIP Move Transaction Worker
L_REQUEST_ID :=
FND_REQUEST.SUBMIT_REQUEST( 'WIP', -- application
'WICTWS', -- program
NULL,
NULL, -- start_time (optional)
FALSE, -- sub_request
to_char(P_GROUP_ID), -- Group id to process
'1', -- 貌似都給1,不知道什麼情況下給2,需要驗證。
'2400', -- 貌似都給2400
'1', -- 貌似都給1
chr(0)
);
L_PROCESS_PHASE := 2;
dbms_output.PUT_LINE('自動產生的請求ID:'||L_REQUEST_ID);
IF L_REQUEST_ID = 0 THEN
x_errbuf := '自動認可請求失敗!';
x_retcode := 2;
RETURN;
ELSE
x_errbuf := x_errbuf||'自動認可請求成功!請求ID:'||L_REQUEST_ID;
END IF;
x_REQUEST_ID := L_REQUEST_ID;
L_PROCESS_PHASE := 3;
ELSIF P_PROCESS_TYPE = 'PROCESS_ONLINE' THEN
x_errbuf := '目前程式不支援處理方式:('||P_PROCESS_TYPE||')!請檢查參數!';
x_retcode := 2;
RETURN;
L_PROCESS_PHASE := 5;
ELSE
x_errbuf := '參數P_PROCESS_TYPE('||P_PROCESS_TYPE||')無效,請檢查參數!';
x_retcode := 2;
RETURN;
END IF;
------------End--------------
L_PROCESS_PHASE := 6;
EXCEPTION
WHEN OTHERS
THEN
x_retcode := 2;
x_errbuf :=
'P_PROCESS_TYPE:'
|| P_PROCESS_TYPE
|| ' P_GROUP_ID:'
|| P_GROUP_ID
|| ' 產生移動交易處理的時候有異常錯誤!'
|| CHR(10)
|| '錯誤資訊:'
|| TO_CHAR(SQLCODE)
|| '-'
|| SQLERRM
|| CHR(10)
|| '程式進度:'
|| L_PROCESS_PHASE;
----可以適當編寫:如果錯誤,另外還需要處理的SQL
---因為如果前面有做UPDATE/INSERT/DELETE動作,雖然是跳到異常,但是,這動作不會自動復原的。
END;
--------------------------測試部分:
DECLARE
L_RETCODE NUMBER;
L_ERRBUF VARCHAR2(4000);
---
L_GROUP_ID NUMBER;
L_REQUEST_ID NUMBER;
---
BEGIN
fnd_client_info.set_org_context(104);
fnd_global.APPS_Initialize( user_id=>5954, resp_id=>52054, resp_appl_id =>20003);
L_GROUP_ID := 9999;
---立刻過賬
XYG_PUB_WIP_PKG.PROCESS_MOVE_TXN_INTERFACE('SUBMIT_REQUEST',L_GROUP_ID,L_REQUEST_ID,L_RETCODE,L_ERRBUF);
dbms_output.PUT_LINE(L_RETCODE || '-' || L_ERRBUF);
IF L_RETCODE = 0 THEN
dbms_output.PUT_LINE('成功產生請求ID:' || L_REQUEST_ID);
COMMIT;
ELSE
dbms_output.PUT_LINE('過賬有異常問題發生!'||L_ERRBUF);
ROLLBACK;
END IF;
END;