DECLARE P_TYPE_NUMBER NUMBER := 0; --IN --10 取消訂單 、20 變更交期 、30 變更付款條件 P_BPM_APPLY_NAME VARCHAR2(50) :='XXX'; --IN Oracle Account Name P_OU_ID NUMBER := 136; --IN Oracle OU ID P_HEADER_ID NUMBER := 1234; --IN Oracle OOHA.HEADER_ID P_LINE_ID NUMBER := 5678; --IN Oracle OOLA.HEADER_ID P_STATUS_CODE VARCHAR2(500); --OUT Status P_DATA VARCHAR2(10) := NULL; --P_TYPE_NUMBER NUMBER := 0; --IN --10 取消訂單 、20 變更交期 、30 變更付款條件 --P_BPM_APPLY_NAME VARCHAR2(50); --IN V_BPM_APPLY_ID NUMBER; V_SCHEDULE_SHIP_DATE DATE; V_NEW_SCHEDULE_SHIP_DATE DATE; V_API_VERSION_NUMBER NUMBER := 1; V_RETURN_STATUS VARCHAR2(2000); V_MSG_COUNT NUMBER; V_MSG_DATA VARCHAR2(2000); L_DEBUG_LEVEL NUMBER := 1; L_DEBUG_FILE VARCHAR2(100); -- IN Variables V_HEADER_REC OE_ORDER_PUB.HEADER_REC_TYPE; V_LINE_TBL OE_ORDER_PUB.LINE_TBL_TYPE; V_ACTION_REQUEST_TBL OE_ORDER_PUB.REQUEST_TBL_TYPE; V_LINE_ADJ_TBL OE_ORDER_PUB.LINE_ADJ_TBL_TYPE; --OUT Variables V_HEADER_REC_OUT OE_ORDER_PUB.HEADER_REC_TYPE; V_HEADER_VAL_REC_OUT OE_ORDER_PUB.HEADER_VAL_REC_TYPE; V_HEADER_ADJ_TBL_OUT OE_ORDER_PUB.HEADER_ADJ_TBL_TYPE; V_HEADER_ADJ_VAL_TBL_OUT OE_ORDER_PUB.HEADER_ADJ_VAL_TBL_TYPE; V_HEADER_PRICE_ATT_TBL_OUT OE_ORDER_PUB.HEADER_PRICE_ATT_TBL_TYPE; V_HEADER_ADJ_ATT_TBL_OUT OE_ORDER_PUB.HEADER_ADJ_ATT_TBL_TYPE; V_HEADER_ADJ_ASSOC_TBL_OUT OE_ORDER_PUB.HEADER_ADJ_ASSOC_TBL_TYPE; V_HEADER_SCREDIT_TBL_OUT OE_ORDER_PUB.HEADER_SCREDIT_TBL_TYPE; V_HEADER_SCREDIT_VAL_TBL_OUT OE_ORDER_PUB.HEADER_SCREDIT_VAL_TBL_TYPE; V_LINE_TBL_OUT OE_ORDER_PUB.LINE_TBL_TYPE; V_LINE_VAL_TBL_OUT OE_ORDER_PUB.LINE_VAL_TBL_TYPE; V_LINE_ADJ_TBL_OUT OE_ORDER_PUB.LINE_ADJ_TBL_TYPE; V_LINE_ADJ_VAL_TBL_OUT OE_ORDER_PUB.LINE_ADJ_VAL_TBL_TYPE; V_LINE_PRICE_ATT_TBL_OUT OE_ORDER_PUB.LINE_PRICE_ATT_TBL_TYPE; V_LINE_ADJ_ATT_TBL_OUT OE_ORDER_PUB.LINE_ADJ_ATT_TBL_TYPE; V_LINE_ADJ_ASSOC_TBL_OUT OE_ORDER_PUB.LINE_ADJ_ASSOC_TBL_TYPE; V_LINE_SCREDIT_TBL_OUT OE_ORDER_PUB.LINE_SCREDIT_TBL_TYPE; V_LINE_SCREDIT_VAL_TBL_OUT OE_ORDER_PUB.LINE_SCREDIT_VAL_TBL_TYPE; V_LOT_SERIAL_TBL_OUT OE_ORDER_PUB.LOT_SERIAL_TBL_TYPE; V_LOT_SERIAL_VAL_TBL_OUT OE_ORDER_PUB.LOT_SERIAL_VAL_TBL_TYPE; V_ACTION_REQUEST_TBL_OUT OE_ORDER_PUB.REQUEST_TBL_TYPE; PRAGMA AUTONOMOUS_TRANSACTION; BEGIN IF (L_DEBUG_LEVEL > 0) THEN L_DEBUG_FILE := OE_DEBUG_PUB.SET_DEBUG_MODE('FILE'); OE_DEBUG_PUB.INITIALIZE; OE_DEBUG_PUB.SETDEBUGLEVEL(L_DEBUG_LEVEL); OE_MSG_PUB.INITIALIZE; END IF; MO_GLOBAL.INIT('ONT'); --MO_GLOBAL.SET_POLICY_CONTEXT('S', 136); --136 OU_ID MO_GLOBAL.SET_POLICY_CONTEXT('S', P_OU_ID); --136 OU_ID IF P_TYPE_NUMBER = 10 THEN FND_GLOBAL.APPS_INITIALIZE(0, 50530, 660); ELSIF P_TYPE_NUMBER = 20 THEN BEGIN SELECT USER_ID INTO V_BPM_APPLY_ID FROM FND_USER WHERE USER_NAME = P_BPM_APPLY_NAME; EXCEPTION WHEN NO_DATA_FOUND THEN V_BPM_APPLY_ID := 0; --因無介接關係,如找不到先壓0 END; FND_GLOBAL.APPS_INITIALIZE(V_BPM_APPLY_ID, 50530, 660); END IF; V_ACTION_REQUEST_TBL(1) := OE_ORDER_PUB.G_MISS_REQUEST_REC; IF P_TYPE_NUMBER = 10 THEN --Cancel a Line Record V_LINE_TBL(1) := OE_ORDER_PUB.G_MISS_LINE_REC; V_LINE_TBL(1).OPERATION := OE_GLOBALS.G_OPR_UPDATE; V_LINE_TBL(1).HEADER_ID := P_HEADER_ID; --2200108; --91122050119 V_LINE_TBL(1).LINE_ID := P_LINE_ID; --3589805; V_LINE_TBL(1).ORDERED_QUANTITY := 0; V_LINE_TBL(1).CANCELLED_FLAG := 'Y'; V_LINE_TBL(1).CANCELLED_QUANTITY := 0; V_LINE_TBL(1).CHANGE_REASON := 'B14交期超過30天'; --依照規格書定義取消原因 ELSIF P_TYPE_NUMBER = 20 THEN --因工作曆設定工作日為星期一到星期五,當作後一天遇到六日時會回推到星期五 SELECT NVL(OOLA.SCHEDULE_SHIP_DATE, SYSDATE) INTO V_SCHEDULE_SHIP_DATE FROM OE_ORDER_LINES_ALL OOLA WHERE OOLA.HEADER_ID = P_HEADER_ID AND OOLA.LINE_ID = P_LINE_ID; --SELECT ADD_MONTHS(NVL(OOLA.SCHEDULE_SHIP_DATE, SYSDATE), 1) INTO V_NEW_SCHEDULE_SHIP_DATE FROM OE_ORDER_LINES_ALL OOLA WHERE OOLA.HEADER_ID = P_HEADER_ID AND OOLA.LINE_ID = P_LINE_ID; IF V_SCHEDULE_SHIP_DATE > SYSDATE THEN V_NEW_SCHEDULE_SHIP_DATE := V_SCHEDULE_SHIP_DATE + 30; ELSE V_NEW_SCHEDULE_SHIP_DATE := SYSDATE + 30; END IF; --Change Schedule_Ship_Date V_LINE_TBL(1) := OE_ORDER_PUB.G_MISS_LINE_REC; V_LINE_TBL(1).OPERATION := OE_GLOBALS.G_OPR_UPDATE; V_LINE_TBL(1).HEADER_ID := P_HEADER_ID; --2200108; --91122050119 V_LINE_TBL(1).LINE_ID := P_LINE_ID; --3589807; --V_LINE_TBL(1).SCHEDULE_SHIP_DATE := TO_DATE('2022/11/11 23:59:59','YYYY/MM/DD HH24:MI:SS'); V_LINE_TBL(1).SCHEDULE_SHIP_DATE := V_NEW_SCHEDULE_SHIP_DATE; --begin v1.02 add ELSIF p_type_number = 30 THEN fnd_global.apps_initialize(0, 50530, 660); --Change Schedule_Ship_Date v_line_tbl(1) := oe_order_pub.g_miss_line_rec; v_line_tbl(1).operation := oe_globals.g_opr_update; v_line_tbl(1).header_id := p_header_id; v_line_tbl(1).line_id := p_line_id; BEGIN SELECT term_id INTO v_line_tbl(1).payment_term_id FROM ra_terms WHERE name = p_data AND (end_date_active IS NULL OR end_date_active >= trunc(sysdate)); EXCEPTION WHEN no_data_found THEN NULL; END; --end v1.02 add ELSE NULL; END IF; DBMS_OUTPUT.PUT_LINE('Starting of API'); --Calling the API to cancel a line from an Existing Order OE_ORDER_PUB.PROCESS_ORDER(P_API_VERSION_NUMBER => V_API_VERSION_NUMBER, P_HEADER_REC => V_HEADER_REC, P_LINE_TBL => V_LINE_TBL, P_ACTION_REQUEST_TBL => V_ACTION_REQUEST_TBL, P_LINE_ADJ_TBL => V_LINE_ADJ_TBL, --OUT VARIABLES, X_HEADER_REC => V_HEADER_REC_OUT, X_HEADER_VAL_REC => V_HEADER_VAL_REC_OUT, X_HEADER_ADJ_TBL => V_HEADER_ADJ_TBL_OUT, X_HEADER_ADJ_VAL_TBL => V_HEADER_ADJ_VAL_TBL_OUT, X_HEADER_PRICE_ATT_TBL => V_HEADER_PRICE_ATT_TBL_OUT, X_HEADER_ADJ_ATT_TBL => V_HEADER_ADJ_ATT_TBL_OUT, X_HEADER_ADJ_ASSOC_TBL => V_HEADER_ADJ_ASSOC_TBL_OUT, X_HEADER_SCREDIT_TBL => V_HEADER_SCREDIT_TBL_OUT, X_HEADER_SCREDIT_VAL_TBL => V_HEADER_SCREDIT_VAL_TBL_OUT, X_LINE_TBL => V_LINE_TBL_OUT, X_LINE_VAL_TBL => V_LINE_VAL_TBL_OUT, X_LINE_ADJ_TBL => V_LINE_ADJ_TBL_OUT, X_LINE_ADJ_VAL_TBL => V_LINE_ADJ_VAL_TBL_OUT, X_LINE_PRICE_ATT_TBL => V_LINE_PRICE_ATT_TBL_OUT, X_LINE_ADJ_ATT_TBL => V_LINE_ADJ_ATT_TBL_OUT, X_LINE_ADJ_ASSOC_TBL => V_LINE_ADJ_ASSOC_TBL_OUT, X_LINE_SCREDIT_TBL => V_LINE_SCREDIT_TBL_OUT, X_LINE_SCREDIT_VAL_TBL => V_LINE_SCREDIT_VAL_TBL_OUT, X_LOT_SERIAL_TBL => V_LOT_SERIAL_TBL_OUT, X_LOT_SERIAL_VAL_TBL => V_LOT_SERIAL_VAL_TBL_OUT, X_ACTION_REQUEST_TBL => V_ACTION_REQUEST_TBL_OUT, X_RETURN_STATUS => V_RETURN_STATUS, X_MSG_COUNT => V_MSG_COUNT, X_MSG_DATA => V_MSG_DATA); DBMS_OUTPUT.PUT_LINE('Completion of API'); IF V_RETURN_STATUS = FND_API.G_RET_STS_SUCCESS THEN --begin v1.02 add IF p_type_number = 30 THEN UPDATE oe_order_headers_all ooha SET payment_term_id = v_line_tbl(1).payment_term_id WHERE header_id = p_header_id; END IF; --end v1.02 add COMMIT; DBMS_OUTPUT.PUT_LINE('Order is Success'); P_STATUS_CODE := 'S'; ELSE ROLLBACK; DBMS_OUTPUT.PUT_LINE('Order failed:' || V_MSG_DATA); P_STATUS_CODE := 'F'; FOR I IN 1 .. V_MSG_COUNT LOOP V_MSG_DATA := OE_MSG_PUB.GET(P_MSG_INDEX => I, P_ENCODED => 'F'); DBMS_OUTPUT.PUT_LINE(I || ') ' || V_MSG_DATA); END LOOP; END IF; END;
2022-12-29
[Oracle]OM API
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言