Introduction: In Oracle Apps R12 Order Management, users create Sales Orders using the Sales Order Form (OEXOEORD). By default, the form allows users to select any Order Type assigned to their responsibility. In real-time business scenarios, this flexibility can lead to incorrect Order Type selection, which may result in downstream issues such as incorrect pricing, wrong workflow execution, accounting impact, or fulfillment errors.
The issue addressed in this blog is the lack of control on Order Type selection for specific users, responsibilities, or business scenarios within the Sales Order form.
Cause of the issue: In many Oracle EBS implementations, different Order Types are designed for different business purposes, such as:
- Domestic Sales Orders
- Export Sales Orders
- Free-of-Charge (FOC) Orders
- Sample Orders
- Internal Orders
However, users may accidentally select an incorrect Order Type due to:
- Similar naming conventions
- Lack of validation at the form level
- Multiple Order Types being visible to all users
How do we solve: We use Oracle Forms Personalization to restrict the Order Type LOV and enforce validation rules without any custom code. The solution consists of multiple personalization rules as detailed below.
Step 1: Create a new personalization
Navigate to:
Order Management Super User → Sales Order → Open Sales Order Form (OEXOEORD)
Then go to:
Help → Diagnostics → Custom Code → Personalize
Step 2 – Create a new Rule (XX Order Type LOV Restriction)
Add a new row:
| Seq | Description | Level | Enabled |
| 65 | XX Order Type LOV Restriction | Function | ✔ |
Conditions Tab
| Trigger Event | WHEN-NEW-ITEM-INSTANCE |
| Trigger Object | ORDER.ORDER_TYPE |
| Processing Mode | Not in Enter-Query Mode |
Context
| Level | Value |
| Responsibility | XX Product Management |
| Responsibility | XX New Product Management |
Actions Tab
| Seq | Type | Enabled |
| 10 | Builtin | ✔ |
| 20 | Property | ✔ |
Seq 10 – Builtin
| Builtin Type | Create Record Group from Query |
| Argument |
Select ORDER_TYPE_ID, NAME, DESCRIPTION from oe_order_types_v where upper(name) like upper(‘%Samples%’) |
| Group Name | XX_SAMPLE_ORDER_TYPES |
Seq 20 – Property
| Order Type | LOV |
| Target Object | ORDER_TYPE |
| Property Name | Group Name |
| Value | XX_SAMPLE_ORDER_TYPES |
Save and Validate.
Go to: Tools → Validate All.
Step 3 – Create another Rule (XX Order Type Restriction – Update)
Add a new row:
| Seq | Description | Level | Enabled |
| 70 | XX Order Type Restriction – Update | Function | ✔ |
Conditions Tab
| Trigger Event | WHEN-VALIDATE-RECORD |
| Trigger Object | ORDER |
| Condition |
UPPER(:ORDER.ORDER_TYPE) NOT LIKE UPPER(‘%SAMPLES%’) AND fnd_global.resp_id IN (53015, 50207) |
| Processing Mode | Both |
Actions Tab
| Seq | Type | Enabled |
| 10 | Message | ✔ |
Seq 10 – Message
| Message Type | Error |
| Message Text | You are not authorized to use Order Types other than ‘Samples%’. |
Save and Validate.
Go to: Tools → Validate All.
Step 4 – Create another Rule (XX Order Type Restriction – Update/Lines)
Add a new row:
| Seq | Description | Level | Enabled |
| 75 | XX Order Type Restriction – Update/Lines | Function | ✔ |
Conditions Tab
| Trigger Event | WHEN-VALIDATE-RECORD |
| Trigger Object | LINE |
| Condition |
UPPER(:ORDER.ORDER_TYPE) NOT LIKE UPPER(‘%SAMPLES%’) AND fnd_global.resp_id IN (53015, 50207) |
| Processing Mode | Both |
Actions Tab
| Seq | Type | Enabled |
| 10 | Message | ✔ |
Seq 10 – Message
| Message Type | Error |
| Message Text | You are not authorized to use Order Types other than ‘Samples%’. |
Save and Validate.
Go to: Tools → Validate All.
Conclusion: Using Forms Personalization, we effectively controlled Order Type selection in Oracle Apps R12 without any code customization. This approach:
- Prevents incorrect order creation
- Ensures business process compliance
- Reduces operational errors and rework
- Remains upgrade-safe and easy to maintain
This solution demonstrates how a simple personalization can deliver significant business impact while adhering to Oracle best practices.