IMPORTING SALES ORDERS AND/OR RETURNS :
Order Import is an open interface owned by Oracle Order Management. Order Import consists of interface tables and a set of APIs. You can import new, change and completed sales orders or returns from legacy applications, EDI Transactions processed through the Gateway, or internal orders created from Oracle Purchasing’s internal requisitions, or returns. In addition, Order Import provides forms that allow you to query orders from the interface tables, make corrections or changes to the date, and re-initiate the import process. Messages are provided to give you the details why the order did not import.
The features of Order Import include validation and defaulting, processing constraint checks, applying and releasing of order holds, shipment scheduling, then ultimately inserting, updating or deleting the orders in the base Order Management tables. All data is checked for validity during the import process.
Order Import uses the Process Orders API to validate and process order date in the interface tables. Valid transactions are converted into orders with lines, reservations, price adjustments and sales credits.
The following parameter and profile options must be defined in order to use Order Import.
Order Management System Parameter:
– OM: Item Validation Organization
Order Management Profile Options:
– OM: Reservation Time Fence
– OM: Apply Automatic Attachments
Using Interface tables or API’s one can import orders in an entered, booked or closed status. If an order is imported as booked, the order is automatically eligible to progress to the next step the the workflow. If any of the fields required for a booked order are not supplied then Order Management places the order in an entered states and notifies the error.
One can indicate whether you want to manually enter prices for imported orders or allow Order Management to automatically price the order.
If you want to use automatice pricing, set the column OE_LINES_INTERFACE.
CALCULATE_PRICE_FLAG to Calculate Price. All pricing information must be set up in Oracle Pricing and Order Management. If you want to use manual pricing, set the column OE_LINES_INTERFACE. CALCULATE_PRICE_FLAG to Freeze Price. If you want the system to only calculate Freight Charges, set the column OE_LINES_INTERFACE.CALCULATE_PRICE_FLAG to Partial Price.
Order Import can also perform a price comparison on your imported orders. For example, you can provide a selling price and also have the system calculate a price. Order Import will WARN you of any differences. Please see table 24-1 in the Oracle Order Management Implementation Manual for examples of differences in the customer price and system price and how the Calculate Price Flag affects the process.
You can run the Order Import process in validation-only mode. This mode allows the transaction to be validated against all of the Order Management rules but does not pass any valid transactions into the Order Management tables.
The Order Import window consists of the Find and Summary windows. The Find window allows you to find orders to be imported based on certain attributes such as Request ID, Order Source, Original System, Document Reference and Change sequence.
The summary window displays order headers, lines, sales credits, price adjustments, lot serial numbers, reservations and action requests. You can use Oracle Application Folder functionality to limit or display fields. You can perform the following actions from this form:
– modify orders.
– insert, update and delete the orders and lines in the interface tables.
– update one or multiple orders or lines at the same time using the multi-select functionality.
– mark an order or line to be rejected by setting the rejected flag.
– submit a request by selecting Order Import Request and select the appropriate parameter and choose Submit.
Order Import has the following paramters
1. Order Source
2. Order Reference
3. Validate Only
4. Processing Results
Customer items numbers or UPC numbers can be entered in Order Import the same way as a manually entered sales order as long as all cross-reference data is defined before the order import process is run. Set the OE_LINES_IFACE_ALL. CUSTOMER_ITEM_NAME to the ‘item ordered’. If you know what kind of item number it is (for example customer or inventory), you can set the
OE_LINES_IFACE_ALL.CUSTOMER_ITEM_TYPE.
You can import changes and cancellations to existing imported orders by setting the OPERATION_CODE in each of the interface tables. A NULL value is equivalent to INSERT. If you want to make changes, use an OPERATION_CODE of UPDATE. To cancel a line set the OPERATION_CODE to UPDATE and make ordered quantity = 0. To cancel an order in its entirety, set the OPERATION_CODE at the Header to UPDATE and set the CANCEL_FLAG to Y.
Import sales order returns just like you import standard orders choosing an order type that supports return line types. You can also import mixed orders, orders which have both standard sales order lines and return order lines.
To import orders you will need to load the Order Import Interface Tables. In most situations, you will develop a program or script to convert data from the feeder system into the standard format that Order Import is expecting. You can import orders with any external source defined in the Define Document Sequences window.
Oracle Purchasing contains a program, Create Internal Sales Orders, that takes the data from the Purchasing schema for internal requisitions and loads the Order Import tables. The eCommerce Gateway also provides a program, Purchase Order Inbound, that loads the import tables for the Inbound Purchase Order EDI transactions set.
It is recommended that you set up Defaulting Rules in Order Management that will default as much of the order and line information as possible for you environment. This will reduce the amount of data that needs to be populated into the Order Management Interface tables. Please review Note 198900.1 for comprehensive information detailing the definition of Defaulting Rules.
Please tables 2-1 through 2-10 for all required columns and settings.
Overview of Process Order API
Process Order API is a PL/SQL packaged procedure which can be used to manipulate the sales order data by performing Insert, update or delete operation on the following sales Order business object entities. Analogous to other public APIs available to the users), Process Order API also validates the data before inserting them into the application tables.
Though Process Order API has packaged procedures which will insert, update, delete data into the tables, they can not be run on their own. Either they need to be called from another package procedure or can be executed as PL/SQL block via the sql*plus.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Entity Related Table Name ----------------------------- ------------------------ Order Header OE_ORDER_HEADERS_ALL Order Price Adjustments OE_PRICE_ADJUSTMENTS Order Sales Credits OE_SALES_CREDITS Order Line OE_ORDER_LINES_ALL Order Pricing Attributes OE_ORDER_PRICE_ATTRIBS Order Adjustment Attributes OE_PRICE_ADJ_ATTRIBS Order Adjustment Associations OE_PRICE_ADJ_ASSOCS Line Sales Credits OE_SALES_CREDITS Line Price Adjustments OE_PRICE_ADJUSTMENTS Line Pricing Attributes OE_ORDER_PRICE_ATTRIBS Line Adjustment Attributes OE_PRICE_ADJ_ATTRIBS Line Adjustment Associations OE_PRICE_ADJ_ASSOCS Lot Serial Numbers OE_LOT_SERIAL_NUMBERS |
Structure of PL/SQL block to call process Order API
1 2 3 4 5 6 7 8 9 10 |
DECLARE Variable Declaration BEGIN Populate the various specific API parameters --Call to Process Order API OE_ORDER_PUB.Process_order( Standard Parameters Specific Parameters); Exception Handling END; |
Detailed explanation to each of these section is discussed as follows
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
DECLARE /* In Variable declaration section, declare and initialize the various variables used in the pl/sql block can be done here. These entities are used to define INPUT and OUTPUT parameters to Process Order API*/ l_header_rec OE_ORDER_PUB.Header_Rec_Type; l_line_rec OE_ORDER_PUB.line_rec_type; l_action_request_tbl OE_ORDER_PUB.Request_Tbl_Type; l_header_val_rec OE_ORDER_PUB.Header_Val_Rec_Type; l_Header_Adj_tbl OE_ORDER_PUB.Header_Adj_Tbl_Type; l_Header_Adj_val_tbl OE_ORDER_PUB.Header_Adj_Val_Tbl_Type; l_Header_price_Att_tbl OE_ORDER_PUB.Header_Price_Att_Tbl_Type ; l_Header_Adj_Att_tbl OE_ORDER_PUB.Header_Adj_Att_Tbl_Type ; l_Header_Adj_Assoc_tbl OE_ORDER_PUB.Header_Adj_Assoc_Tbl_Type ; l_Header_Scredit_tbl OE_ORDER_PUB.Header_Scredit_Tbl_Type; l_Header_Scredit_val_tbl OE_ORDER_PUB.Header_Scredit_Val_Tbl_Type; l_line_tbl OE_ORDER_PUB.Line_Tbl_Type; l_Request_Tbl OE_ORDER_PUB.Request_Tbl_Type; l_line_val_tbl OE_ORDER_PUB.Line_Val_Tbl_Type; l_Line_Adj_tbl OE_ORDER_PUB.Line_Adj_Tbl_Type; l_Line_Adj_val_tbl OE_ORDER_PUB.Line_Adj_Val_Tbl_Type; l_Line_price_Att_tbl OE_ORDER_PUB.Line_Price_Att_Tbl_Type ; l_Line_Adj_Att_tbl OE_ORDER_PUB.Line_Adj_Att_Tbl_Type ; l_Line_Adj_Assoc_tbl OE_ORDER_PUB.Line_Adj_Assoc_Tbl_Type ; l_Line_Scredit_tbl OE_ORDER_PUB.Line_Scredit_Tbl_Type; l_Line_Scredit_val_tbl OE_ORDER_PUB.Line_Scredit_Val_Tbl_Type; l_Lot_Serial_tbl OE_ORDER_PUB.Lot_Serial_Tbl_Type; l_Lot_Serial_val_tbl OE_ORDER_PUB.Lot_Serial_Val_Tbl_Type; l_request_rec OE_ORDER_PUB.Request_Rec_Type ; -- Initialize the API Version to 1.0 p_api_version_number NUMBER :=1.0; x_return_status VARCHAR2(1); BEGIN --This sets the buffer size so that messages are written to debug file. dbms_output.enable(1000000); /*****************INITIALIZE ENVIRONMENT************************* -- fnd_global.apps_initialize(user_id,responsibility_id ,application_id); /* Pass in user_id, responsibility_id, and application_id here, as the system would need to information while setting the who columns for updating the data in the tables. Also required to set the organization/operating unit context for the system has to see the data in views.*/ fnd_global.apps_initialize(4096,21623,660);-- vision env variables /*This section sets the debug level to 5 so that all messages would be written to the debug file.*/ oe_msg_pub.initialize; oe_debug_pub.initialize; X_DEBUG_FILE := OE_DEBUG_PUB.Set_Debug_Mode('FILE'); oe_debug_pub.SetDebugLevel(5); dbms_output.put_line('START OF NEW DEBUG'); /* The header record is initialized to missing as there would be no header_id exists for the record.Once the header_id is generated by the API, the l_header_rec will take the value of the header_id */ l_header_rec := OE_ORDER_PUB.G_MISS_HEADER_REC; -- Header Attributes l_header_rec.order_type_id := &Order Type ID; l_header_rec.sold_to_org_id := &Sold To Org ID; l_header_rec.ship_to_org_id := &Ship To Org ID; l_header_rec.ship_from_org_id := &Ship From Org ID; l_header_rec.orig_sys_document_ref := &Document Reference; l_header_rec.price_list_id := &Price List ID; -- The statement indicates to the process order API that a new header has to be created. l_header_rec.operation := OE_GLOBALS.G_OPR_CREATE; -- Setting index as 1 to indicate that these belong to 1st line record l_line_tbl_index := 1; -- Initializing the line record to missing l_line_tbl(l_line_tbl_index) := OE_ORDER_PUB.G_MISS_LINE_REC; -- Line Attributes l_line_tbl(l_line_tbl_index).inventory_item_id := &Inventory Item ID; l_line_tbl(l_line_tbl_index).ordered_quantity := &Ordered Quantity; l_line_tbl(l_line_tbl_index).orig_sys_document_ref := &Doc Ref; l_line_tbl(l_line_tbl_index).orig_sys_line_ref := &Line Reference; l_line_tbl(l_line_tbl_index).calculate_price_flag := &Calculate Price Flag; l_line_tbl(l_line_tbl_index).line_type_id := &Line Type ID; -- Indicates that this is a create operation for the line record. l_line_tbl(l_line_tbl_index).operation := OE_GLOBALS.G_OPR_CREATE; -- Indicates that this is an update operation for the line record. l_line_tbl(l_line_tbl_index).operation := OE_GLOBALS.G_OPR_UPDATE; -- Indicates that this is a delete operation for the line record. l_line_tbl(l_line_tbl_index).operation := OE_GLOBALS.G_OPR_DELETE; /*The below action request indicates to the process order that the order has to be booked. */ l_action_request_tbl(1).request_type := oe_globals.g_book_order; l_action_request_tbl(1).entity_code := oe_globals.g_entity_header; -- Call To Process Order API with the required IN and OUT parameters. OE_ORDER_PUB.process_order( ); -- Get the messages generated and print them FOR i IN 1 .. l_msg_count LOOP Oe_Msg_Pub.get( p_msg_index => i , p_encoded => Fnd_Api.G_FALSE , p_data => l_msg_data , p_msg_index_out => l_msg_index_out); DBMS_OUTPUT.PUT_LINE('message is: ' || l_msg_data); DBMS_OUTPUT.PUT_LINE('message index is: ' || l_msg_index_out); END LOOP; /* Check if the process order goes through then it prints the success message, otherwise it prints failed message.*/ IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN dbms_output.put_line('Process Order Success '); ELSE dbms_output.put_line('Failed'); END IF; END; |
Process Order Usage
This section is intended to help the users of the process order API in identifying the required parameters for some common operations and to give an understanding of the business flow behind each of these operations.
CREATE Operation
In order to create new entities in order management using process_order API, it is necessary that the operation OE_GLOBALS.G_OPR_CREATE is passed alone with the necessary entity records and entity tables.
Create an Order with one line:
The following code snippet shows the various attributes required to create an order with one header and line
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
--Create Header record --Initialize header record to missing l_header_rec := OE_ORDER_PUB.G_MISS_HEADER_REC; -- Header Attributes -- Required attributes (e.g. Order Type and Customer) l_header_rec.order_type_id := &Order Type ID; l_header_rec.sold_to_org_id := &Sold To Org ID; -- Other Attributes l_header_rec.transactional_curr_code :=&Trans Currency Code; l_header_rec.pricing_date := &Pricing Date; l_header_rec.cust_po_number := &Customer PO#; l_header_rec.price_list_id : = &Price List ID; l_header_rec.ordered_date := &Ordered Date; l_header_rec.shipping_method_code := &Shipping Method Code; l_header_rec.sold_from_org_id := &Sold from Org ID; l_header_rec.salesrep_id := &Sales Rep ID; l_header_rec.operation := OE_GLOBALS.G_OPR_CREATE; -- Create first line record l_line_tbl_index := 1; -- Initialize line record to missing l_line_tbl(l_line_tbl_index) := OE_ORDER_PUB.G_MISS_LINE_REC; -- Line attributes -- Required Attributes Inventory Item Id, Quantity and Operation l_line_tbl(l_line_tbl_index).inventory_item_id := &Inventory Item ID; l_line_tbl(l_line_tbl_index).ordered_quantity := &Ordered Quantity; l_line_tbl(l_line_tbl_index).ship_from_org_id := &Ship From Org ID; l_line_tbl(l_line_tbl_index).subinventory := &Subinventory Code; l_line_tbl(l_line_tbl_index).operation := OE_GLOBALS.G_OPR_CREATE; |
Adding a new line to an existing order
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
l_line_tbl_index := 1; --This is to add a line to an existing order -- Initialize record to missing l_line_tbl(l_line_tbl_index) := OE_ORDER_PUB.G_MISS_LINE_REC; -- Line attributes -- Required Line Attributes l_line_tbl(l_line_tbl_index).header_id := &Order Header ID; l_line_tbl(l_line_tbl_index).ordered_quantity := &Ordered Quantity; l_line_tbl(l_line_tbl_index).inventory_item_id := &Inventory Item ID; -- Other line attributes l_line_tbl(l_line_tbl_index).ship_from_org_id := &Ship from org ID; l_line_tbl(l_line_tbl_index).subinventory := &Subinventory Code; --Operation set to Create l_line_tbl(l_line_tbl_index).operation := OE_GLOBALS.G_OPR_CREATE; |
IMP Note: It is not possible to insert new lines (or, process any other entity) belonging to different orders in one process order call
UPDATE Operation
In order to update the entities in order management using process_order API, it is necessary that the operation OE_GLOBALS.G_OPR_UPDATE is passed alone with the necessary entity records and entity tables.
Cancelling an existing Order:
In order to cancel an order set the cancelled_flag to Y
The following sections describe the code required to cancel an order.
1 2 3 4 5 6 7 |
--This section is used to cancel a order -- Initialize record to missing l_header_rec := OE_ORDER_PUB.G_MISS_HEADER_REC; l_header_rec.header_id := &Order Header ID; l_header_rec.cancelled_flag := 'Y'; l_header_rec.change_reason := 'Not provided'; l_header_rec.operation := OE_GLOBALS.G_OPR_UPDATE; |
Cancelling an existing Order Line:
In order to cancel an order line, set the cancelled_flag to Y
The following sections describe the code required to cancel an order line.
1 2 3 4 5 6 7 8 9 10 |
--This section is used to cancel an order line l_line_tbl_index := 1; -- Initialize record to missing l_line_tbl(l_line_tbl_index) := OE_ORDER_PUB.G_MISS_LINE_REC; l_line_tbl(l_line_tbl_index).header_id := &Order Header ID; l_line_tbl(l_line_tbl_index).line_id := &Order Line ID; l_line_tbl(l_line_tbl_index).ordered_quantity := &Ordered quantity; l_line_tbl(l_line_tbl_index).cancelled_flag := 'Y'; l_line_tbl(l_line_tbl_index).change_reason := 'Not provided'; l_line_tbl(l_line_tbl_index).operation := OE_GLOBALS.G_OPR_UPDATE; |
Updating the Line Quantity:
Updates or cancels a quantity on a sales Order Line
1 2 3 4 5 6 7 8 |
l_line_tbl_index :=1; -- Changed attributes -- Initialize the line to missing l_line_tbl(l_line_tbl_index) := OE_ORDER_PUB.G_MISS_LINE_REC; l_line_tbl(l_line_tbl_index).ordered_quantity := &Ordered Quantity; -- Primary key of the entity i.e. the order line l_line_tbl(l_line_tbl_index).line_id := &Order Line ID; l_line_tbl(l_line_tbl_index).change_reason := &Change Reason; |
Reserve an existing order line :
Reservation can be done by providing the reserved_quantity to some non zero value.
1 2 3 4 5 6 7 8 |
l_line_tbl_index := 1; -- Initialize line record to missing l_line_tbl(l_line_tbl_index) := OE_ORDER_PUB.G_MISS_LINE_REC; -- Line attributes l_line_tbl(l_line_tbl_index).header_id := &Order Header ID; l_line_tbl(l_line_tbl_index).line_id := &Order Line ID; l_line_tbl(l_line_tbl_index).reserved_quantity := &Reserved Quantity; l_line_tbl(l_line_tbl_index).operation := OE_GLOBALS.G_OPR_UPDATE; |
Unreserve a reserved order line:
Unreservation can be done by reducing reserved quantity or make reserved quantity to zero.
1 2 3 4 5 6 7 8 |
l_line_tbl_index := 1; -- Initialize record to missing l_line_tbl(l_line_tbl_index) := OE_ORDER_PUB.G_MISS_LINE_REC; -- Line attributes l_line_tbl(l_line_tbl_index).header_id := &Order Header ID; l_line_tbl(l_line_tbl_index).line_id := &Order Line ID; l_line_tbl(l_line_tbl_index).reserved_quantity := 0; l_line_tbl(l_line_tbl_index).operation := OE_GLOBALS.G_OPR_UPDATE; |
Splitting an Order Line:
To split an order line using Process_Order API, It is required to pass the following parameters :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
l_header_rec := OE_ORDER_PUB.G_MISS_HEADER_REC; l_header_rec.header_id := &Order Header ID; -- header_id of the order l_header_rec.operation := OE_GLOBALS.G_OPR_UPDATE; l_line_tbl(1) := OE_ORDER_PUB.G_MISS_LINE_REC; l_line_tbl(1).operation := OE_GLOBALS.G_OPR_UPDATE; l_line_tbl(1).split_by := &User ID; -- user_id l_line_tbl(1).split_action_code := 'SPLIT'; l_line_tbl(1).header_id := &Header ID of the Order; -- header_id of the order l_line_tbl(1).line_id := &Line ID of the Order Line; -- line_id of the order line l_line_tbl(1).ordered_quantity := &New Ordered Qty; -- new ordered quantity l_line_tbl(1).change_reason := 'MISC'; -- change reason code l_line_tbl(2) := OE_ORDER_PUB.G_MISS_LINE_REC; l_line_tbl(2).operation := OE_GLOBALS.G_OPR_CREATE; l_line_tbl(2).split_by := &User ID; -- user_id l_line_tbl(2).split_action_code := 'SPLIT'; l_line_tbl(2).split_from_line_id := &Line ID of the Original Line; -- line_id of original line l_line_tbl(2).inventory_item_id := &Inventory Item ID; -- inventory item id l_line_tbl(2).ordered_quantity := &Ordered Qty; -- ordered quantity |
In R12 out parameters are to be used separately .
ie.,instead of x_header_rec => l_header_rec use x_header_rec => p_header_rec and so on for all other OUT parameters.
DELETE Operation
In order to delete the entity record, its necessary to pass the operation like OE_GLOBALS.G_OPR_DELETE. The only attribute which needs to be passed is either the header id or the line id depending on the whether deletion is done for the order or the line. Deletes are cascaded down to the child entities. For example to delete a header record all the child entities i.e. lines, header sales credits, header adjustments are deleted. Deleting the lines results in the deletion of line adjustments, line sales credits and line lot serial numbers as well.
Deletes would also result in the deletion of any holds and attachments associated with the deleted entity and its child entities. The workflow status information for this entity is also purged.
Delete Order:
–This is to delete an order
1 2 3 4 |
l_header_rec := OE_ORDER_PUB.G_MISS_HEADER_REC; l_header_rec.header_id := &Order Header ID; -- Indicate to process order that the order is to be deleted l_header_rec.operation := OE_GLOBALS.G_OPR_DELETE; |
Delete Line:
— This is to delete an order line
1 2 3 4 5 6 |
l_line_tbl_index := 1; --This is to delete an existing order line. l_line_tbl(l_line_tbl_index) := OE_ORDER_PUB.G_MISS_LINE_REC; l_line_tbl(l_line_tbl_index).header_id :=&Order Header ID; l_line_tbl(l_line_tbl_index).line_id := &Order Line ID; l_line_tbl(l_line_tbl_index).operation := OE_GLOBALS.G_OPR_DELETE; |
Other Action Requests
Book Order:
Following are the details of the requests used to book the order
Entity_code –> This should be always set to OE_GLOBALS.G_ENTITY_HEADER as booking is an order level action.
Entity_id –> Header ID of the order to be booked.
If the order is also being created in the same call to process order, then the user does not need to
provide this value.
l_action_request_tbl(l_line_tbl_index).request_type := oe_globals.g_book_order;
l_action_request_tbl(l_line_tbl_index).entity_code := oe_globals.g_entity_header;
l_action_request_tbl(l_line_tbl_index).entity_id := <>;
Apply Hold:
Following are the details of the requests used to apply hold to the sales Order Header or Line depending on the parameters passed to the Process_Order .
Entity_code –> OE_GLOBALS.G_ENTITY_ORDER for order or OE_GLOBALS.G_ENTITY_LINE for line.
Entity_id –> ID of the order or line to be held
Param1 –> Hold ID to identify the type of hold that should be applied. (HOLD_ID from OE_HOLD_DEFINITIONS)
Param2 –> Hold entity code for the hold source to be created.
C: Customer hold source
S: Bill To or Ship To hold source
I: Item hold source
O: Order hold source
W: Warehouse Hold Source
Param3 –> Hold entity ID
C, B, or S: for Org ID
O: Header ID
I: Inventory Item ID
param4 –> Hold comment
date_param1 –> Hold Until Date
parm6-param20 –> Attribute1-15 of the descriptive flex field associated with the hold source record.
l_request_rec.entity_id := &Order Header ID;
l_request_rec.entity_code := OE_GLOBALS.G_ENTITY_HEADER;
l_request_rec.request_type := OE_GLOBALS.G_APPLY_HOLD;
— hold_id must be passed
l_request_rec.param1 := &Hold ID;
— indicator that it is an order hold
l_request_rec.param2 := ‘O’ ;
— Header ID of the order
l_request_rec.param3 := &Order Header ID;
l_action_request_tbl(l_line_tbl_index) := l_request_rec;
Release Hold:
Following are the details of the requests used to release hold from the sales Order Header or Line depending on the parameters passed to the Process_Order .
Entity_code –> OE_GLOBALS.G_ENTITY_HEADER for order or OE_GLOBALS.G_ENTITY_LINE for line.
Entity_id –> ID of the order or line to be released from hold
Param1 –> Hold ID to specify the type of hold that is to be removed.
Param2 –> Hold entity code on the hold source associated with the hold to be released
C: Customer hold source
S: Bill To or Ship To hold source
I: Item hold source
O: Order hold source
W: Warehouse Hold Source
param3 –> Hold entity ID:
C or S: for Org ID
O: Header ID
I: Inventory Item ID
param4 –> Release Reason Code
param5 –> Release Comment
l_request_rec.entity_id := &Order Header ID;
l_request_rec.entity_code := OE_GLOBALS.G_ENTITY_HEADER;
l_request_rec.request_type := OE_GLOBALS.G_RELEASE_HOLD;
— hold_id must be passed
l_request_rec.param1 := &Hold ID;
— indicator that it is an order hold
l_request_rec.param2 := ‘O’ ;
— Header ID of the order
l_request_rec.param3 := &Order Header ID;
l_request_rec.param4 :=’OM_APPROVE’;
l_action_request_tbl(l_line_tbl_index) := l_request_rec;