# Oracle Application Framework

Oracle Application Framework (OA Framework or OAF) is a proprietary framework developed by Oracle Corporation for application development within the Oracle E-Business Suite (EBS). The framework is also available to customers for personalizations, customizations and custom-application development.
The OA Framework is a Model-view-controller (MVC) framework built using Java EE technologies.

## Self Service Purpose

This Framework helps to create Self Service pages in Oracle EBS.
These pages are designed to be familiar to web-based users, and easy to deploy within a web browser (requiring no plugin or download, unlike Oracle Forms). As such, they are often expected to require no support or training for users, are more user friendly, and result in better performance over the internet and a faster transaction rate.
The OA Framework helps in building the presentation layer, adding the business logic and controlling the flow of the application.

## Architecture

Oracle Application Framework (OAF) is an architecture for creating web based front end pages and J2EE type of applications within the Oracle EBS ERP platform. In order to develop and maintain OAF functionality, Oracle's JDeveloper tool is used. OAF is based on J2EE technology called BC4J (Business Components for Java). As per the MVC architecture, in OAF, the XML Page forms the View, the JAVA based controller class forms the controller and the Application Module along with View Objects (VO) and Schema Objects (EO) forms the Model

## Framework Structure

OA Framework works on basic Java EE principles, and the mainstay is the MVC architecture,

### Model View Controller

The Model is the place containing the business logic. The View is the presentation layer. The Controller manages the flow between pages. Most web-based applications work on these principles. Similar architecture is replicated in OA framework.
Every application has a package some location on the Application Server where all the code is held, there are basically three types of location within a given package path:
* Server (The BC4J Components, R12 uses ADFbc)
* Webui (Web user interface components)
* Schema (Entity objects)
Server files
* Application Module (AM)
* AM Impl (Java file)
* AM XML
2. View objects (VO) a.) VO Impl (Java file) b.) VO Row Impl (Java file) c.) VO xml
3. Server.xml
Webui files
1. Page
2. Regions 3. Controllers (CO)
Schema Server files
1. Entity object files.
If a package is created at the path oracle/fnd/pa/projects then
All the server files will be under: oracle/fnd/pa/projects/server
All the Webui files will be under: oracle/fnd/pa/projects/webui
All the EO will be under: oracle/fnd/pa/projects/schema/server
Page and Region (PG and RN)
It represents the View layer of the MVC architecture, it is the creation of the page that is rendered on front end, every component on that page like input text box, Lov’s, submit buttons and all other components are part of a bean that is defined in the system, each of these page is stored in the file system tables in the database, whenever any page is called the components are called from the database and rendered.
Application Module (AM)
It is a very important component for the package, it is the one which governs the entire session pool, access to database and the business logic components, every page should be attached to some AM.
View Object (VO)
In cases where one just want some data just for view purpose and want to show it on the page or use the values for some other purpose then one uses View objects, these view objects have a Query within them which fetches the record, the implementation files are the logic which is used to manipulate or use the data fetched by the VO query.
Controller (CO)
The navigational flow and caller role is served by the controller objects, it guides the page rendering for the first time and also guides it based on user interaction on the page. They represents the Controller part of MVC.
Entity Object (EO)
The entity objects are used if one wishes to do some insert/update operations.
The standard seeded code that oracle provides as part of their ERP package may require some changes for adopting to a certain business scenario there are two ways in which a certain change can be done;
* Personalization
There are certain changes, which are in fact small changes on a page that can be done without any code changes is a feature that oracle provides to its users, this is called personalization. Personalization can be done at user level, responsibility level, org level and site level.
To enable the personalization link on every page use the Profile option, "Personalize Self-Service Defn".
After setting this profile, on every page the Personalize link will appear. One can personalize certain attributes like rendering items, making fields read only creating items at required level (User/Responsibility/Site) etc.
After personalization the personalized page needs to be imported to the file system as mentioned earlier each of the pages resides in the file system and stored in tables within the database, for doing this there is a standard xml importer script.
* Customization
In case some new customized codes needs to be created and added to the custom level which will extend to existing codes.(We will discuss this later)
* Debugging
Debugging and code analysis is a very major aspect of tracking and finding the required changes in an OAF code. Set the profile “FND: Diagnostics” this will create a Diagnostics link on the top as well as a “About this page” link at every page bottom. These are very important utility for tracking the components on a page, like AM’s /VO’s and CO’s on a page and helps in finding the various view objects that are attached on a page and their respective queries. This is also helpful in tracking the components that needs to be modified or extended during development.