All insights

Modernization

Anatomy of an OAF to APEX rebuild: a page by page walkthrough

15 July 202612 min readBy Datpire

Quick answers

Can Oracle OAF pages be converted to APEX automatically?
No. There is no reliable automated conversion. OAF pages are rebuilt, not converted, because business logic frequently lives in controller code that has to be read and understood by an engineer.
Will an APEX page respect EBS security and MOAC?
Yes, if it is built correctly. The APEX application must set org context, honour responsibility and function security, and be registered so it launches from EBS with a shared session.
How long does it take to rebuild one OAF page in APEX?
A straightforward page with a single primary function and standard data access is small enough to be fixed-price. Complex pages are assessed first, because effort is driven by hidden logic, not by screen size.
Does an APEX rebuild survive EBS patching?
It does when it is built against a dedicated custom schema using views and supported public APIs rather than writing directly to base tables. That discipline is what keeps it upgrade-safe.

Most articles about OAF to APEX migration stay at slide level. They talk about strategy, roadmaps and target architectures, and they stop somewhere near the phrase "iterative modernization". This one does the opposite. It walks a single OAF page end to end, in the order the work actually happens, so that a head of applications or an Oracle programme manager can see what an OAF page conversion really involves before signing anything.

One note up front. This is an illustrative composite based on how Oracle Application Framework modernization work is actually done on live EBS estates. It is not a case study of a named client. There are no invented metrics and no timeline claims. The intent is to describe the shape of the work honestly, in the language a senior Oracle engineer would use when talking to another engineer.

Step one: discovery, or reading what is actually there

The starting point of any OAF to APEX rebuild is not a whiteboard. It is a checkout of the custom top and a search for the page you have been asked to replace. You open the page definition, the controller class, the application module, the view objects and the entity objects that back it, and then you start reading. This is the least glamorous part of the work and it is also where most of the risk lives.

OAF was designed so that business logic could live in the model layer, in AMs and EOs, but in practice a large amount of it ends up in the controller. Validation that should have been an EO rule sits as an inline check in processFormRequest. A default that should have been on the VO gets set from a request parameter. An integration call that should have been a database package is fired directly from a controller method after a button click. None of this is a criticism of the original developers. It is what happens over ten or fifteen years of small changes by different people under delivery pressure.

So the first job in discovery is not to design the new page. It is to write down what the current page actually does, in prose, with the code open next to you. Every branch in the controller. Every condition on a region. Every SPEL expression that hides a rule. Every AM method that mutates state. It is entirely normal to find behaviour that nobody documented, and occasionally to find behaviour that nobody remembers requesting. That inventory is the deliverable of discovery. Without it, the rebuild is guessing.

Step two: mapping the OAF page onto APEX

Once you know what the page does, you decide what it should become. APEX has its own vocabulary of pages, regions, items, processes, validations, dynamic actions and computations, and the mapping from OAF is rarely one to one. A tabbed OAF page might become a single APEX page with multiple regions, or two APEX pages depending on how independent the tabs are. A table region backed by a VO becomes an interactive grid or a classic report, depending on whether the users actually need to edit inline. A LOV becomes a select list or a popup LOV. A partial page refresh becomes a dynamic action.

The more important mapping decision is where the logic lives. Anything that is genuinely business logic belongs in PL/SQL, not in APEX processes and not in JavaScript. That means packages in the custom schema, with clear input parameters, well defined exceptions and no hidden dependencies on session state. APEX processes then become thin wrappers that call those packages. This gives you code that can be unit tested outside APEX, that survives an APEX upgrade unchanged, and that a future engineer can read without loading the APEX builder.

The other decision, and the one clients most often miss, is what to drop. A rebuild is a chance to remove features, not just to translate them. If a field on the OAF page has not been populated in three years, do not build it in APEX. If a workflow branch fires only for a legal entity that was divested, cut it. If a validation was added to work around a bug that has since been fixed, retire it. Every line of custom code you do not carry forward is a line you never have to test, patch or explain again.

Step three: rebuilding it in APEX, correctly

