set serveroutput on;
DECLARE
    l_api_version_number NUMBER := 1;
    l_return_status      VARCHAR2(2000);
    l_msg_count          NUMBER;
    l_msg_data           VARCHAR2(2000);
    l_debug_level        NUMBER := 1; -- OM DEBUG LEVEL (MAX 5)
    i                    number;
    j                    number;
    -- IN Variables --
    l_header_rec oe_order_pub.header_rec_type;
    l_line_tbl oe_order_pub.line_tbl_type;
    l_action_request_tbl oe_order_pub.Request_Tbl_Type;
    -- OUT Variables --
    l_header_rec_out oe_order_pub.header_rec_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_tbl_out oe_order_pub.line_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_msg_index     NUMBER;
    l_data          VARCHAR2(2000);
    l_loop_count    NUMBER;
    l_debug_file    VARCHAR2(200);
    b_return_status VARCHAR2(200);
    b_msg_count     NUMBER;
    b_msg_data      VARCHAR2(2000);
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',204);
    fnd_global.apps_initialize ( user_id => 1318 ,resp_id => 21623 ,resp_appl_id => 660);
    l_header_rec                         := oe_order_pub.G_MISS_HEADER_REC;
    l_header_rec.operation               := OE_GLOBALS.G_OPR_CREATE;
    l_header_rec.order_type_id           := 1437;
    l_header_rec.sold_to_org_id          := 1290;
    l_header_rec.ship_to_org_id          := 1425;
    l_header_rec.invoice_to_org_id       := 1424;
    l_header_rec.sold_from_org_id        :=204;
    l_header_rec.salesrep_id             := 1006;
    l_header_rec.price_list_id           := 1000; --p_price_list_id;--1000;
    l_header_rec.pricing_date            := SYSDATE;
    l_header_rec.transactional_curr_code := 'USD';                                      --p_curr_code;--'USD';
    l_header_rec.flow_status_code        := 'ENTERED';                                  --p_flow_status_code;
    l_header_rec.cust_po_number          := TO_CHAR(sysdate, 'DD-MON-YYYY HH24:MI:SS'); -- p_po_num;--'06112009-08';
    l_header_rec.order_source_id         := 0;                                          --p_order_source_id;--0 ;
    -- To BOOK the Sales Order
    i:=1;
    loop
        l_action_request_tbl(i)              := oe_order_pub.G_MISS_REQUEST_REC;
        l_action_request_tbl(i).request_type := oe_globals.g_book_order;
        l_action_request_tbl(i).entity_code  := oe_globals.g_entity_header;
        l_line_tbl(i)                        := oe_order_pub.G_MISS_LINE_REC;
        l_line_tbl(i).operation              := OE_GLOBALS.G_OPR_CREATE;
        if mod(i,2) = 1 then
            l_line_tbl(i).inventory_item_id := 149; --AS54888
            DBMS_OUTPUT.PUT_LINE('inventory_item_id::: ' || l_line_tbl(i).inventory_item_id);
        else
            l_line_tbl(i).inventory_item_id := 214955; --AS54888
            DBMS_OUTPUT.PUT_LINE('inventory_item_id::: ' || l_line_tbl(i).inventory_item_id);
        end if;
        l_line_tbl(i).ordered_quantity := 1;
        l_line_tbl(i).ship_to_org_id   := 1425;
        l_line_tbl(i).tax_code         := 'Location';
        i                              := i+1;
        EXIT WHEN i > 10;
    end loop;
    dbms_output.put_line('Calling API');
    oe_order_pub.Process_Order( p_api_version_number => l_api_version_number, p_header_rec => l_header_rec, p_line_tbl => l_line_tbl, p_action_request_tbl => l_action_request_tbl,
    --OUT variables
    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_return_status, x_msg_count => l_msg_count, x_msg_data => l_msg_data);
    IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
        dbms_output.put_line('API Return status is success ');
        COMMIT;
    ELSE
        dbms_output.put_line('Return status failure ');
        if (l_debug_level > 0) then
            dbms_output.put_line('failure'||SQLERRM);
        end if;
        ROLLBACK;
    END IF;
    -- Display Return Status
    if (l_debug_level > 0) then
        DBMS_OUTPUT.PUT_LINE('process ORDER ret status IS: ' || l_return_status);
        DBMS_OUTPUT.PUT_LINE('process ORDER msg data IS: ' || l_msg_data);
        DBMS_OUTPUT.PUT_LINE('header.order_number IS: '|| to_char(l_header_rec_out.order_number));
        DBMS_OUTPUT.PUT_LINE('header.header_id IS: ' ||l_header_rec_out.header_id);
        DBMS_OUTPUT.PUT_LINE('header.order_source_id IS: '|| l_header_rec_out.order_source_id);
        DBMS_OUTPUT.PUT_LINE('header.flow_status_code IS: '|| l_header_rec_out.flow_status_code);
    end if;
    --Display ERROR Messages
    IF (l_debug_level > 0) THEN
        FOR i IN 1 .. l_msg_count
        LOOP
            l_data := oe_msg_pub.get( p_msg_index => i, p_encoded => 'F');
            dbms_output.put_line( i|| ') '|| l_data);
        END LOOP;
    END IF;
    IF (l_debug_level > 0) THEN
        OE_DEBUG_PUB.DEBUG_OFF;
    END IF;
END;