Part 1: How to Attach a Custom LOV in an Oracle Standard OAF Page (Without Customization or Extension)
Introduction
Oracle E-Business Suite provides standard OAF pages for common business processes, such as Supplier Creation. In many cases, you may need to attach a custom List of Values (LOV) to a field on a standard Oracle page to meet specific business requirements — for example, to let users select a supplier from a custom list during supplier creation.
The challenge is that standard Oracle pages are seeded and should not be modified directly. However, OAF provides a way to attach a custom LOV without performing any customization or extension on the standard page itself. Instead, you create the LOV objects in JDeveloper, register them in Oracle Applications, and then attach them through Personalization.
This guide is split into two parts:
Part 1 (this article): Creating the custom LOV region, View Object, and Application Module in JDeveloper, and registering them in Oracle Applications
Part 2: Attaching the custom LOV to the standard page through Personalization
Part 2 Reference: (Link to Part 2)
Test Case: Attaching a Custom Supplier LOV to the Supplier Creation Page
Business Requirement: During supplier creation in the standard Oracle OAF page, users should be able to select a supplier from a custom LOV instead of manually entering the supplier number.
We will create a custom LOV region that displays:
External Supplier Number (
ExternalSupplierNo)Supplier Name (
SupplierName)
The Four Key Activities
To attach a custom LOV to a standard OAF page, you need to complete four key activities:
| # | Activity | Purpose |
|---|---|---|
| 1 | Create the View Object (VO) | Provides the data for the LOV |
| 2 | Create the Application Module (AM) | Container that manages access to the VO |
| 3 | Create the LOV Region (RG) | Defines the popup window and its layout |
| 4 | Register/Import the Objects | Makes the custom objects available in Oracle Applications |
Note: The actual attachment to the standard page is done through Personalization (covered in Part 2).
Prerequisites
Before you begin, ensure the following:
Oracle JDeveloper is installed and configured with a valid Runtime Connection
Database Connection is established
You have an EBS user account with the necessary responsibilities
Access to the Oracle server to run the XML Importer script
The standard Supplier Creation page is accessible in your EBS environment
Step 1: Create the Workspace and Project
Create a New OA Workspace:
Right-click on Applications
Select New OA Workspace
Workspace Name:
RohitExternalLOVClick OK
Configure the Project:
Project Name:
RohitExternalLOVDefault Package:
oracle.apps.xxap.RohitExternalLOV
Important: Notice the package prefix
xxap(instead ofap). Thexxprefix is the standard convention for customizations in Oracle E-Business Suite. It distinguishes your custom code from Oracle's seeded code and ensures your changes are preserved during upgrades.
Enter Runtime Connection Details:
Provide your EBS Username and Password
Complete the Wizard:
Click Next, then click Finish
Result: Your workspace and project are now created.
Step 2: Create the LOV Region
The LOV Region defines the popup window that appears when the user clicks the LOV icon.
Open the New Gallery:
Right-click on the project RohitExternalLOV
Select New
Select Region:
Navigate to OA Components → Region
Click OK
Configure the Region:
Region Name:
RohitExternalLOVRGPackage:
oracle.apps.xxap.RohitExternalLOV.webui
Important: Choose the package directory carefully. The
webuidirectory is where all user interface components (regions, pages) are stored in OAF.
Complete the Region Creation:
Click OK to create the region
The region structure appears in the Structure pane
Note: The region is created with the
ListOfValuestyle by default when you create it as an LOV region.
Step 3: Create the View Object
The View Object provides the data that will populate the LOV.
Open the New Gallery:
Right-click on the project RohitExternalLOV
Select New
Select View Object:
Navigate to ADF Business Components → View Object
Click OK
Configure the View Object:
View Object Name:
RohitExternalLOVVOPackage:
oracle.apps.xxap.RohitExternalLOV.server
Note: The
serverdirectory is where all server-side business logic components (VOs, EOs, AMs) are stored in OAF.
Define the Query:
At Step 5 (Query), enter the SQL query that will select values for your LOV. For example:
SELECT vendor_id, segment1 AS external_supplier_no, vendor_name AS supplier_name FROM po_vendors WHERE NVL(disabled_flag, 'N') = 'N'
Tip: The query should return the columns you want to display in the LOV. In this example, we return the vendor ID, supplier number (Segment1), and supplier name.
Complete the Wizard:
Click Next, then click Finish
The View Object is now created
Step 4: Create the Application Module
The Application Module is the container that manages access to the View Object.
Open the New Gallery:
Right-click on the project RohitExternalLOV
Select New
Select Application Module:
Navigate to ADF Business Components → Application Module
Click OK
Configure the Application Module:
Application Module Name:
RohitExternalLOVAMPackage:
oracle.apps.xxap.RohitExternalLOV.server
Add the View Object:
At Step 2 of the wizard, select RohitExternalLOVVO from the Available list
Shuttle it to the Selected list
Click Next, then click Finish
Result: The Application Module is now created with
RohitExternalLOVVOattached.
Step 5: Build the LOV Region Structure
Now we add the table and items to the LOV region to define its layout.
Open the Region:
In the Application Navigator, open RohitExternalLOVRG
Add a Table:
Right-click on RohitExternalLOVRG in the Structure pane
Select New → Table
A table object is created under the region
Rename the Table:
Click on the table object
In the Property Inspector, change the ID to
RohitExternalLOV
Add the First Item:
Right-click on the table RohitExternalLOV
Select New → messageStyledText
An item (item1) is created
Configure the First Item:
Click on item1
In the Property Inspector, set:
| Property | Value |
|---|---|
| ID | ExternalSupplierNo |
| Prompt | External Supplier No |
Add the Second Item:
Right-click on the table RohitExternalLOV
Select New → messageStyledText
An item (item1) is created
Configure the Second Item:
| Property | Value |
|---|---|
| ID | SupplierName |
| Prompt | Supplier Name |
Result: The LOV region structure now contains a table with two columns:
ExternalSupplierNoandSupplierName.
Step 6: Attach the Application Module to the Region
Select the Region:
Click on the top-level region RohitExternalLOVRG
Set the AM Definition:
In the Property Inspector, under BC4J, set the AM Definition to:
oracle.apps.xxap.RohitExternalLOV.server.RohitExternalLOVAM
Important: The LOV region must have its own Application Module to access the View Object data.
Step 7: Bind the Items to the View Object
Now we bind each item in the LOV table to a View Object attribute.
Configure Item1 (ExternalSupplierNo):
Click on ExternalSupplierNo
In the Property Inspector, set:
View Instance:
RohitExternalLOVVOView Attribute:
ExternalSupplierNo
Configure Item2 (SupplierName):
Click on SupplierName
In the Property Inspector, set:
View Instance:
RohitExternalLOVVOView Attribute:
SupplierName
Result: Each item in the LOV table is now bound to a specific attribute of the View Object. This determines what data is displayed in each column of the LOV popup.
Step 8: Register/Import the Custom Objects in Oracle Applications
Now that all objects are created in JDeveloper, we need to deploy them to the Oracle server and register them in Oracle Applications.
8.1 Upload the Objects to Java_Top
Copy the following XML files to the Oracle server under $JAVA_TOP:
$JAVA_TOP/oracle/apps/xxap/RohitExternalLOV/RohitExternalLOVVO.xml $JAVA_TOP/oracle/apps/xxap/RohitExternalLOV/RohitExternalLOVAM.xml $JAVA_TOP/oracle/apps/xxap/RohitExternalLOV/RohitExternalLOVRG.xml
Note: Ensure the directory structure matches the package path exactly.
8.2 Run the XML Importer Script
Run the following commands to import the custom objects into Oracle Applications:
Import the View Object:
java oracle.jrad.tools.xml.importer.XMLImporter \ $JAVA_TOP/oracle/apps/xxap/RohitExternalLOV/RohitExternalLOVVO.xml \ -rootdir $JAVA_TOP \ -username apps \ -password apps \ -dbconnection "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=1223))(CONNECT_DATA=(SERVICE_NAME=service_name)))"
Import the Application Module:
java oracle.jrad.tools.xml.importer.XMLImporter \
$JAVA_TOP/oracle/apps/xxap/RohitExternalLOV/RohitExternalLOVAM.xml \
-rootdir $JAVA_TOP \
-username apps \
-password apps \
-dbconnection "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=1223))(CONNECT_DATA=(SERVICE_NAME=service_name)))"Import the LOV Region:
java oracle.jrad.tools.xml.importer.XMLImporter \
$JAVA_TOP/oracle/apps/xxap/RohitExternalLOV/RohitExternalLOVRG.xml \
-rootdir $JAVA_TOP \
-username apps \
-password apps \
-dbconnection "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=1223))(CONNECT_DATA=(SERVICE_NAME=service_name)))"Script Parameters
| Parameter | Description |
|---|---|
XMLImporter | The Java class that performs the import |
$JAVA_TOP/.../RohitExternalLOVVO.xml | The path to the XML file to import |
-rootdir $JAVA_TOP | The root directory for the import |
-username apps | The APPS database username |
-password apps | The APPS database password |
-dbconnection "..." | The database connection string |
Important: Replace
host_name,PORT, andservice_namewith your actual database connection details. The XML Importer registers the objects in theJDR_ATTRIBUTESandJDR_PATHStables, making them available to the OAF framework at runtime.
Understanding the LOV Architecture
The following illustrates how the custom LOV components work together:
┌─────────────────────────────────────────────────────────────────┐ │ LOV REGION (RohitExternalLOVRG) │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ Table: RohitExternalLOV │ │ │ │ ┌─────────────────────┬─────────────────────────────┐ │ │ │ │ │ ExternalSupplierNo │ SupplierName │ │ │ │ │ ├─────────────────────┼─────────────────────────────┤ │ │ │ │ │ 1001 │ Supplier A │ │ │ │ │ │ 1002 │ Supplier B │ │ │ │ │ │ 1003 │ Supplier C │ │ │ │ │ └─────────────────────┴─────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ AM Definition: RohitExternalLOVAM │ │ View Instance: RohitExternalLOVVO │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ APPLICATION MODULE (RohitExternalLOVAM) │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ Contains: RohitExternalLOVVO │ │ │ └─────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ VIEW OBJECT (RohitExternalLOVVO) │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ Query: SELECT vendor_id, segment1, vendor_name │ │ │ │ FROM po_vendors │ │ │ │ WHERE NVL(disabled_flag, 'N') = 'N' │ │ │ └─────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘
Component Roles
| Component | Role | Key Property |
|---|---|---|
| LOV Region | Defines the popup window and layout | Region Style = ListOfValue |
| Table | Displays the LOV results in a grid | Region Style = table |
| Items | Display individual columns | View Instance, View Attribute |
| Application Module | Manages access to the View Object | AM Definition |
| View Object | Provides the data for the LOV | SQL Query |
Best Practices
| Practice | Description |
|---|---|
Use the xx Prefix | Always use the standard customization prefix |
| Organize LOV Objects | Keep LOV objects in a dedicated directory |
| Use Meaningful Names | Name VOs, AMs, and Regions descriptively |
| Optimize Queries | Ensure VO queries are efficient and return only necessary columns |
| Filter Data | Apply appropriate WHERE clauses to exclude disabled records |
| Test in Development | Always test LOV objects in a development environment |
| Document Object Paths | Keep a record of all XML file paths for reference |
| Use Version Control | Store custom objects in a version control system |
Troubleshooting Common Issues
| Issue | Possible Cause | Solution |
|---|---|---|
| LOV region not found | Wrong package path | Verify the package matches the directory structure |
| VO not found | Import failed | Re-run the XML Importer script |
| AM not found | Import failed | Re-run the XML Importer script |
| LOV shows no data | Wrong SQL query | Test the query directly in the database |
| Items show no data | View Attribute not bound | Verify each item's View Instance and View Attribute |
| Import fails | Wrong database connection | Verify the host, port, and service name |
| Permission denied | Insufficient privileges | Ensure the APPS user has the required privileges |
What's Next (Part 2)
Now that you have created and registered the custom LOV objects, Part 2 of this guide will cover:
Navigating to the Standard Page: Opening the Supplier Creation page
Opening Personalization: Accessing the personalization interface
Attaching the LOV: Configuring the standard field to use the custom LOV
Setting the LOV Mapping: Mapping the LOV return values to the page fields
Testing: Verifying that the custom LOV appears and functions correctly
Summary
Creating a custom LOV for a standard OAF page involves the following key steps:
Create the Workspace and Project: Set up the development environment with the
xxprefixCreate the LOV Region: Define the popup window with
ListOfValuestyleCreate the View Object: Define the SQL query for the LOV data
Create the Application Module: Add the View Object to the AM
Build the LOV Structure: Add a table and items to the LOV region
Bind the Items: Connect each item to a View Object attribute
Register/Import: Run the XML Importer script to deploy the objects
Key Points to Remember
The
xxprefix distinguishes custom objects from Oracle seeded objectsThe LOV Region uses the
ListOfValueregion styleThe View Object provides the data for the LOV
The Application Module manages access to the View Object
The XML Importer registers the objects in Oracle Applications
The Personalization (Part 2) attaches the LOV to the standard page
Why This Matters
Attaching a custom LOV to a standard Oracle page without customization or extension is a powerful technique because it:
Preserves Oracle Code: No modifications to seeded Oracle objects
Survives Upgrades: Customizations remain intact after patches and upgrades
Follows Standards: Uses Oracle's official extension mechanisms
Is Maintainable: Clear separation between standard and custom code
Is Reversible: Can be easily removed or disabled if needed
Is Quick to Implement: Can be set up without extensive development
By mastering this technique, you can extend standard Oracle E-Business Suite pages to meet business requirements without compromising the integrity of the Oracle environment.
References
Part 1: How to Attach Custom LOV in Oracle Standard OAF Page — (Original Blog Link)
Part 2: Attaching the Custom LOV to the Standard Page (Continued) — (Original Blog Link)
Oracle E-Business Suite Documentation: OA Framework Developer's Guide
Oracle E-Business Suite Documentation: Personalization Guide
Oracle JDeveloper Documentation: Available in the
jdevdocfolderRelated Guides: Creating an LOV in OAF, OAF VO Extension, Controller Extension in OAF, Using SPEL in OAF
No comments:
Post a Comment