直接就貼 Sample Code 上來 (以 Update "Schedule Ship Date" 為例)
DECLARE
L_USER_ID NUMBER;
L_RESP_ID NUMBER;
L_APPL_ID NUMBER;
L_HEADER_REC_IN OE_ORDER_PUB.HEADER_REC_TYPE;
L_LINE_TBL_IN OE_ORDER_PUB.LINE_TBL_TYPE;
L_ACTION_REQUEST_TBL_IN OE_ORDER_PUB.REQUEST_TBL_TYPE;
L_HEADER_REC_OUT OE_ORDER_PUB.HEADER_REC_TYPE;
L_LINE_TBL_OUT OE_ORDER_PUB.LINE_TBL_TYPE;
L_HEADER_VAL_REC_OUT OE_ORDER_PUB.HEADER_VAL_REC_TYPE;
L_HEADER_ADJ_TBL_OUT OE_ORDER_PUB.HEADER_ADJ_TBL_TYPE;
L_HEADER_ADJ_VAL_TBL_OUT OE_ORDER_PUB.HEADER_ADJ_VAL_TBL_TYPE;
L_HEADER_PRICE_ATT_TBL_OUT OE_ORDER_PUB.HEADER_PRICE_ATT_TBL_TYPE;
L_HEADER_ADJ_ATT_TBL_OUT OE_ORDER_PUB.HEADER_ADJ_ATT_TBL_TYPE;
L_HEADER_ADJ_ASSOC_TBL_OUT OE_ORDER_PUB.HEADER_ADJ_ASSOC_TBL_TYPE;
L_HEADER_SCREDIT_TBL_OUT OE_ORDER_PUB.HEADER_SCREDIT_TBL_TYPE;
L_HEADER_SCREDIT_VAL_TBL_OUT OE_ORDER_PUB.HEADER_SCREDIT_VAL_TBL_TYPE;
L_LINE_VAL_TBL_OUT OE_ORDER_PUB.LINE_VAL_TBL_TYPE;
L_LINE_ADJ_TBL_OUT OE_ORDER_PUB.LINE_ADJ_TBL_TYPE;
L_LINE_ADJ_VAL_TBL_OUT OE_ORDER_PUB.LINE_ADJ_VAL_TBL_TYPE;
L_LINE_PRICE_ATT_TBL_OUT OE_ORDER_PUB.LINE_PRICE_ATT_TBL_TYPE;
L_LINE_ADJ_ATT_TBL_OUT OE_ORDER_PUB.LINE_ADJ_ATT_TBL_TYPE;
L_LINE_ADJ_ASSOC_TBL_OUT OE_ORDER_PUB.LINE_ADJ_ASSOC_TBL_TYPE;
L_LINE_SCREDIT_TBL_OUT OE_ORDER_PUB.LINE_SCREDIT_TBL_TYPE;
L_LINE_SCREDIT_VAL_TBL_OUT OE_ORDER_PUB.LINE_SCREDIT_VAL_TBL_TYPE;
L_LOT_SERIAL_TBL_OUT OE_ORDER_PUB.LOT_SERIAL_TBL_TYPE;
L_LOT_SERIAL_VAL_TBL_OUT OE_ORDER_PUB.LOT_SERIAL_VAL_TBL_TYPE;
L_ACTION_REQUEST_TBL_OUT OE_ORDER_PUB.REQUEST_TBL_TYPE;
L_CHR_PROGRAM_UNIT_NAME VARCHAR2 (100);
L_CHR_RET_STATUS VARCHAR2 (1000) := NULL;
L_MSG_COUNT NUMBER := 0;
L_MSG_DATA VARCHAR2 (2000);
L_NUM_API_VERSION NUMBER := 1.0;
CURSOR C_SO_DETAILS IS
SELECT OH.HEADER_ID
, OL.LINE_ID
, OH.ORDER_NUMBER AS SO_NUMBER
, MSI.SEGMENT1
, OL.LINE_NUMBER || '.' || OL.SHIPMENT_NUMBER AS LINE
, OL.INVENTORY_ITEM_ID
FROM OE_ORDER_HEADERS_ALL OH
, OE_ORDER_LINES_ALL OL
, MTL_SYSTEM_ITEMS MSI
WHERE 0 = 0
AND OH.HEADER_ID = OL.HEADER_ID
AND OL.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
AND MSI.ORGANIZATION_ID = OL.SHIP_FROM_ORG_ID
AND OL.LINE_ID = 1
;
BEGIN
SELECT USER_ID
INTO L_USER_ID
FROM FND_USER
WHERE USER_NAME = 'ABC'
;
SELECT RESPONSIBILITY_ID
, APPLICATION_ID
INTO L_RESP_ID
, L_APPL_ID
FROM FND_RESPONSIBILITY_VL
WHERE RESPONSIBILITY_NAME LIKE 'Order Management Super User'
;
FND_GLOBAL.APPS_INITIALIZE (L_USER_ID, L_RESP_ID, L_APPL_ID);
FOR ISO_REC IN C_SO_DETAILS LOOP
L_LINE_TBL_IN (1) := OE_ORDER_PUB.G_MISS_LINE_REC;
L_LINE_TBL_IN (1).LINE_ID := ISO_REC.LINE_ID;
L_LINE_TBL_IN (1).SCHEDULE_SHIP_DATE := SYSDATE; --TO_DATE(ISO_REC.UPDATE_SSD,'DD-MON-RRRR HH24:MI:SS');
L_LINE_TBL_IN (1).OPERATION := OE_GLOBALS.G_OPR_UPDATE;
OE_MSG_PUB.DELETE_MSG;
OE_ORDER_PUB.PROCESS_ORDER (
P_API_VERSION_NUMBER => L_NUM_API_VERSION
, P_INIT_MSG_LIST => FND_API.G_FALSE
, P_RETURN_VALUES => FND_API.G_FALSE
, P_ACTION_COMMIT => FND_API.G_FALSE
, P_LINE_TBL => L_LINE_TBL_IN
, X_HEADER_REC => L_HEADER_REC_OUT
, X_HEADER_VAL_REC => L_HEADER_VAL_REC_OUT
, X_HEADER_ADJ_TBL => L_HEADER_ADJ_TBL_OUT
, X_HEADER_ADJ_VAL_TBL => L_HEADER_ADJ_VAL_TBL_OUT
, X_HEADER_PRICE_ATT_TBL => L_HEADER_PRICE_ATT_TBL_OUT
, X_HEADER_ADJ_ATT_TBL => L_HEADER_ADJ_ATT_TBL_OUT
, X_HEADER_ADJ_ASSOC_TBL => L_HEADER_ADJ_ASSOC_TBL_OUT
, X_HEADER_SCREDIT_TBL => L_HEADER_SCREDIT_TBL_OUT
, X_HEADER_SCREDIT_VAL_TBL => L_HEADER_SCREDIT_VAL_TBL_OUT
, X_LINE_TBL => L_LINE_TBL_OUT
, X_LINE_VAL_TBL => L_LINE_VAL_TBL_OUT
, X_LINE_ADJ_TBL => L_LINE_ADJ_TBL_OUT
, X_LINE_ADJ_VAL_TBL => L_LINE_ADJ_VAL_TBL_OUT
, X_LINE_PRICE_ATT_TBL => L_LINE_PRICE_ATT_TBL_OUT
, X_LINE_ADJ_ATT_TBL => L_LINE_ADJ_ATT_TBL_OUT
, X_LINE_ADJ_ASSOC_TBL => L_LINE_ADJ_ASSOC_TBL_OUT
, X_LINE_SCREDIT_TBL => L_LINE_SCREDIT_TBL_OUT
, X_LINE_SCREDIT_VAL_TBL => L_LINE_SCREDIT_VAL_TBL_OUT
, X_LOT_SERIAL_TBL => L_LOT_SERIAL_TBL_OUT
, X_LOT_SERIAL_VAL_TBL => L_LOT_SERIAL_VAL_TBL_OUT
, X_ACTION_REQUEST_TBL => L_ACTION_REQUEST_TBL_OUT
, X_RETURN_STATUS => L_CHR_RET_STATUS
, X_MSG_COUNT => L_MSG_COUNT
, X_MSG_DATA => L_MSG_DATA
);
L_MSG_DATA := NULL;
IF L_CHR_RET_STATUS <> 'S' THEN
FOR IINDX IN 1 .. L_MSG_COUNT LOOP
L_MSG_DATA := L_MSG_DATA || ' ' || OE_MSG_PUB.GET (IINDX);
END LOOP;
END IF;
DBMS_OUTPUT.ENABLE (10000);
DBMS_OUTPUT.PUT_LINE ('Sales Order => ' || ISO_REC.SO_NUMBER || ' - Line Number => ' || ISO_REC.LINE);
DBMS_OUTPUT.PUT_LINE ('Return Status: ' || L_CHR_RET_STATUS);
DBMS_OUTPUT.PUT_LINE ('Error Message: ' || L_MSG_DATA);
END LOOP;
COMMIT;
END;
DECLARE
L_USER_ID NUMBER;
L_RESP_ID NUMBER;
L_APPL_ID NUMBER;
L_HEADER_REC_IN OE_ORDER_PUB.HEADER_REC_TYPE;
L_LINE_TBL_IN OE_ORDER_PUB.LINE_TBL_TYPE;
L_ACTION_REQUEST_TBL_IN OE_ORDER_PUB.REQUEST_TBL_TYPE;
L_HEADER_REC_OUT OE_ORDER_PUB.HEADER_REC_TYPE;
L_LINE_TBL_OUT OE_ORDER_PUB.LINE_TBL_TYPE;
L_HEADER_VAL_REC_OUT OE_ORDER_PUB.HEADER_VAL_REC_TYPE;
L_HEADER_ADJ_TBL_OUT OE_ORDER_PUB.HEADER_ADJ_TBL_TYPE;
L_HEADER_ADJ_VAL_TBL_OUT OE_ORDER_PUB.HEADER_ADJ_VAL_TBL_TYPE;
L_HEADER_PRICE_ATT_TBL_OUT OE_ORDER_PUB.HEADER_PRICE_ATT_TBL_TYPE;
L_HEADER_ADJ_ATT_TBL_OUT OE_ORDER_PUB.HEADER_ADJ_ATT_TBL_TYPE;
L_HEADER_ADJ_ASSOC_TBL_OUT OE_ORDER_PUB.HEADER_ADJ_ASSOC_TBL_TYPE;
L_HEADER_SCREDIT_TBL_OUT OE_ORDER_PUB.HEADER_SCREDIT_TBL_TYPE;
L_HEADER_SCREDIT_VAL_TBL_OUT OE_ORDER_PUB.HEADER_SCREDIT_VAL_TBL_TYPE;
L_LINE_VAL_TBL_OUT OE_ORDER_PUB.LINE_VAL_TBL_TYPE;
L_LINE_ADJ_TBL_OUT OE_ORDER_PUB.LINE_ADJ_TBL_TYPE;
L_LINE_ADJ_VAL_TBL_OUT OE_ORDER_PUB.LINE_ADJ_VAL_TBL_TYPE;
L_LINE_PRICE_ATT_TBL_OUT OE_ORDER_PUB.LINE_PRICE_ATT_TBL_TYPE;
L_LINE_ADJ_ATT_TBL_OUT OE_ORDER_PUB.LINE_ADJ_ATT_TBL_TYPE;
L_LINE_ADJ_ASSOC_TBL_OUT OE_ORDER_PUB.LINE_ADJ_ASSOC_TBL_TYPE;
L_LINE_SCREDIT_TBL_OUT OE_ORDER_PUB.LINE_SCREDIT_TBL_TYPE;
L_LINE_SCREDIT_VAL_TBL_OUT OE_ORDER_PUB.LINE_SCREDIT_VAL_TBL_TYPE;
L_LOT_SERIAL_TBL_OUT OE_ORDER_PUB.LOT_SERIAL_TBL_TYPE;
L_LOT_SERIAL_VAL_TBL_OUT OE_ORDER_PUB.LOT_SERIAL_VAL_TBL_TYPE;
L_ACTION_REQUEST_TBL_OUT OE_ORDER_PUB.REQUEST_TBL_TYPE;
L_CHR_PROGRAM_UNIT_NAME VARCHAR2 (100);
L_CHR_RET_STATUS VARCHAR2 (1000) := NULL;
L_MSG_COUNT NUMBER := 0;
L_MSG_DATA VARCHAR2 (2000);
L_NUM_API_VERSION NUMBER := 1.0;
CURSOR C_SO_DETAILS IS
SELECT OH.HEADER_ID
, OL.LINE_ID
, OH.ORDER_NUMBER AS SO_NUMBER
, MSI.SEGMENT1
, OL.LINE_NUMBER || '.' || OL.SHIPMENT_NUMBER AS LINE
, OL.INVENTORY_ITEM_ID
FROM OE_ORDER_HEADERS_ALL OH
, OE_ORDER_LINES_ALL OL
, MTL_SYSTEM_ITEMS MSI
WHERE 0 = 0
AND OH.HEADER_ID = OL.HEADER_ID
AND OL.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
AND MSI.ORGANIZATION_ID = OL.SHIP_FROM_ORG_ID
AND OL.LINE_ID = 1
;
BEGIN
SELECT USER_ID
INTO L_USER_ID
FROM FND_USER
WHERE USER_NAME = 'ABC'
;
SELECT RESPONSIBILITY_ID
, APPLICATION_ID
INTO L_RESP_ID
, L_APPL_ID
FROM FND_RESPONSIBILITY_VL
WHERE RESPONSIBILITY_NAME LIKE 'Order Management Super User'
;
FND_GLOBAL.APPS_INITIALIZE (L_USER_ID, L_RESP_ID, L_APPL_ID);
FOR ISO_REC IN C_SO_DETAILS LOOP
L_LINE_TBL_IN (1) := OE_ORDER_PUB.G_MISS_LINE_REC;
L_LINE_TBL_IN (1).LINE_ID := ISO_REC.LINE_ID;
L_LINE_TBL_IN (1).SCHEDULE_SHIP_DATE := SYSDATE; --TO_DATE(ISO_REC.UPDATE_SSD,'DD-MON-RRRR HH24:MI:SS');
L_LINE_TBL_IN (1).OPERATION := OE_GLOBALS.G_OPR_UPDATE;
OE_MSG_PUB.DELETE_MSG;
OE_ORDER_PUB.PROCESS_ORDER (
P_API_VERSION_NUMBER => L_NUM_API_VERSION
, P_INIT_MSG_LIST => FND_API.G_FALSE
, P_RETURN_VALUES => FND_API.G_FALSE
, P_ACTION_COMMIT => FND_API.G_FALSE
, P_LINE_TBL => L_LINE_TBL_IN
, X_HEADER_REC => L_HEADER_REC_OUT
, X_HEADER_VAL_REC => L_HEADER_VAL_REC_OUT
, X_HEADER_ADJ_TBL => L_HEADER_ADJ_TBL_OUT
, X_HEADER_ADJ_VAL_TBL => L_HEADER_ADJ_VAL_TBL_OUT
, X_HEADER_PRICE_ATT_TBL => L_HEADER_PRICE_ATT_TBL_OUT
, X_HEADER_ADJ_ATT_TBL => L_HEADER_ADJ_ATT_TBL_OUT
, X_HEADER_ADJ_ASSOC_TBL => L_HEADER_ADJ_ASSOC_TBL_OUT
, X_HEADER_SCREDIT_TBL => L_HEADER_SCREDIT_TBL_OUT
, X_HEADER_SCREDIT_VAL_TBL => L_HEADER_SCREDIT_VAL_TBL_OUT
, X_LINE_TBL => L_LINE_TBL_OUT
, X_LINE_VAL_TBL => L_LINE_VAL_TBL_OUT
, X_LINE_ADJ_TBL => L_LINE_ADJ_TBL_OUT
, X_LINE_ADJ_VAL_TBL => L_LINE_ADJ_VAL_TBL_OUT
, X_LINE_PRICE_ATT_TBL => L_LINE_PRICE_ATT_TBL_OUT
, X_LINE_ADJ_ATT_TBL => L_LINE_ADJ_ATT_TBL_OUT
, X_LINE_ADJ_ASSOC_TBL => L_LINE_ADJ_ASSOC_TBL_OUT
, X_LINE_SCREDIT_TBL => L_LINE_SCREDIT_TBL_OUT
, X_LINE_SCREDIT_VAL_TBL => L_LINE_SCREDIT_VAL_TBL_OUT
, X_LOT_SERIAL_TBL => L_LOT_SERIAL_TBL_OUT
, X_LOT_SERIAL_VAL_TBL => L_LOT_SERIAL_VAL_TBL_OUT
, X_ACTION_REQUEST_TBL => L_ACTION_REQUEST_TBL_OUT
, X_RETURN_STATUS => L_CHR_RET_STATUS
, X_MSG_COUNT => L_MSG_COUNT
, X_MSG_DATA => L_MSG_DATA
);
L_MSG_DATA := NULL;
IF L_CHR_RET_STATUS <> 'S' THEN
FOR IINDX IN 1 .. L_MSG_COUNT LOOP
L_MSG_DATA := L_MSG_DATA || ' ' || OE_MSG_PUB.GET (IINDX);
END LOOP;
END IF;
DBMS_OUTPUT.ENABLE (10000);
DBMS_OUTPUT.PUT_LINE ('Sales Order => ' || ISO_REC.SO_NUMBER || ' - Line Number => ' || ISO_REC.LINE);
DBMS_OUTPUT.PUT_LINE ('Return Status: ' || L_CHR_RET_STATUS);
DBMS_OUTPUT.PUT_LINE ('Error Message: ' || L_MSG_DATA);
END LOOP;
COMMIT;
END;