The rebuild itself is where discipline pays back. The rules we hold to on every OAF to APEX migration are the same rules Oracle publishes for building custom applications against EBS.

  • A dedicated custom database schema for the new application, with its own objects, and no code deployed into APPS.
  • Views over EBS base tables rather than direct SELECT from base tables in application code, so that a future EBS patch that renames or restructures a base table can be absorbed in one place.
  • All DML through supported public APIs where they exist, for example the standard package APIs for AP invoices, GL journals, INV transactions and HR records. Writing to base tables is a shortcut that costs you support and integrity.
  • No hardcoded IDs and no assumptions about internal sequences. Everything looks up by code or by name and lets the database supply the id.
  • All committed work wrapped in transactions with explicit savepoints so that a failure in a downstream call does not leave the row half updated.

None of this is exotic. All of it is what separates an APEX customization that survives future EBS release update packs from one that breaks on the next quarterly patch.

Step four: EBS integration, without cutting corners

This is the step that decides whether users experience the new page as a natural part of EBS or as a bolt on. APEX EBS integration has three pieces that must all be right.

The first is context. An APEX page that touches EBS data must set org context and honour Multi-Org Access Control before it queries anything. That means calling the standard APIs to set client info based on the responsibility the user launched from, and re-setting it on every APEX request. Pages that read cleanly in one operating unit and quietly return the wrong rows in another almost always fail this check.

The second is security. The APEX application must honour EBS responsibility and function security. A user who does not have the function attached to their responsibility should not see the menu entry, should not be able to reach the page by URL, and should not be able to invoke the underlying PL/SQL. This is checked in APEX authorisation schemes that call back into EBS security, not by hiding buttons in JavaScript.

The third is launch. The APEX application should be registered in EBS as a function so that it launches from the EBS home page or menu with a shared session, not as a separate login with its own username and password. Oracle publishes a supported integration approach for EBS 12.2 with APEX for exactly this. It should be followed rather than improvised. Users notice a second login. They complain about it, and rightly.

Step five: parallel run and cutover

The last step before retirement is the parallel run. The old OAF page and the new APEX page run against the same production data, ideally for a defined number of business cycles, with a small group of users driving both. The point is not that users prefer the new page, though they usually do. The point is that the outputs agree. Journals posted match. Invoices created match. Interface files produced match, byte for byte where possible. Only when the numbers agree do you turn the OAF customization off, and even then you keep it deployable for one cycle in case something surfaces.

What usually goes wrong

Every OAF to APEX rebuild we do surfaces at least some of the following. None of them are exotic. All of them are why a serious scoping exercise matters.

  • Business logic hidden in the controller that nobody documented, discovered only when the parallel run disagrees on a specific edge case.
  • A single OAF page that is used by two different departments in two different ways, with a controller that quietly branches on the responsibility. The rebuild has to preserve both flows or split them into two APEX pages.
  • Validation that exists only client side in the OAF page, so the underlying table happily accepts data that the users have never actually been allowed to enter. That validation has to be recreated server side in PL/SQL, not just in APEX.
  • Assumptions about org context that only appear when a second operating unit uses the page, typically a GCC entity added years after the original build.
  • Integrations firing from the page that nobody mentioned in scoping, because they were considered part of the background rather than part of the page. A payment file, a notification, an interface trigger.
  • Users who have built workarounds around the old page's quirks, sometimes for years. The new page has to either preserve the quirk or the users have to be told, clearly and in advance, that the workaround is going away.

Why the pilot is priced the way it is

This is why our OAF to APEX pilot is offered as a fixed-price rebuild of one straightforward OAF page, and why we assess complex pages first before quoting them. A page with two departments, three integrations and undocumented controller logic is not a straightforward page. Quoting one before reading the code is either optimistic or dishonest, and neither is a good way to start an engagement. The pilot exists so that a client can see how we actually work on one page, agree the pattern, and then decide with real information which pages come next.

If you have OAF pages you want to retire, the honest first step is a conversation about what they actually do, followed by a written assessment. That is what our OAF to APEX service is built around, and it is what keeps the rest of the programme grounded in reality rather than in slide decks.

Share this article

Want to talk about this in your environment?

30 minute call with a senior Oracle engineer. No sales layer.

Follow Datpire on LinkedIn for more Oracle engineering notes.