Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Oaf - Oracle Application Framework Training Manual: What Is Oaframework?

Download as pdf or txt
Download as pdf or txt
You are on page 1of 81

OAF – Oracle Application Framework Training Manual OAF

INTRODUCTION
Oracle application framework-(OAF) is mainly come into the picture to replace d2k forms. it came
because to meet some new requirements from oracle corporation.
Till now we have three kinds of applications.
-Form based
-self web applications based
-mobile devices applications

-Form based applications mainly based on the client/server technology.


-As we know we were using the tool Form Builder 6i/9i and database as oracle.
-In case of self service web based applications we should use oracle database only and not any one.
This is mainly based on MVC architecture.
-In turn it is inherited from j2ee architecture. Here we can use the terminology like pages instead of
forms. here we use the tool J-Developer 9i.

What is OAFramework?
The Oracle Applications Framework (OA Framework) is a development and deployment platform
used for Oracle Applications (Apps) HTML-based screens. In other words, OA Framework is the
standard approach for building and launching Apps web pages. This includes the "i" modules,
such as iReceivables, iProcurement, etc. The framework contains the design rules and components
that include the look-and-feel for web pages, so any custom-built pages will have a presentation
identical to Oracle-developed pages.

Why should we use OAF?


Advantages:
-open through web browser
-light weight component compare to forms
-look and feel is good compare to forms

Disadvantages:
-Only oracle database should use.
-No drag & drop option.

How to find correct version of Jdev?


-Refer Note 416708.1 into metal ink

The work comes in terms of :


-development of new pages
-customization of existing pages(extensions)
-pages personalization (Some limitations)

Personalization - What is possible?


-Add extra field in a region or LOV. Can be done only at Site level
-Display / Hide a field/region in a page
-Make a field read-only
-Display / Hide DFF in a region. You can also specify default editable/viewable DFF contexts
-Conditionally display/hide fields. Need to know SPEL (expression language) for this

Personalization Levels:
Site: Usually set for adding field/region item which can be done only at site level.
Organization: refers to operating unit
Responsibility: refers to Responsibility
Function: If you define same OA page as two different menu functions then you can personalize
both differently

Extension - When?
-Add a new region to existing standard oracle page
-Add a field that belongs to custom table column or a column that is not part of existing VO (query)
associated with region
-Add custom validation for fields on page
-Modify LOV on a field. Change search criteria, display fields in LOV page

What are the pre-requisites for learning OA Framework?


1. You need to have an Oracle Apps 11i or higher environment to play around with.
2. Basic knowledge of java is needed. Rather I would say basic knowledge of OOP [Object Oriented
Programming] is needed. I mean just the concepts.
3. Basics of XML, which can be learnt within an hour from w3schools link
4. Understand MVC as a concept [not in depths as you are just getting started].

Installations Steps:
1)First we receive the patch file from client
Unzip the zip file.

2)Three folders get created


Jdevbin : Includes an extended version of the Oracle JDeveloper 10g executable and OA
Framework class libraries.
Jdevdoc: Contains documentation.
Jdevhome: Includes the OA Framework Toolbox Tutorial source and developer working area.

3)Create The environment variable:


MyComputer>
Properties>
Advanced>
EnvironmentVairable>
New
Variable Name : JDEV_USER_HOME
Variable Value : F:/OAF/jdevhome/jdev

4)Get the DBC file


DBC file contains the details of Host, Port & SID. Which helps in validating the session. We
can get the DBC file from server in FND top
D:\oracle\visappl\fnd\11.5.0\secure\VIS_apps\vis.dbc

Paste in below path


F:\OAF\jdevhome\jdev\dbc_files\secure\vis.dbc

5)Create Short Cut


You can find in below location:
F:\OAF\jdevbin\jdev\bin\jdevW
To Desktop

Model View Controller - MVC

OAF is designed by the simple MVC-(Model-View-Controller) architecture design pattern.


The MVC paradigm is way of breaking an application into three parts:
1)Model
2)View
3)Controller.

1-Model:

The Model is where the application implements its business logic. All the BC4J components in OAF
comes under Model like AM (Application Module), VO (View Object), EO (Entity Object), VL (View
Link) & AO (Association Object).
-In order to develop any OAF Application you need to know few concepts before doing any kind of
development. The concepts are basically the Business Components for Java(BC4J) components.

They are:
Entity Object (EO)
View Object (VO)
Application Module (AM)
Association Object (AO)
View Link (VL)
Now let us see the description of each component:

Entity Object (EO):


-Entity Objects represents a row in a database table.
-Eo object based on Table or View or Synanonym or snapshot.
-EO encapsulates the business logic and rules,EO’s are used for Inserting, Updating and Deleting
data.
-Also This is used for validating across the applications.
-J-Developer automatically creates methods for insert, update and delete of records whenever an
EO is created.
-Each entity object represtns a single row.
-Contains attributes representing data base column.
-Central point for business logic and validation related to a table.
-Can contain custom business methods.
Standards:
-Base your Eos on the _ALL tables rather than on organization level -restricted views.
-Always generate accessors (setters/getters to improve performance)

Features:
-Validation, locking and posting order of children
-Handled by composite associations
-Who columns (Record history)
-Set automatically during Eo create() or doDML()

Eo should have following attributes (Who coloumns)


-Creationdate
-Createdby
-LastUpdatedDate
-LastUpdatedBy
-LastUpdateLogin

Entity objects files:


-Each eo should have
-<yourName>EO.xml
-Declarative information about EO
-<yourName>EOImpl.java(optional)
-Add create(),remove(),validateEntity(),setter and getter methods.

Entity objects that you create subclass of the


oracle.apps.fnd.framework.server.OAEntityImpl class
BC4J package:xx.oracle.apps.gl.comp.schema.server

View Object (VO):


-Represents a query result.
-It can be either based on the Entity object or plain SQL query(Read only vo).
-Can also constructed from a SQL statement.
-Can be based on any number of entity objects
-It is used for selecting data.
-Contains attributes representing data base column.
-View Objects can be created declaratively or prgrammatically.Which ever way you create it ,you
need an application module contain it
-View objects are not an appropriate home for business logic: we should not be writing validation
rules in our viewobjects.

View objects java files:


-Create Vo java class (VoImpl) if needed.
-Vos should not contain business or validation logic, expect transient attribute logic
-Always create View Row java class (ViewRowImpl) and accessory (setters/getters)
Note: The viewRowImpl class should always be created for 2 reasons

One: it is the iterator that allows you step through the individual rows of the VO.
Two: it generates the get/set methods for the VO.Merely creating the set/get methods doesn't gain
anything ,but it does allow others to extend those methods should the need rise.

View objects files:


-<your name>VO.xml
-Declarative information about VO
-<your name>VOImpl.java(optional)
-Add initQuery() method if needed
-<your name>VORowImpl.java(Required)
-Contains accessors (setters & getters) for vo attributes
-behind the scenes, these accessors call corresponding methods in your EoImpl.java

view objects that you create subclass the


oracle.apps.fnd.framework.server.OAViewObjectImpl class
BC4JPackage::xx.oracle.apps.gl.comp.server

Application Module (AM):


Application Modules serve as containers for related BC4J components. The pages are related
by participating in the same task. It also defines the logical data model and business methods
needed. They provide the transaction context and also used for establishing database connection.
-Application module a logical container that manages and provides access to related BC4J module
objects.
-Container of the view objects and view links.
-An application module may be a root application module or a nested application module.
-A root application module is not contained in another application module.
-It provides transaction context for all objects it contains.
-Root application module also maintains the database connection.
-Handles transactions.
-view objects are identified by view instance names which names referenced by UI framework
-AM communicate with controllers and VO's
-while the AM holds all the EOs,the Eo and Eo related objects are not explicitly declared as
belonging to the AM, unlike VOs that explicitly declared.

Application modules files:


Each AM should have:
-<your name>AM.xml
-Declarative information about AM
-<your name>AMImpl.java
-Add methods to invoke assign VOs initQuerys methods if needed.

Application modules that you create subclass of the


oracle.apps.fnd.framework.server.OAApplicationModuleImpl class
BC4JPackage:xx.oracle.apps.gl.comp.server

Association (AO):
An association is created where we need to link 2 Entity Object’s. A Association can be created
by providing the source and destination eo and source and destination attributes.
-Define relationship between entity objects
-Consist of a source (master) and destination(detail) entity

Ex:
Master/Detail create page:

View Link (VL):


A view link is created where we need to link 2 view objects. A view link can be created by
providing the source and destination views and source and destination attributes.

-View link is an active link between view objects


you can create view links providing the following:
-source and destination views
-source and destination attributes

Ex:
Master/Detail view page

2-View:
View means out put of the xml page. it is responsible for the output of the model. When you
design a page, you store page definition in XML format on local machine.
-The View is where the application implements its user interface.
-View means the UI (User Interface) that is visible to the Users.
-When deploying to our system/server ,we load this XML file into MDS repository using XML
import statements. When the user run the page in the browser, the page definition is fetched from
the MDS repository and is converted into the XML file by the MDS engine.

3-Controller:
The Controller is where the application handles user interaction and directs business flow.
Controller is a simple java class file that contains methods for initial page request and post back
request.

Controller that you create subclass of the:


Oracle.apps.fnd.framework.webui.OAControllerImpl class

Controller contains 3 methods:


-Process Request
-ProcessFromRequest
-ProcessFormData
Process Request:
This phase is invoked on page load (when page is rendered)

By default it contains OAPageContext and OAWebBean class.


super.processRequest(pageContext, webBean); method
Ex:
On page load if you want display the data will go for write the code in process Request.

ProcessFromRequest:
This phase is invoked after page load.
By default it contains OAPageContext and OAWebBean classes and
super.processFormRequest(pageContext, webBean); method

Ex:After page opens if you wants to handle any event like submit or next button will write the code
in processFormRequest.

ProcessFormData:
Fires when form submit happens.
-Rarely will write custom code in this phase. if exceptions are thrown during this phase, the process
form request phase is skipped and the page re-displayed.
Ex:
Eo level exceptions

Usages :( OAPageContext and OAWebBean)

OAPageContext
--To get and set values of the fields.
pageContext.getParameter and pageContext.putParameter
-Navigate to one page to another page
pageContext.setForwardURL
-Get handle of Application module in co
pageContext.getApplicationModule()
-To write debug messages
pageContext.writeDiagnostics
-Get profile,sequence FND messgae in co

OAWebBean
-To get the handle of the webbeans
webBean.findChildRecursive();
-To set webBean properties
webBean.setReadonly();

BC4J Naming standards(Business components for java)


BC4J packages also corresponds to directory paths

-Eo-related (business logic).java and .xml files in


oracle.apps.<application short name>.<module>.schema.server

-AM and vo .java and .xml files in


oracle.apps.<application short name>.<module>.server

-poplist .java and .xml files in


oracle.apps.<application short name>.<module>.poplist.server

-lov .java and .xml files in


oracle.apps.<application short name>.<module>.lov.server

Note: Naming standards are not enforced on customers.these standards are simply what oracle
uses.Like any standards ,they evolve over time.if you encounter objects that dont adhere to any
given naming standard,chances are those are older objects adhering to an older naming standard
,chances are those are older objects to an older naming standard that is no longer used.

META DATA SERVICE -MDS

We know it means Meta Data Service. We also know that it has something to do
with web page displayed in OA Framework. Lets try to understand the basics of MDS.

Meta:- In technical world, meta work symbolizes dictionar0y. Think of a web page broken into
small units which are fields, buttons, list boxes. These small individual units[fields, buttons etc] are
stored in a dictionary, in the database. These units when combined together, they become a
webpage that gets rendered on the browser.

Data:- Those meta pieces are not stored as binary files, but as data in tables. Those tables begin with
JDR, for example JDR_ATTRIBUTES, JDR_ATTRIBUTES_TRANS, and JDR_COMPONENTS &
JDR_PATHS. The definition and relationship of each field/region/component is stored in these JDR
tables. OA framework reads that data when you request a page. The page structure is then built
based on Metadata.

Service: - Meta Data is available as a service (plain service not web service). The data is there in JDR
tables, but all such data has to be co-related, all fields, regions, buttons etc have to be clubbed into a
meaningful manner to make a web page. You can say that MDS provides service to store & return
page definitions. MDS collates those definitions in components/fields in a meaningful manner to
build a page.

The View formats the data and presents the data to the user. In OAF View is implemented using the
UIX. UIX uses XML to describe the components and hierarchy that make up an application page.
UIX also provides runtime capabilities to translate that metadata into HTML output so that it can be
shown on a Browser or a mobile device. The metadata used to describe the UI is loaded into a
database repository, called Meta Data Services (MDS), at deployment time and optionally at design
time as well. Pages are developed declaratively using the Oracle 9i J-Developer OA Extension.
Pages are made up of hierarchy of regions and items. Each UI widget corresponds to one or more
Java objects (beans). And these java beans are used to create the HTML at runtime. When you
design a page, you store "page definition" in XML format on your local machine. When deploying
to our system/server, we load this XML file into MDS repository using the xml import statements.
When the user run the page in the browser, the page definition is fetched from the MDS repository
and is converted into the XML file by the MDS engine. Each component in XML is translated into
the Java web bean object. And this web bean is rendered by the OA Framework. Page definition is
cached in to the memory, and if it is there, framework will not go to MDS repository to get the page
definition.

OA Framework architecture is based on MVC design pattern

Interaction between model, view and controller


Controller class (CO)

MVC Architecture
Onion Architecture of OAF
-OAF can be extracted into a series of concentric layers, like as onion
-Each layers only ‘knows’ about the layers below it
Region–OAF

Region is a part of an Oracle Apps Framework page which acts as a container for the items or
components. By default the top most level of an OA Framework page has to be of the "page Layout"
region type.

In OA Framework or OAF the regions can be nested so as to provide the desired


layout to the OAF page. Each region is a java bean which acts as a container for the sub-regions or
items in any Oracle Application Framework page.
Regions which are parallel in the bean hierarchy, in an OAF page, are called as Siblings and the
regions inside a region in an OAF page are called Child regions. The same nomenclature is also
applied for Items in OAF. Hence, by default all the regions that you create become the child regions
of the page Layout region as mentioned earlier that the page Layout region is the top most region in
any OA Framework page.

Also every region in OAF has specific properties which can be given some values
while creation of the OA Framework page e.g. rendered property which allows the region to be
displayed onto the OAF page, as per Oracle Application Framework guidelines (called as OAF
standards) this rendered property can have 2 values namely true(visible) or false(hidden). If the
region in an OAF page is set to be hidden then all the children regions/items will by default be
rendered false once that OAF page is rendered on to screen. Even these properties can be changed
at runtime using a Java controller, but that needs an understanding on how to import the region
beans and then how to create handle of the bean and then how to set properties. However this is not
so much difficult to do but still some Java concept and Java programming knowledge is needed to
achieve this. This is called as runtime control of the bean in OAF and is explained in detail for every
region in the corresponding region type.

Every region has a specific way of representing the data onto the screen once the OA Framework
page is rendered. Hence while creation of a OAF page we have to very cautious in choosing the
type of regions. E.g. a defaultDoubleColumn type of region will create two columns and will
automatically render all the components created inside it in these two columns once the OAF page
is rendered to screen. There are various types of regions available in OA Framework.

The complete list of all the regions provided by Oracle Application Framework is given below.

advancedTable
bulletedList
cellFormat
contentContainer
contentFooter
defaultDoubleColumn
defaultFormStack
defaultSingleColumn
defaultStack
flexibleContent
flexibleLayout
flowLayout
footer
Gantt
graphTable
header
HGrid
hideShow
hideShowHeader
labeledFieldLayout
listOfValues
messageComponentLayout
navigationBar
pageButtonBar
pageLayout
query
rowLayout
shuttle
stackLayout
subTabLayout
switcher
table
tableLayout
train
tree

advancedTable:
It was earlier that OA Framework used OATableBean to render tables but now things have changed
and OAAdvancedTableBean extends OATableBean. The best part of this is that with advancedtable
provides declarative support for the functionalities which required programming with simple table.

The magic doesn?t ends here, OAAdvancedTableBean also provides declarative support to many of
the new features that were not available with OATableBean, just for an example features like
column span in a table column header were not available with OATableBean but is now
declaratively supported by OAAdvancedTableBean.

Advanced table has many rich features, some of which can be like a table can now have an
instruction text and even a tip, also table can have a navigation bar, selection column, add rows
button, control bar, recalculate and many more.
Advanced table even allows you to brand the table so that it looks more beautiful once it?s
displayed.

The branding options include:


1. RowBranding
2. ColumnBranding
3. NoBranding
By default ?noBranding? option will be active.
Row Branding: Once you set the branding style in the property palette of advancedTable region and
run the page, you will note that the alternative rows of the table are in grey bands of color. Even
you have the option to choose the branding interval, by default the branding interval is 1 and hence
alternative row is displayed in grey brand color, if you choose 2 as branding interval then the grey
band row will appear after every 2 rows.

Column Branding: This is similar to row banding except that now rather that rows the columns of
your advanced table will be in the grey band branding style.

No Branding: This is the default branding style that?s selected if you don?t choose other styles, in
this style neither rows nor columns will be branded and all the rows and tables of the advanced
table will be displayed as mentioned in Oracle BLAF.
Some more features of advanced table are:
Text: This is the text that will be displayed on the top of the table once the OA Framework page is
rendered.

Records Displayed: This property can limit the number of records that can be displayed on the
screen once the advanced table is rendered. Be default the number of records displayed is 10.

Width: this is another important property of advancedtable. Here as the name suggests you can
enter the width of the table once the table is rendered. You can either enter the width in pixels or in
percentage. In order to enter the width of the table in pixel enter 500 or 600 in the property palette.
In order to enter the width of the table in percentage enter 70% or 80% in the palette. Once you enter
the width of table to be 100% the navigation links (Next and Previous) will be displayed on top of
the table. These links allow you to navigate to the other rows, apart from those being displayed on
the OA Framework page currently.

Controller Class: This is an optional property. If you want to perform some runtime action then
only you need to create a controller class where you will be handling the events and navigations
performed on the advancedTable.

Admin Perosnlization: Set to true if you want the admin to be able to personalize the
advancedTable region else false.
User Personalization: Set to true if you want the user to be able to personalize the advancedTable
region else false.

bulletedList:
In oracle application framework page the OAF BulletedList appears with a bullet prefixed to any
item present in this region.
For example - Suppose you have 3 items placed inside the BulletedList region type in an Oracle
Application Framework page, then all the 3 items will have a bullet attached as prefix when the OA
Framework page renders. But the only condition that OAF applies for making the bullet as prefix is
that each of the items should have its Rendered property set as true.
Hence, if bullet region is having 4 items in an Oracle Application Framework page and out of these
4 items, 2 items have the rendered property as false then you will find only 2 items with bullet
attached to it once the Oracle Apps Framework page renders on the browser.

Generally, Oracle Application Framework uses BulletedList to hold plain texts or links, but this
doesn't means that it cannot hold other regions or items. Oracle Apps Framework gives you the
freedom to add any other regions or items inside the BulletedList region style.

Oracle Application Framework allows you to specify the whether you want to show all the items in
columns or in the apps framework you can also set the number of rows that you expect to be
displayed at runtime.
To achieve the above mentioned functionality Oracle Application Framework provides you the
Height attribute property of the BulletedList. Let's consider one more example -
Suppose you have 10 items that have to be displayed in 2 columns when the Oracle Apps
Framework page is rendered. To make this happen all you need to do is to just set the height
property value as 2 in the JDeveloper Tool property palette. This makes the items 1-5 to come in one
column and the items 6-10 to be displayed in the second column. But there is a restriction to the
number of columns that you can create with the above approach. As per Oracle Application
Framework you cannot exceed the number of columns by 3, this means that you cannot have more
than three columns for a BulletedList region in an OAF page.

Corresponding web bean: OABulletedListBean

How to create BulletedList Item in OAF page?’


Creating a BulletedList on an Oracle Apps Framework page is simple. Just follow the steps given
below.
1. Create a region on an OAF page using JDeveloper
2. Set the style property to BulletedList.
3. Set the properties of the newly created BulletedList region according to the requirement and the
standards of Oracle Apps Framework.
4. Create items of any item style as children in this region.

cellFormat:
In oracle application framework page the OAF CellFormat region is used inside RowLayout region.
CellFormat region is a container of regions or items.
It imparts the properties like columnSpan, rowSpan, vAlign, hAlign, etc.
Suppose you have 3 rows and 2 columns in a table. Now you want to merge 2 columns of first row.
For this you can use rowSpan property of cell and will get the first of resulting in only one column,
i.e. now when you run OAF page, table will have total of 5 cells in it.
CellFormat allows you to control the vertical and horizontal alignment of item present in it. You can
achieve the same using vAlign and hAlign.
Suppose there is cell consisting of messageTextInput in it, messageTextInput should be top justified
and at the end of the cell in the Oracle application framework page. For this, set the vAlign (Vertical
alignment) property of cellFormat as top and hAlign (Horizontal Alignment) property of cellFormat
as right.
Note - It will not take care the alignment of the text of the webbean present in it. Like, in a
messageTextInput there is a text of VARCHAR data type, it will be only left aligned.

Corresponding web bean: OACellFormatBean

How to create cell Format Region in OAF page?


Creating a cellFormat region on an Oracle Apps Framework page is simple. Just follow the steps
given below.
1. Create a region on an OAF page using JDeveloper
2. Set the style property to cellFormat.
3. Set the properties of the newly created cellFormat region according to the requirement and the
standards of Oracle Apps Framework.
4. Create items or regions of any style as children in this region.

contentContainer:
In oracle application framework page the OAF ContentContainer region is used to display
additional information of the OAF page in Oracle BLAF ( Browser Look and Feel).
ContentContainer is having special features which will help it to differentiate from other content of
the OAF page.
Example: It can have different background color which can be different from the standard
background color of oracle apps framework page. This can be done by using Background Shade
property of the ContentContainer.
It can have border to it to identify it as a separate region.
Content Container can have items and regions of any style in it.
To add this into oracle application framework page, create a shared region in the OAF page for
ContentContainer.
Generally, BulletList region is placed in it, as we use ContentContainer to display additional
information, and that will be displayed pointwise. In the BulletList we can add further items or
regions in it as per the requirement.
ContentContainer will be generally displayed at the end (right side) of the Oracle Apps Framework
page.

Corresponding web bean: OAContentContainerBean

How to create contentContainer Region in OAF page?


Creating a contentContainer region on an Oracle Apps Framework page is simple. Just follow the
steps given below.
1. Create a shared region for the contentContainer
2. Create a region on an OAF page using JDeveloper
3. Set the style property to contentContainer
4. Set the properties of the newly created contentContainer region according to the requirement and
the standards of Oracle Apps Framework.
5. Create items or regions of any style as children in this region.

contentFooter:
In oracle application framework page the OAF ContentFooter region was used to hold buttons
(links) at the bottom level of the Oracle Apps Framework page. It displays as a bottom line which is
separated from the page footer with the content of the oracle application framework page and also
known as "ski".
It is deprecated style.
Page buttons should be used instead of ContentFooter to hold buttons in it.

Corresponding web bean: OAContentFooterBean (deprecated)

defaultDoubleColumn:
In oracle application framework page the OAF DefaultDoubleColumn region was used to hold
items in two columns.
Prompt of items will be right justified and the input fields will be left justified. But it was not
fulfilling the Oracle BLAF (Browser Look and Feel) UI requirement/guidelines.
Hence, it is deprecated and messageComponentLayout should be used for better serving the
purpose of placing items in OAF page along with header region which is called before
messageComponentLayout in the OAF page.
Along with DefaultDoubleColumn layout, there was one more region known as
DefaultSingleColumn layout was present.
DefaultSingleColumn severs the requirement of placing items in one column; it is also deprecated
due to the same reason of not serving the purpose of Oracle BLAF UI.

Corresponding web bean: OADefaultDoubleColumnBean (deprecated)

defaultFormStack:
In oracle application framework page the OAF DefaultFormStack region was used to hold regions
or items in a stack format i.e. it was used when each region or items needs to come in Oracle apps
framework page one under another (stacked) either to the left side of the page or right or center as
per the requirement.
It is a deprecated region style.
stackLayout should be used instead of DefaultFormStack in current scenarios.

Corresponding web bean: OADefaultFormStackLayoutBean (deprecated)

defaultSingleColumn:
In oracle application framework page the OAF DefaultSingleColumn region was used to hold items
in a single column. Prompt of items will be right justified and the input fields will be left justified.
But it was not fulfilling the Oracle BLAF (Browser Look and Feel) UI requirement/guidelines.
Hence, it is deprecated and messageComponentLayout should be used for better serving the
purpose of placing items in OAF page along with header region which is called before
messageComponentLayout in the OAF page.

Along with DefaultSingleColumn layout, there was one more region known as
DefaultDoubleColumn layout was present.
DefaultDoubleColumn severs the requirement of placing items in two columns; it is also deprecated
due to the same reason of not serving the purpose of Oracle BLAF UI.
Corresponding web bean: OADefaultSingleColumnBean (deprecated)

defaultStack:
In oracle application framework page the OAF DefaultStack region was used to hold regions or
items in a stack format i.e. it was used when each region or item needs to come in Oracle apps
framework page one under another (stacked) either to the left side of the page or right or center as
per the requirement.
It is a deprecated region style. stackLayout should be used instead of DefaultStack in current
scenarios.

Corresponding web bean: OADefaultStackLayoutBean (deprecated)

flexibleContent:
FlexibleContent region is used to identify content that can be placed in a flexibleLayout region. The
content can also be specified by referring to it. It represents available content which may or may not
be made use of; and thus acts as a resource to the page designer.

Corresponding web bean: OAFlexibleContentBean

flexibleLayout:
The flexibleLayout region can be used to define a customizable layout, as flexibleLayout regions can
be nested to form a customizable layout and can be positioned anywhere in the page.
A page can have a number of 'top-level' flexibleLayouts; they do not have to be nested.

Corresponding web bean: OAFlexibleLayoutBean

flowLayout:
In oracle application framework page the OAF DefaultStack region is used to hold buttons or
images in a horizontal line.
Suppose you have a table or advancedTable in oracle application framework page and you want to
define table actions to the table region, as soon as you create table action by default flowlayout gets
created as a child of tableActions.
Region style can be changed to rowLayout or can have the same flowLayout attached to it.
In case you want table actions to be performed only by using buttons then it's better to use
flowLayout instead of rowLayout. If table action involves other item style i.e.
OAMessageChoiceBean or OAMessageTextBean then use rowLayout, because if you use
flowLayout is used then Oracle BLAF (Browser Look and Feel) of UI will get hampered, i.e.
alignment won't be proper.
Whenever you create pageStatus region in pageLayout region flowLayout will also be get created
automatically in it as a child.
In flowLayout region there can be any region or item attached to it as child of it.

Corresponding web bean: OAFlowLayoutBean

How to create flowLayout Region in OAF page?


Creating a flowLayout region on an Oracle Apps Framework page is simple. Just follow the steps
given below.

1. Create a region on an OAF page using JDeveloper


2. Set the style property to flowLayout.
3. Set the properties of the newly created flowLayout region according to the requirement and the
standards of Oracle Apps Framework.
4. Create items or regions of any style as children in this region

footer:
In oracle application framework page the OAF Footer region is used to hold links which are for top-
level applications, buttons (global), copyright information, privacy information (optional) and
About this page link (optional) components in it.
It is a child of pageLayout region.
It is shown at the end of the OA Framework page in the BLAF UI.
If we want to attach a "Return to?" link i.e. a back navigation it will also get added in the footer
region.

Corresponding web bean: OAFooterBean

Gantt:
In oracle application framework page the OAF Gantt region is used to hold create Gantt charts. It
retrieves the data from the BC4J objects.
It is mostly used for the project planning and scheduling information.
It is like a matrix i.e. it is having a vertical axis and a horizontal axis.
Suppose you want to use Gantt for project planning then Project will be at the vertical axis and the
time period will be placed in an horizontal axis.
It inherits the properties of the HGrid region by extending it, only the width property of HGrid we
cannot change thru the Gantt region.

Corresponding web bean: OAGanttBean

graphTable:
In oracle application framework page, through OAF GraphTable region you can draw graphs.
GraphTable may not use all the columns present in the GraphTable to plot the graph. If there are
multiple graphs depending on one GraphTable then each graph may use different set of columns to
plot in the OAF page.
GraphTable is based on the tableLayout region and inherits all their property.
We need to set a property of GraphTable named as Graph Render Style property as either graph or
both.
When we set the value as graph that time we can view one or more graph elements. And when we
set the property as both then we can view both the table data and the corresponding graph below
the table, and if you have multiple graphs then below the table there will be poplist item in the OAF
page from which we need to choose the graph which we want to display.

Corresponding web bean: OAGraphTableBean


header:
In oracle application framework page we create an OAF Header region to give separate title of the
page to give the information of the page functionality to the user.
By using Header region, page content and the header region gets seperated/partitioned for more
clear information display.
Header region is also used for some important message display on the Oracle application
framework page like Error, Warnig, Information, etc at the top of the page.
By use of Header region, the page level action buttons/links will be displayed both at the top of the
page and the bottom of the OAF page.
Note: Header element does not support styleClass attribute.

Corresponding web bean: OAHeaderBean

HGrid:
As from the name hgrid itself, it suggests hirarchy grid.
In an oracle application page OAF Hgrid region is used when the data needs to be represented in a
hirarchical/tree struture.
You can use the Tree region to represent the tree structure but tree region in OAF emphasis on the
relationship of the objects of the hierarchy.
You can use Hgrid to display the hirarchical structure along with the detail information of each
row/node. It gives the priveledge of modifing the hierarchy by performing the action as add,
delete, update, etc.
Hgrid has 2 special columns:
1. Focus Column.
2. Object Hierarchy Column.

hideShow:
In oracle application framework page, to provide the functionality to hide and show the items and
(or) regions we use HideShow region, i.e. all the items or region, which should be displayed or
hidden, should be a child of a region which will have a hide/show control.
By using hode/show control we can hide or show a part of the section of information or the entire
section.
Suppose you want to hide or show details of a particular object in an OA framework page,
hide/show region can be used. You can use hide/show region when you want to hide or show the
graph, which is present in an OAF page. You can use this even when a row of a table needs to hide
and shown on some action on OAF page.
Hide/show region can only provide its functionality on a single page at multiple parts. Nesting can
also be done.

Corresponding web bean: OADefaultHideShowBean

hideShowHeader:
In oracle application framework page, to provide the functionality to hide and show the items
under a header we use HideShowHeader region.
In both the case of toggling i.e. hidden or shown header text will remain as it is.
In HideShowHeader region we can add items as we add in Header region.
Please refer Header region for more information on the properties of Header region.

Corresponding web bean: OAHideShowHeaderBean

labeledFieldLayout:
The labeledFieldLayout region lays out its children in columns; one column is for the "labels" and
the other for the "fields", with a gap in between.

The children are laid out across and down, the first child in each row takes the "label" position and
the second child takes the "field" position. The contents of each row are centered in the available
space.
The "labels" are always right aligned, and the "fields" left aligned.
With multiple columns, the children continue to be layed out across and down. For example, with
two columns, the third child will be used as the label for the first row and second column.
It also has support for the inline messaging beans where each inline messaging bean will
automatically occupy both a "label" and "field" position.

Corresponding web bean: OALabeledFieldLayoutBean

Note: The labeledFieldLayout component has been deprecated; use the messageComponentLayout
component instead. Please refer to the messageComponentLayout section for information about
messageComponentLayout

listOfValues:
A listOfValues region is rendered in a separate modal dialog containing a complex list of possible
values that can be selected as a valid value for an entry field on a transaction page or a field within a
table. Refer to the messageLovInput section for information on the properties of messageLovInput.
A listOfValues region is rendered as a popup of separate OAF page region containing a list of
possible values, any of which can be selected as a valid value for an entry field on a transaction
page or a field within a table.

Corresponding web bean: OAListOfValuesBean

messageComponentLayout:
In oracle application framework page OAF messageComponentLayout is the most widely used
region to hold components.
It is restricted to message components, and it does not allow other regions to become its child.
The components, which are child of OAF messageComponentLayout region, will have, prompt of
the component will be right (end) aligned and the text field will be left aligned.
It serves the multiple column display of components in an OA framework page and also satisfies
the standard UI guidelines.
It is recommended that we should not display more than 3 columns in respect to follow the UI
guidelines.
In the OAF messageComponentLayout the spacing between the components are according to the
Oracle BLAF UI guidelines.
Corresponding web bean: OAMessageComponentLayoutBean
navigationBar:
In oracle application framework OAF NavigationBar is used to navigate to the next or previous set
of records.
You might have mostly saw NavigationBar attached with the table or advance table.
Suppose you have run a BC4J VO query that retrieved more than 10 records to be displayed in a
table. Then a NavigationBar will appear at the top and bottom of the table. By using the
NavigationBar link you can display the next 10 records, which are retrieved from the query.
NavigationBar can also be seen in the Hgrid region, in case we expand a node and the child
retrieved are more than the record limit, that time we have to use NavigationBar link.
Note: No need to declare NavigationBar functionality explicitely.

Corresponding web bean: OANavigationBarBean

pageButtonBar:
In oracle application framework, OAF pageButtonBar is used when a set of buttons/action links
needs to be created at the page layout level.
PageButtonBar is the child of pageLayout region.
Buttons/action links will be displayed both at the top of the page just below the page title and
below the page footer line.

Corresponding web bean: OAPageButtonBarBean

pageLayout:
The pageLayout region is the highest-level layout element. It acts as a template for the entire page.
It, by default, has to be the top most region of the page. It supports several other regions and
navigation areas so as to maintain the Oracle Application Framework Standards.

Corresponding web bean: OAPageLayoutBean

query:
A query region is basically an extension of the stackLayout region.
A query region can contain the following:
1. Simple search panel
2. advanced search panel
3. a results table
4. Other elements as indexed children

Simple search panel can contain any of the following regions


a) defaultSingleColumn
b) defaultDoubleColumn
c) defaultStack
d) defaultFormStack elements.

The advanced search panel can contain


a) advancedSearch element.

The results of a query are rendered using either a HGrid or a table. The table or HGrid elements are
added as indexed children of the query region.
A query region can have three types of search panels as listed below.
Simple
Advanced
Customize

Also the query region runs in three modes:


1. Default mode
2. Results Based Search (RBS) mode
3. Auto Customization Criteria (ACC) mode.

Default mode: Developer is responsible for defining the search panels and binding the results of the
search to the results table/HGrid.
Results Based Search (RBS) mode: Search panel is created dynamically using the queryable
property of the region items inside the nested table or HGrid indexed children
Auto Customization Criteria (ACC) mode: You have the flexibility of defining your own UI for the
search panels, but the binding is powered by the framework as long as items on the panels are
mapped to items in the results table/HGrid.
Set the User Personalization property of the table/hgrid region (under the query region) to True if
you want to support user-personalizable searches which are surfaced in a Views panel.

Corresponding web bean: OAQueryBean

rowLayout:
In oracle application framework page the OAF RowLayout region is used which will hold
CelFormat inside i.e. as a child to it.
RowLayout region can be defined as an independent region or it can be a child of a tableLayout/
advanceTable region to create a row of a table/advanceTable.
RowLayout provides horizontal alignment of items or regions as these items or regions will be
under cellFormat and rowLayout holds cellFormat in a horizontal line. Hence row contains cell and
cell in-turn contains items to it.
We use rowLayout only when other layouts are not supporting the requirement in a standard way
i.e. not following the Oracle BLAF UI guidelines.

Corresponding web bean: OARowLayoutBean

How to create rowLayout Region in OAF page?


Creating a rowLayout region on an Oracle Apps Framework page is simple. Just follow the steps
given below.
1. Create a region on an OAF page using JDeveloper
2. Set the style property to rowLayout.
3. Set the properties of the newly created rowLayout region according to the requirement and the
standards of Oracle Apps Framework.
4. Create cellFormat region as a child of rowLayout.
5. Create items or regions of any style as children in cellFormat region.

shuttle:
The shuttle region provides a means for moving items between two lists and reordering one of
these lists. Often the shuttle will be used to select items from one list by placing them in the other.

Corresponding web bean: OAShuttleBean

stackLayout:
The stackLayout region is a layout element that lays out each of its children vertically.

Corresponding web bean: OAStackLayoutBean

subTabLayout:
The subTabLayout region has a child called "subTabs" that takes a subTabBar bean.
subTabBar bean contains link elements as its indexed children. subTabBar is rendered once on top.
The number of indexed children of subTabBar, which are the link elements, should be equal to the
number of indexed children of the parent subTabLayout.
The link elements are used to switch between the indexed children of the subTabLayout.
Corresponding web bean: OASubTabLayoutBean

switcher:
The switcher region is used in typical business requirements e.g. supopose we want to show an
LOV when one of the value of the defined attribute of the VO is selected and an
OAMessageTextInputBean when another value is selected in the VO i.e. it has a property,
"childName", which is used to render the named child under this name. The item to be displayed on
the OA Framework page is decided at runtime. A view name and a view attribute have to be
specifed to a switcher.

Corresponding web bean: OASwitcherBean

table:
As the name suggests a table region is used to display tabular data and also supports selection (both
single and multiple), sorting, record navigation, detail-disclosure and totaling but totaling can be
enabled for any column except for the first column in a table.

Corresponding web bean: OATableBean

tableLayout:
The tableLayout region is also of table type only and acts as a thin wrapper around the HTML's
table element. It contains a series of rowLayout elements for embedding other regions and items.

Corresponding web bean: OATableLayoutBean

train:
The train region is used to signify the in progress page of a multi-page process. The highlighted
"step" indicates the currently active page. The train has one property, "selectedIndex", which is the
index of the selected "step".

Corresponding web bean: OATrainBean

tree:
As the name suggests that a tree region is used to display objects in a hierarchical format. It
segregates data into child/leaf nodes and parent nodes which can be either expanded or collapsed.
The purpose of tree is to allow users to promptly browse through composite sets of hierarchical
objects and access detailed information for a record by highlighting it in the tree. The visual
representation of the hierarchy using the tree also depicts the relationship between objects with
respect to one another.

Corresponding web bean: OATreeBean

ITEMS - OAF

An item in OAF is a java bean which allows a user to interact with the Oracle Apps
Framework page e.g. a text box or a choice box etc.
Components or items are always placed inside some region so that they are always displayed as per
the Oracle Application Framework standards. Every item or component has specific properties
which can be given some values while creation of the OA Framework page e.g. rendered property
which allows the bean to be displayed onto the screen it can be true(visible) or false(hidden). Items
get rendered on the Oracle Apps Framework page in the fashion as described by the region in
which that item has been placed either at declarative/design time or at runtime.
Even these properties can be changed at runtime, but that needs an understanding on how to
import the beans and then how to create handle of the bean and then how to set properties.
However this is not so much difficult to achieve but still some programming knowledge is needed
to achieve this. This is called as runtime control of the bean and is explained in detail for every item
in the corresponding item type.

A complete list of all the items provided by Oracle Application Framework is given below.

button
exportButton
flex
formattedText
formParameter
formValue
image
link
messageCheckBox
messageChoice
messageDownload
messageFileUpload
messageInlineAttachment
messageLovChoice
messageLovInput
messageRadioButton
messageRadioGroup
messageRichTextEditor
messageStyledText
messageTextInput
rawText
resetButton
richTextEditor
selectionButton
separator
servletInclude
spacer
staticStyledText
submitButton
tip
urlInclude

button:
The button item style in Oracle Application Framework creates a push button. It allows the user to
trigger certain action in response to a click. To do this the Oracle Apps Framework gives the
property of fire action. The fire action property needs the name of the action to be fired e.g.
"buttonAction". Now, once the button is clicked the control goes to the processFormRequest method
to search for the buttonAction code. This all is handled by the OA Framework. In the buttonAction
code you need to write the business logic as per the requirement.
You cannot have children to this button bean.

Corresponding web bean: OAButtonBean

Import Path: import oracle.apps.fnd.framework.webui.beans.nav.OAButtonBean;

exportButton:
In Oracle Application Framework the ExportButton is used to:

Export the displayed data of a particular region or for all regions on an OAF page to a comma
separated value (csv) file.
o Only the regions that are displayed on the OA Framework will be exported.
o Each region on the exported file will have a row of column names followed by the results.

In Windows:
Clicking on the ExportButton will open a dialog according to which
o You can open the exported file and then save the same, or,
o You could save the file and then open it.
exportButton can be used as follows:
1. Exporting the data of all regions on a page.
2. Exporting data of a specific region on a page.
1. Exporting the data of all regions on a page:
A. Create a contentFooter region under the pageLayout region of that OAF Page.
B. Add an "ExportButton" to the contentFooter region.
C. If there is more than one button which needs to be added to the contentFooter, then all the
buttons should be put under a flowLayout region, and this flow layout should then be added to the
contentFooter.

2. Exporting data of a specific region on a page:


A. Create an "ExportButton" under the region whose data needs to be exported.
B. Now, in the container object, position this ExportButton and set a view usage name for this
ExportButton. The data of the attached VO will be exported to a CSV file.

It extends the OA Framework's submitButton and inherits all the properties from it.

Corresponding web bean: OAExportBean

Import Path: import oracle.apps.fnd.framework.webui.beans.form.OAExportBean;

flex:
Oracle Application has two types or styles of flex item styles. In other words you can say that there
are two types of flex fields in Oracle Application, they are:

1. Descriptive flex field.


2. Key flex field.

1. Descriptive flex fields: It provides a customizable "expansion space" which can be used to track
additional information, important and unique to a customer's business, which would not otherwise
be captured by the form.
2. Key flex fields: They are the key building block for the business group and are made up of
meaningful segments identifying business entities like Position, Job, and Grade etc.

By using flex item style, we create the complete structure of key flex field and descriptive flex field
as it is declared in Oracle Applications.

Corresponding web beans: OADescriptiveFlexBean, OAKeyFlexBean

import oracle.apps.fnd.framework.webui.beans.OADescriptiveFlexBean;
import oracle.apps.fnd.framework.webui.beans.OAKeyFlexBean;

formattedText:
You may have guessed from the name itself that a formattedText item style will accept a string. In
OAF the FormattedText accepts the string in one of its attribute named as "Text" and contains a very
limited set of HTML markup and outputs formatted results.
Oracle Apps Framework developers, who need more of HTML functionality must use the rawText
bean. E.g. formattedText bean won't support the use of HTML tables or HTML links; hence OAF
developers have to use either tableLayout and link beans or use just the rawText bean.

formattedText bean provides a limited ability to use a single source for translated or user-provided
FormattedText without parsing or filtering. It supports more attributes than the rawText bean; e.g.
it supports styleClass.

HTML markups supported by FormattedText are:


In the CSS attributes "class", "style" and "href" are the only attributes that are supported; all the
other CSS attributes others are ignored.

Corresponding web bean: OAFormattedTextBean

Import Path: import oracle.apps.fnd.framework.webui.beans.OAFormattedTextBean;

formParameter:
In Oracle Apps Framework the formParameter item style provides the functionality to act as a
placeholder for submission parameters. Suppose you want a user to fill his credit card details and
then you want to call a payment gateway by passing his credit card information, then you will use
the formParameter bean to hold the values of the credit card filled by the user in the OAF page.

Oracle Application Framework also provides the formValue bean for holding the values, but there
are differences between formParameter and formValue beans of OAF, these are listed below.

1. formParameter won't support a "value" attribute. Instead, the value is set only at form submission
time.
2. A formParameter with a particular name can be added N number of times to a form without ill
effects; only one instance will appear. This is noticeably different from the formValue, where reuse
will cause the same value to appear multiple times in the form submission.

Corresponding web bean: OAFormParameterBean

Import Path: import oracle.apps.fnd.framework.webui.beans.form.OAFormParameterBean;


formValue:
In Oracle Apps Framework the formValue bean is used to add value that will be submitted with a
form, but the key point to mention is that value is not displayed to the user.

To make the formValue bean get a value the formValue's ViewName and ViewAttribute has to be
mapped to a View Object and as soon as that View Object is executed the formValue get's the value
of the mapped attribute.

Corresponding web bean: OAFormValueBean

Import Path: import oracle.apps.fnd.framework.webui.beans.form.OAFormValueBean;


image:
Suppose you want to show an image on to an Oracle Application Framework page then you have to
use the Oracle Apps Framework provided Image bean. This bean has to be mapped to an image so
that the image can be displayed to once the OAF page is rendered.

For example when we see an update column in a table, that column uses image bean to display the
image of update icon.

Corresponding web bean: OAImageBean

Import Path: import oracle.apps.fnd.framework.webui.beans.OAImageBean;

link:
The Oracle Application Framework provides the Link bean so that you can redirect the control to
any other page once the Link bean has been clicked. The link bean item style creates an HTML link
tag which can then be redirected to some other page as required.

To open a new browser on the click of the link bean from an OAF page you just need to make the
target property of the link bean to _blank.

Corresponding web bean: OALinkBean

Import Path: import oracle.apps.fnd.framework.webui.beans.nav.OALinkBean;

messageCheckBox:
In order to create a check box in an Oracle Application Framework page the messageCheckBox bean
is used. It is created with the user's defined inline text which acts as a prompt once the Oracle Apps
Framework page is loaded.

MessageCheckBox serves the purpose of one or multiple selection.

Corresponding web bean: OAMessageCheckBoxBean

ImportPath: oracle.apps.fnd.framework.webui.beans.message.OAMessageCheckBoxBean;

messageChoice:
In order to make a drop down box in any Oracle Application Framework page the messageChoice
bean is used. The messageChoice bean gives the user the functionality to select a value from the
drop down list in an Oracle Apps page. People often get confused between the MessageChoice and
the List Of Values (LOV), whereas there are huge differences between both.
Value of the dropdown list of MessageChoice bean comes from the BC4J object.

Corresponding web bean: OAMessageChoiceBean

Import path: import oracle.apps.fnd.framework.webui.beans.message.OAMessageChoiceBean;


messageDownload:
The MessageDownload bean is a very special one in Oracle Apps Framework. It's special because it
allows the user to download a file from the middle tier to the client's machine directly from the OAF
page.

Corresponding web bean: OAMessageDownloadBean

ImportPath:oracle.apps.fnd.framework.webui.beans.message.OAMessageDownloadBean;

messageFileUpload:
In Oracle Apps Framework the messageFileUpload item style is created as a combination of the
fileUpload and inlineMessage controls. The fileUpload control adds a widget that can be used to
upload a file right from the Oracle Application Framework page. Any OAF page that contains this
control must have attribute "usesUpload" set to true.

Corresponding web bean: OAMessageFileUploadBean

ImportPath:
import oracle.apps.fnd.framework.webui.beans.message.OAMessageFileUploadBean;

messageInlineAttachment:
In any Oracle Apps Framework page the messageInlineAttachment item style is used to display
attachments in a message bean.

Corresponding web bean: OAMessageInlineAttachmentBean

Import Path:
import oracle.apps.fnd.framework.webui.beans.message.OAMessageInlineAttachmentBean;

messageLovChoice:
The Oracle Application Framework creates a messageLovChoice item style as a hybrid between a
messageLovInput and a messageChoice. The messageLOVChoice bean appears as a torch icon on
the OAF page on the right side of a messageChoice.

Once the torch is clicked a new region will be opened, this region is called as the LOV region in
Oracle Application Framework terms, the LOV region will allow the user to search and select a
value from the available ones. Once the value is selected the region will close automatically, the
control will return back to the base OAF page and the choice box will display the value selected
from the LOV region.

Corresponding web bean: OAMessageLovChoiceBean

Import Path:
import oracle.apps.fnd.framework.webui.beans.message.OAMessageLovChoiceBean;
messageLovInput:
In Oracle Apps Framework the messageLovInput item style is a combination of the lovInput and
inlineMessage controls.

Note: messageLovInput can have two or more lovMaps created under it, and each of those lovMaps
can have the Criteria Item property set. However if you set the Criteria Item property on more than
one lovMap, at runtime when the user invokes an LOV, selects a value from the LOV, and then re-
invokes it, both the entered criteria are used. In this case, deleting the value from the search item
will not enable the user to query all records from the LOV table's view objects.

Corresponding web bean: OAMessageLovInputBean

Import Path:
import oracle.apps.fnd.framework.webui.beans.message.OAMessageLovInputBean;

messageRadioButton:
The messageRadioButton item style in Oracle Application Framework is a combination of the
radioButton and inlineMessage controls. It is used to create a radio button using which a user can
select or deselect a value in an OAF page.

Corresponding web bean: OAMessageRadioButtonBean

Import Path:
import oracle.apps.fnd.framework.webui.beans.message.OAMessageRadioButtonBean;

messageRadioGroup:
The Oracle Apps Framework creates the messageRadioGroup item style as a combination of the
radioGroup and inlineMessage controls. You can have many radio buttons in the
messageRadioGroup but only one of the radio buttons can be selected at a time. This is used
wherever you want user to select only one value from many choices available. Suppose in your
OAF page you want the user to select a payment method out of the three available options namely
Credit Card, Pay Pal or Cash on Delivery (COD), then either you can use messageChoice bean or
you can use the messageRadioGroup to achieve the same.

Corresponding web bean: OAMessageRadioGroupBean

Import Path:
import oracle.apps.fnd.framework.webui.beans.message.OAMessageRadioGroupBean;

messageRichTextEditor:
The messageRichTextEditor item style in Oracle Apps Framework page provides rich text editing
capability within the OAF page.

Using this region the users can format the text same as MS Word or other word processing tools. It
has the capacity to hold the text in bold, italics, underlined, colored or any other format. A user can
even add bullets, numbers etc to his text. Also, the user can highlight the text or write the text in
different colors, is also gives the user the functionality to copy the text from any word processing
tools and paste the same.
The only condition that Oracle Application Framework puts for the
messageRichTextEditor is that it can be placed within any region except search regions or tables.
Also, the browser should support IFRAMES for the rich text editor to work.

Corresponding web bean: OAMessageRichTextEditorBean

Import Path:
import oracle.apps.fnd.framework.webui.beans.message. OAMessageRichTextEditorBean;

messageStyledText:
In Oracle Apps Framework the messageStyledText item style is a combination of the styledText and
inlineMessage controls. It is used to display a prompt and a value against that prompt. For example
you want to display the percentage of tasks done, then you need the name of the tasks to come as
labels and the percentage of the tasks completed will be fetched from the View Object.

Task1: 90%
Task2: 50%
Here in the above example Task1 and Task2 are the labels that you give to the messageStyledText
and the figures 91 and 50 are the values fetched by the View Attributes of the View Object attached
with the messageStyledText to display the value.

Corresponding web bean: OAMessageStyledTextBean

Import Path:
import oracle.apps.fnd.framework.webui.beans.message. OAMessageStyledTextBean;

messageTextInput:
The messageTextInput in Oracle Application Framework provides an item which acts as a text box
so that a user can enter the values into it and can save the same once the entered values passes the
BC4J validation if any. It is a combination of the textInput and inlineMessage controls.

You can also write a prompt for the text box to specify the purpose of the text box in the label field
provided by the Oracle Apps Framework.

Corresponding web bean: OAMessageTextInputBean

Import Path:
import oracle.apps.fnd.framework.webui.beans.message.OAMessageTextInputBean;

rawText:
The rawText item style supports output of unescaped text. Use of this class means assuming full
responsibility for generating proper HTML. Clients should strongly consider using elements in the
HTML namespace instead of this class. In particular, this class does not attempt to encode or escape
characters for NLS or HTML compliance.

Corresponding web bean: OARawTextBean

Import Path: import oracle.apps.fnd.framework.webui.beans.OARawTextBean;

resetButton:
Suppose you want to create a button which will clear all the contents that a user has filled in the
form in one shot, in these cases you can use the ResetButton provided by Oracle Application
Framework. In the push of the ResetButton all the contents placed in all the items of that OAF Page
will be cleared and become blank. In simple words the ResetButton is used to reset the contents of
the whole OAF Page.

Corresponding web bean: OAResetButtonBean

Import Path: import oracle.apps.fnd.framework.webui.beans.form.OAResetButtonBean;

richTextEditor:
The richTextEditor item style provides rich text editing capability within the OA Framework. It can
be placed within any region except search regions or tables. The component allows users to author,
edit and view rich text content in a browser that supports IFRAMEs.

The richTextEditor item style extends messageTextInput and can be used to provide rich text
editing capabilities where they are required. Please refer to the messageTextInput section for more
information on all richTextEditor properties.

Note: The richTextEditor item style has been deprecated; use messageRichTextEditor instead.

Corresponding web bean: OARichTextEditorBean

Import Path: import oracle.apps.fnd.framework.webui.beans.message.OARichTextEditorBean;

selectionButton:
The SelectionButton in Oracle Application Framework creates a button that can select the whole
row of a table.

The restriction that Oracle Apps Framework puts for the SelectionButton is that it can be created
only under a singleSelection or multipleSelection named child in a table region.

SelectionButton inherites all the properties from submitButton hence please refer to the
submitButton section for more information on all submitButton properties.

Corresponding web bean: OASelectionButtonBean


Import Path: import oracle.apps.fnd.framework.webui.beans.form.OASelectionButtonBean;

separator:
The separator bean creates a horizontal line on the OAF page so that there is a clear demarcation
between the components placed on any Oracle Application Framework page. It is rendered as a
dashed horizontal line once the OAF page is rendered.

Corresponding web bean: OASeparatorBean

Import Path: import oracle.apps.fnd.framework.webui.beans.layout.OASeparatorBean;

servletInclude:
The servletInclude item style allows you to include HTML content loaded from a local Servlet or
JSP under the parent region directly from the Oracle Application Framework page.

Corresponding web bean: OAServletIncludeBean

Import Path: import oracle.apps.fnd.framework.webui.beans.include.OAServletIncludeBean;

Spacer:
The spacer item style inserts empty space in a page. Spacer Beans occupy a fixed amount of space in
an HTML layout.

Suppose you want to have some gap in between the regions or in between the items placed in any
Oracle Application Framework page then you can use the Spacer item type provided by Oracle
Apps Framework. The spacer item style has height and width properties so that you can specify
either horizontal, vertical or even both types of spaces in the Oracle Apps Framework page.

Corresponding web bean: OASpacerBean

Import Path: import oracle.apps.fnd.framework.webui.beans.layout.OASpacerBean;

StaticStyledText:
The staticStyledText item style extends styled Text. All attributes supported by styled Text are
inherited by staticStyledText.

See the section on styled Text for a list of attributes available on the styled Text element.

Corresponding web bean: OAStaticStyledTextBean

Import Path: import oracle.apps.fnd.framework.webui.beans.OAStaticStyledTextBean;

Submit Button:
The Submit Button item style is used to submit the OAF Page. The destination attribute of the
submit Button is always ignored and in place of it the destination of the form is used as destination
by Oracle Apps Framework.
It also has the fire action property that you can use to handle the validations for the values being
submitted with the form.

Corresponding web bean: OASubmitButtonBean

Import Path: import oracle.apps.fnd.framework.webui.beans.form.OASubmitButtonBean;

Tip:
The tip item style provides page or section level hints to the user. This is a very essential component
that Oracle Apps Framework as there is always a demand for tips to be displayed once the mouse is
hovered over any component.

Typically, the only indexed child of the tip will be a Text Node, but as many children as necessary
can be added and will be laid out as with a flowLayout.

Corresponding web bean: OATipBean

Import Path: import oracle.apps.fnd.framework.webui.beans.OATipBean;

UrlInclude:
The urlInclude item style allows you to include HTML content loaded from an external source
under the parent region.

Corresponding web bean: OAUrlIncludeBean

Import Path: import oracle.apps.fnd.framework.webui.beans.include.OAUrlIncludeBean;

Lov -(List of values)

In Oracle Apps Framework the messageLovInput item style is a combination of the lovInput and
inlineMessage controls. Lov is used to displays the list of values from data base in separate
region,when ever user clicks on torch icon.where user can search the value and do the selection.

Note: messageLovInput can have two or more lovMaps created under it, and each of those lovMaps
can have the Criteria Item property set. However if you set the Criteria Item property on more than
one lovMap, at runtime when the user invokes an LOV, selects a value from the LOV, and then re-
invokes it, both the entered criteria are used. In this case, deleting the value from the search item
will not enable the user to query all records from the LOV table's view objects.

Steps to create a LOV:


-Create new bc4j package

imp.oracle.apps.po.student.lov.server
-Create new Application module LOVAM
-Create new view object LOVVO

Query: SELECT VENDOR_NAME,VENDOR_ID FROM PO_VENDORS;

-Add LOVVO in LOVAM


-Create shared region

Type: listOfValues

-Create new table using wizard


Attributes set properties:

VendorID: seacrhAllowed-True
SortAllowed -Assinding
Sort sequence: First

VendorName: Search Allowed: True

-In a page create new item for supplier and set the below properties

Type: messageLovInput
External Lov: imp.oracle.apps.po.student.lov.webui.supplierLovRN

Lov mapping :

Lov Region: VendorName


Return: Supplier
Criteria: Supplier

Message Choice( Picklist or Poplist )

In order to make a drop down box in any Oracle Application Framework page the message Choice
bean is used. The message Choice bean gives the user the functionality to select a value from the
drop down list in an Oracle Apps page. People often get confused between the MessageChoice and
the List Of Values (LOV), whereas there are huge differences between both.
Value of the dropdown list of Message Choice bean comes from the BC4J object.

Steps to create a messageChoice:

-Create new bcj4 package


imp.oracle.apps.po.student.poplist.server
-Create new view object SupplierVO
Query: SELECT VENDOR_NAME,VENDOR_ID FROM PO_VENDORS;

-Add it in root Application module


-Create a item in page
Type: OAMessageChoice

Set below properties:


Picklist view definition: imp.oracle.apps.po.student.poplist.server.SupplierVO
Picklist Disaply Attribute: VendorName
Picklist Value Attribute : VendorId

Picklist view definition: Automatically executes the vo query on page load


Picklist Disaply Attribute: The attribute name you want show in the front end
Picklist Value Attribute : The attribute name you want to save in the back end DB.
Picklist view instance : Need to manually execute the query.

Imp Student Operations:

Student Registration:

The student registration page is used to register or create a student and training. this is a
master details page ,here student is the master training is child and one student may in more than
one training.

Screen shot:
Data base components:

Create below 2 custom tables in custom schema:

1- IMP_STUDENT_HEADERS (Master table)


2- IMP_STUDENT_TRAINING_DETAILS(Child table)

CREATE TABLE IMP_STUDENT_HEADERS


(STUDENT_ID NUMBER(9) PRIMARY KEY,
FIRST_NAME VARCHAR2(25) NOT NULL,
LAST_NAME VARCHAR2(25) NOT NULL,
DATE_OF_REGISTRATION DATE,
MOBILE_NO NUMBER(10),
EMAIL VARCHAR2(25),
GENDER VARCHAR2(8),
TERMS_CONDITIONS VARCHAR2(1) NOT NULL,
BQ_COURSE_NAME VARCHAR2(50),
BQ_SPECIALIZATION VARCHAR2(50),
BQ_UNIVERSITY VARCHAR2(50),
BQ_GRADUATE_IN DATE,
PG_COURSE_NAME VARCHAR2(50),
PG_SPECIALIZATION VARCHAR2(50),
PG_UNIVERSITY VARCHAR2(50),
PG_GRADUATE_IN DATE,
FATHER_NAME VARCHAR2(50),
MOTHER_NAME VARCHAR2(50),
DATE_OF_BIRTH DATE,
MARTIAL_STATUS VARCHAR2(10),
SPOUSE_NAME VARCHAR2(50),
CHILDREN VARCHAR2(3),
ADDRESS VARCHAR2(100),
STATE VARCHAR2(50),
COUNTRY VARCHAR2(25),
ABOUT_YOURSELF VARCHAR2(500),
CREATION_DATE DATE NOT NULL,
CREATED_BY NUMBER(9) NOT NULL,
LAST_UPDATED_BY NUMBER NOT NULL,
LAST_UPDATE_DATE DATE NOT NULL,
LAST_UPDATE_LOGIN NUMBER NOT NULL,
ATTRIBUTE1 VARCHAR2(25),
ATTRIBUTE2 VARCHAR2(25),
ATTRIBUTE3 VARCHAR2(25),
ATTRIBUTE4 VARCHAR2(25),
ATTRIBUTE5 VARCHAR2(25),
ATTRIBUTE6 VARCHAR2(25)
)

CREATE TABLE IMP_STUDENT_TRAINING_DETAILS


(
TRAINING_ID NUMBER(9) PRIMARY KEY,
STUDENT_ID NUMBER(9) NOT NULL,
TRAINING VARCHAR2(25) NOT NULL,
TRAINING_BATCH NUMBER(9),
START_DATE DATE,
END_DATE DATE,
FEE NUMBER(9),
CREATION_DATE DATE NOT NULL,
CREATED_BY NUMBER(9) NOT NULL,
LAST_UPDATED_BY NUMBER NOT NULL,
LAST_UPDATE_DATE DATE NOT NULL,
LAST_UPDATE_LOGIN NUMBER NOT NULL,
ATTRIBUTE1 VARCHAR2(25),
ATTRIBUTE2 VARCHAR2(25),
ATTRIBUTE3 VARCHAR2(25),
ATTRIBUTE4 VARCHAR2(25),
ATTRIBUTE5 VARCHAR2(25),
ATTRIBUTE6 VARCHAR2(25)
)

And grant to apps

grant all on IMP_STUDENT_HEADERS to apps

grant all on IMP_STUDENT_TRAINING_DETAILS to apps

Create synonym for both the tables

Create synonym IMP_STUDENT_HEADERS for po.IMP_STUDENT_HEADERS

Create synonym IMP_STUDENT_TRAINING_DETAILS


for po. IMP_STUDENT_TRAINING_DETAILS

Create two sequences for stundent_id and training_id

IMP_STUDENT_ID
IMP_STUDENT_TRAINING_ID

Create Sequence IMP_STUDENT_ID


START WITH 1
MINVALUE 1
MAXVALUE 99999999999999999999
INCREMENT BY 1;

Create Sequence IMP_STUDENT_TRAINING_ID


START WITH 1
MINVALUE 1
MAXVALUE 99999999999999999999
INCREMENT BY 1;
Lookups and sql queries:

Go to Functional Administrator responsibility and create below lookup types and prepare the sql
queries for the same.

IMP_LU_GENDER
select lookup_code,meaning
from FND_LOOKUP_VALUES
where LOOKUP_TYPE = 'IMP_LU_GENDER';

IMP_LU_TRAINING
select lookup_code,meaning
from FND_LOOKUP_VALUES
where LOOKUP_TYPE = 'IMP_LU_TRAINING';

IMP_LU_BQ_COURSE
select lookup_code,meaning
from FND_LOOKUP_VALUES
where LOOKUP_TYPE = 'IMP_LU_BQ_COURSE';

IMP_LU_BQ_SPECIALIZATION
select lookup_code,meaning
from FND_LOOKUP_VALUES
where LOOKUP_TYPE = 'IMP_LU_BQ_SPECIALIZATION';

IMP_LU_UNIVERSITY
select lookup_code,meaning
from FND_LOOKUP_VALUES
where LOOKUP_TYPE = 'IMP_LU_UNIVERSITY';

IMP_LU_PG_COURSE
select lookup_code,meaning
from FND_LOOKUP_VALUES
where LOOKUP_TYPE = 'IMP_LU_PG_COURSE';

IMP _LU_PG_SPECIALIZATION
select lookup_code,meaning
from FND_LOOKUP_VALUES
where LOOKUP_TYPE = 'IMP_LU_PG_SPECIALIZATION';

IMP_LU_MARITIAL_STATUS
select lookup_code,meaning
from FND_LOOKUP_VALUES
where LOOKUP_TYPE = 'IMP_LU_MARITIAL_STATUS';
IMP_LU_STATES
select lookup_code,meaning
from FND_LOOKUP_VALUES
where LOOKUP_TYPE = 'IMP_LU_STATES';

Go to Jdevlp to design page:

-Create a data base connection


-Create OAWorkspace and OAProject

ImpStudent.jws, ImpStudent.jpr and ImpStudent.jpx got created.

-Create Model components

-Create new BC4J component


Package: imp.oracle.apps.po.student.server

Right click on bc4j and create New Application madule

Name: ImpStudentAM
Package: imp.oracle.apps.po.student.server

Right click on Project to create a Page.

Name: ImpStudentResitrationPG
Package: imp.oracle.apps.po.student.webui

By default its creates pageLayout region.

Set below properties:


AM Definition: imp.oracle.apps.po.student.server.ImpStudnetAM
Window Title: Imp Student Registration
Page Title: Student Registration

Design the page as we shown in screen shot.

List of values - LOV for country and states.

1. Create new BC4J component

Package : imp.oracle.apps.po.student.lov.server

Right click on BC4J and create New Application module


Name: ImpStudentLOVAM

Right click on BC4J and create New lov View Object

2. Create LOVVO for Country and states

Name: ImpCountryLOVO
Query :

select country_code,name from PA_COUNTRY_V

Name : ImpStateLOVVO
Query :
select meaning,description,tag
from fnd_lookup_values
where lookup_type='IMP_STATES'

Next add these into LOVAM.

3.Create shared region for country


Right click project > New > WebTier > OAComponents > Region

Name: ImpCountryLOVRN
Style : listOfValues
4. Set below properties of LOVRN:

Scope: Public
AM Definition: imp.oracle.apps.po.student.lov.server.ImpStudentLOVAM

Right click region to create table using wizard

CountryName set below properties

seacrhAllowed : true
sortable : ascending
sort sequence: first

5. Country set below properties:

ExterNal LOV:imp.oracle.apps.po.student.lov.server.ImpCountryLOVRN
Lov mapping1:
Lov Region item : CountryName
Return to: Country
Criteria item: Country

Create the same for States and student.


Message Choice (pick list) for Marital status,BQCourseName,BQ Specialization ,university ,PG
CourseName and PGSpeicalization

-Create new BC4J component

Package: imp.oracle.apps.po.student.picklist.server

Right click on BC4J and create New ViewObject

Name: ImpMaritalStatusVO
Query :
select lookup_code,meaning
from FND_LOOKUP_VALUES
where LOOKUP_TYPE = 'IMP_LU_MARITIAL_STATUS';

-Add into data modle of the application module


-Go to page and set below properties

Item Style: messageChoice


Picklist Definition: imp.oracle.apps.po.poplist.server.Imp

Create same for all rest of pick lists and radio Group.

EntityObject (EO) View Object (VO):

1)IMP_STUDENT_HEADERS

Name: ImpStudentHeadersEO
Schema Object: IMP_STUDENT_HEADERS

Check createrow (), remove (), validate () methods

Create by default entity based view Object

Name: ImpStudentHeaderEOVO

Create one more eo and vo for

2)IMP_STUDENT_TRAINING_DETAILS

Name: ImpTrainingDetailsEO
Schema Object: IMP_STUDENT_TRAINING_DETAILS

Check createrow() , remove() ,validate() methods

Create by default entity based view Object


Name: ImpTrainingDetailsEOVO

Note: IF you want you can create manual entity based view Objects.

-Add these view Objects into data model of the Application module(AM)

After successfully creation of eo and vo do the mapping for each every field in the page ,Set View
Instance and View Attribute(Mapping) properties for each every item in the page.

View Instance: ImpStudentHeadersEOVO


View Attribute: ImpTrainingDetailsEOVO

Coding part starts from here

AM: ImpStudentAM

import oracle.jbo.Row;
import oracle.apps.fnd.framework.server.OADBTransaction;
import oracle.jbo.domain.Number;

public void createStudent ()


{
System.out.println("IN AM createStudent");
ImpStudentHeadersEOVOImpl shVO=getImpStudentHeadersEOVO();
OADBTransaction tr = getOADBTransaction();

if(!shVO.isPreparedForExecution())
{
shVO.executeQuery();
System.out.println("IN AM VO");
}

Row row=shVO.createRow();
shVO.insertRow(row);
row.setNewRowState(Row.STATUS_INITIALIZED);
Number studentId=tr.getSequenceValue("IMP_STUDENT_ID_SEQ");
shVO.getCurrentRow().setAttribute("StudentId",studentId);
}

public void save()


{
OADBTransaction tr = getOADBTransaction();
tr.commit();
}

CO: ImpStudentRegistrationCO
import imp.oracle.apps.po.student.server.ImpStudentAMImpl;

public void processRequest(OAPageContext pageContext, OAWebBean webBean)


{
super.processRequest(pageContext, webBean);

ImpStudentAMImpl AM=(ImpStudentAMImpl)pageContext.getApplicationModule(webBean);
AM.createStudent();
}

public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)


{
super. processFormRequest (pageContext, webBean);

if(pageContext.getParameter("Save")!=null)
{
AM.save();
}

AM: ImpStudentAM

public void createTrainings()


{
ImpStudentTrainingsEOVOImpl stVO=getImpStudentTrainingsEOVO() ;
ImpStudentHeadersEOVOImpl shVO=getImpStudentHeadersEOVO();

OADBTransaction tr = getOADBTransaction();
stVO.setMaxFetchSize(0);
Row row=stVO.createRow();
stVO.first();
stVO.insertRow(row);
row.setNewRowState(Row.STATUS_INITIALIZED);

Number trainingId = tr.getSequenceValue("IMP_TRAINING_ID_SEQ");


String studentId=shVO.getCurrentRow().getAttribute("StudentId").toString();

stVO.getCurrentRow().setAttribute("TrainingId",trainingId);
stVO.getCurrentRow().setAttribute("StudentId",studentId);
}

CO: ImpStudentRegistrationCO

if("ImpTrainingATRN".equals(pageContext.getParameter(SOURCE_PARAM))
&& ADD_ROWS_EVENT.equals(pageContext.getParameter(EVENT_PARAM)))
{
AM.createTrainings();
}

Supplier Search (Query region):

Query region:
Using query region style we can develop a search page with out any single line of
code,just we need to set some properties.

Screen shot:

Create Query region in page layout region ,right click to create table using wizard here select vo
name as we prepared for the search results.
Note: prepared simple query no need of any bind params required to pass. every thing will be take
care of by query region it self just need set some properties.

Just set below properties for query region:

ConstructionMode : ResultBasedSearch
Include simple panel: True
Include Views panel: True
Include advancepanel: True
Set below properties for vendor Id and vendor name

searchAllowed: true
After setting this property both the items available in search criteria and search with same.

Student Search:
The student search page is used to search the student and training details for
existing student.

Screen shot:

Design the page as shown in the screen shot above.

-Create LOV for Student id ,First name and Last name

Name: ImpStudnetLOVVO
Query:
Select student_id,first_name,last_name from imp_studnet_headers

-Create Readonly search view objects


Name:ImpStudentSearchVO
Query :
Select
ISH.STUDENT_ID,ISH.FIRST_NAME||','||ISH.LAST_NAME
FULL_NAME,initcap(ISH.GENDER),
initcap(ISTS.TRAINING),ISTS.START_DATE,ISTS.END_DATE
from IMP_STUDENT_HEADERS ISH,IMP_STUDENT_TRAINING_DETAILS ISTS
where
ISH.STUDENT_ID=ISTS.STUDENT_ID(+)
AND ISH.STUDENT_ID LIKE NVL(:1,ISH.STUDENT_ID)
AND ISH.FIRST_NAME LIKE NVL(:2,ISH.FIRST_NAME)
AND ISH.LAST_NAME LIKE NVL(:3,ISH.LAST_NAME)
AND ISH.GENDER LIKE NVL(:4,ISH.GENDER)

Set the View Instance and View Attribute properties for Table region

AM: ImpStudentAM

import oracle.apps.fnd.framework.webui.OAPageContext;
import oracle.apps.fnd.framework.webui.beans.OAWebBean;

public void searchStudent(OAPageContext pageContext, OAWebBean webBean)


{
OAViewObjectImpl sVO=getImpStudentSearchVO();

String studentId=new String();


String firstName=new String();
String lastName=new String();
String gender=new String();
String flag="N";

if(pageContext.getParameter("StudentId")!=null
&& !pageContext.getParameter("StudentId").equals(""))
{
studentId= pageContext.getParameter("StudentId");
sVO.setWhereClauseParam(0,studentId);
flag="Y";
}
else
{
sVO.setWhereClauseParam(0,null);
}

if(pageContext.getParameter("FirstName")!=null
&& !pageContext.getParameter("FirstName").equals(""))
{
firstName= pageContext.getParameter("FirstName");
sVO.setWhereClauseParam(1,firstName);
flag="Y";
}
else
{
sVO.setWhereClauseParam(1,null);
}

if(pageContext.getParameter("LastName")!=null
&& !pageContext.getParameter("LastName").equals(""))
{
lastName= pageContext.getParameter("LastName");
sVO.setWhereClauseParam(2,lastName);
flag="Y";
}
else
{
sVO.setWhereClauseParam(2,null);
}

if(pageContext.getParameter("Gender")!=null
&& !pageContext.getParameter("Gender").equals(""))
{
gender= pageContext.getParameter("Gender");
sVO.setWhereClauseParam(3,gender);
flag="Y";
}
else
{
sVO.setWhereClauseParam(3,null);
}

if("Y".equals(flag))
{
sVO.executeQuery();
}

CO: ImpStudentRegistrationCO

import imp.oracle.apps.po.student.fourth.server.ImpStudentAMImpl;

public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)


{
super.processFormRequest(pageContext, webBean);
ImpStudentAMImpl AM=(ImpStudentAMImpl)pageContext.getApplicationModule(webBean);

if(pageContext.getParameter("Go")!=null)
{
AM.searchStudent(pageContext,webBean);
}

if(pageContext.getParameter("Clear")!=null)
{
pageContext.forwardImmediatelyToCurrentPage(null,false,null);
}

Student Update and Training Update:

The student update page is used to update the student details and training details or add
the training details for existing student.

Screen shot:

Set below properties for edit image


Action Type: fireAction
Event : update
SPEL (Simple Possible Expression Language)

-Using spel we can get the row reference value.


-SPEL is the basic foundation of PPR in OAF.
-SPEL is an expression that will either return TRUE or FLASE.
-Filed will be displayed if SPEL equates to TRUE.
-Filed will not be displayed if SPEL equates to FALSE.
-Let’s say you wish to hide field’s Spouse and Children based on marital status selected
dynamically. In order to hide these fields, you can simply set the Rendered property of that field to
FALSE

Properties that can be modified at run time (Using SPEL)

Rendered: To conditionally make a filed in OAF displayed.


ReadOnly: To conditionally make a enterable or non-enterable.
Required: To conditionally make a field mandatory or non-mandatory.
Disabled: To conditionally make a field disable or enable.

Syntax of the SPEL: ${oa.ViewInstance.AttributeName}

Prepare SPEL for student id

${oa.ImpStudnetSearchVO.StudnetId}
Set in below property for edit

Parameters:

Parameter : pStudentId
Value : ${oa.ImpStudnetSearchVO.StudnetId}

CO: ImpStudentSearchCO:

import oracle.apps.fnd.framework.webui.OAWebBeanConstants;

if("update".equals(pageContext.getParameter(EVENT_PARAM)))
{
pageContext.setForwardURL("OA.jsp?page=/imp/oracle/apps/po/student/fourth/webui/ImpSt
udentRegistrationPG",
null,
OAWebBeanConstants.KEEP_MENU_CONTEXT,
null,
null,
true, // Retain AM
OAWebBeanConstants.ADD_BREAD_CRUMB_NO, // Do not display breadcrumbs
OAWebBeanConstants.IGNORE_MESSAGES);
}
AM: ImpStudentAM

public void updateStudent(String studentId)


{
ImpStudentHeadersEOVOImpl shVO=getImpStudentHeadersEOVO();
ImpStudentTrainingsEOVOImpl stVO=getImpStudentTrainingsEOVO() ;

String where="STUDENT_ID="+studentId;

shVO.setWhereClauseParams(null);
shVO.setWhereClause(where);
shVO.executeQuery();

stVO.setWhereClauseParams(null);
stVO.setWhereClause(where);
stVO.executeQuery();
}

Screen shot :
Student Delete and Training Delete:

The Student delete page is used to delete the existing student and training details.

Screen shot:

Set below properties for delete image


Action Type: fireAction
Event : delete
Parameters :
Name: pStudentId
Value: ${oa.ImpStudnetSearchVO.StudentId}
OADailog page:
The daiog page is used to display the confirmation ,information or errors messages .here we don’t
need to create dialogue page from the scratch it is already created by oracle corporation just we
need set some properties .
Screen shot

CO: ImpStudentSearchCO:

import java.util.Hashtable;
import oracle.apps.fnd.framework.OAException;
import oracle.apps.fnd.framework.webui.OADialogPage;

if("delete".equals(pageContext.getParameter(EVENT_PARAM)))
{
String studentId = pageContext.getParameter("pStudentId");
oracle.apps.fnd.common.MessageToken tokens[] = null;
OAException deleteMessage = new OAException("PO", "IMP_STUDENT_DELETE", tokens);
OADialogPage dialogPage = new OADialogPage((byte)1, deleteMessage, null, "", "");
dialogPage.setOkButtonToPost(true);
dialogPage.setNoButtonToPost(true);
dialogPage.setOkButtonItemName("DeleteYes");
dialogPage.setPostToCallingPage(true);
dialogPage.setOkButtonLabel("Yes");
dialogPage.setNoButtonLabel("No");
Hashtable formParams = new Hashtable(0);
formParams.put("pStudentId", studentId);
dialogPage.setFormParameters(formParams);
pageContext.redirectToDialogPage(dialogPage);
}

if(pageContext.getParameter("DeleteYes")!=null)
{
String studentId=pageContext.getParameter("pStudentId");
AM.deleteStudent(studentId);
}

AM: ImpStudentAM

import oracle.jbo.RowSetIterator;
public void deleteStudent(String studentId)
{
int studentIdToDelete = Integer.parseInt(studentId);
OADBTransaction tr = getOADBTransaction();
ImpStudentHeadersEOVOImpl shVO=getImpStudentHeadersEOVO();
ImpStudentHeadersEOVORowImpl row = null;
int RowCount = shVO.getRowCount();
RowSetIterator deleteIter = shVO.createRowSetIterator("deleteIter");
deleteIter.setRangeStart(0);
deleteIter.setRangeSize(RowCount);
for(int i=0;i<RowCount;i++)
{
row = (ImpStudentHeadersEOVORowImpl)deleteIter.getRowAtRangeIndex(i);
Number nStudentId = (Number)row.getAttribute("StudentId");
if(nStudentId.compareTo(studentIdToDelete) == 0)
{
row.remove();
tr.commit();
break;
}
}
deleteIter.closeRowSetIterator();
}

Screen shot :

Set below properties for delete image


Action Type: fireAction
Event : delete
Parameters :
Name: pTrainingId
Value: ${oa.ImpStudnetSearchVO.TrainingId}

AM: ImpStudentAM

public void deleteTraining(String trainingId)


{
System.out.println("IN AM SPELN:"+trainingId);
int trainingIdToDelete = Integer.parseInt(trainingId);

OADBTransaction tr = getOADBTransaction();
ImpStudentTrainingsEOVOImpl stVO=getImpStudentTrainingsEOVO() ;
ImpStudentTrainingsEOVORowImpl row = null;
int RowCount = stVO.getRowCount();
RowSetIterator deleteIter = stVO.createRowSetIterator("deleteIter");
deleteIter.setRangeStart(0);
deleteIter.setRangeSize(RowCount);
for(int i=0;i<RowCount;i++)
{
row = (ImpStudentTrainingsEOVORowImpl)deleteIter.getRowAtRangeIndex(i);
System.out.println("IN FOR LOOP::"+i);
Number nTrainingId = (Number)row.getAttribute("TrainingId");
System.out.println("IN FOR LOOP::"+nTrainingId);
if(nTrainingId.compareTo(trainingIdToDelete) == 0)
{
System.out.println("if Delete training");
row.remove();
break;
}
}
deleteIter.closeRowSetIterator();
}

CO: ImpStudentRegistrationCO:

String trainingId=new String ();

if("delete".equals(pageContext.getParameter(EVENT_PARAM)))
{
if(pageContext.getParameter("pTrainingId")!=null)
{
trainingId=pageContext.getParameter("pTrainingId");
AM.deleteTraining(trainingId);
}
}
Student view details:
The student details page is used view the details of the student and training details for
existing student. This page has only the read-only access ,user cant do any editing in this page.

Screenshot:

-Enable the Action of view details image in search page.


Set below properties for details image

Action Type: fireAction


Event : details

Parameters :
Name: pStudentId

Value: ${oa.ImpStudnetSearchVO.StudentId}

Screen shot :
Design the page as shown in the screen shot

ImpStudentHeaderDetailsVO:

Query:
SELECT STUDENT_ID,
FIRST_NAME,
LAST_NAME,
DATE_OF_REGISTRATION,
MOBILE_NO,
EMAIL ,
GENDER ,
TERMS_CONDITIONS,
BQ_COURSE_NAME ,
BQ_SPECIALIZATION,
BQ_UNIVERSITY ,
BQ_GRADUATE_IN ,
PG_COURSE_NAME ,
PG_SPECIALIZATION ,
PG_UNIVERSITY ,
PG_GRADUATE_IN ,
FATHER_NAME ,
MOTHER_NAME ,
DATE_OF_BIRTH ,
MARTIAL_STATUS,
SPOUSE_NAME,
CHILDREN,
ADDRESS,
STATE ,
COUNTRY,
ABOUT_YOURSELF
FROM
IMP_STUDENT_HEADERS
WHERE
STUDENT_ID=:1

ImpTrainingDetailsVO:

Query:
SELECT
TRAINING_ID,
STUDENT_ID ,
TRAINING ,
TRAINING_BATCH,
START_DATE ,
END_DATE ,
FEE
FROM
IMP_STUDENT_TRAINING_DETAILS
WHERE
STUDENT_ID=:1

CO: ImpStudentSearchCO:

if("details".equals(pageContext.getParameter(EVENT_PARAM)))
{
pageContext.setForwardURL("OA.jsp?page=/imp/oracle/apps/po/student/fourth/webui/ImpSt
udentDetailsPG",
null,
OAWebBeanConstants.KEEP_MENU_CONTEXT,
null,
null,
true, // Retain AM
OAWebBeanConstants.ADD_BREAD_CRUMB_NO, // Do not display breadcrumbs
OAWebBeanConstants.IGNORE_MESSAGES);
}

AM: ImpStudentAM

public void studentDetails(String studentId)


{
ImpStudentHeaderDetailsVOImpl sVO=getImpStudentHeaderDetailsVO();
OAViewObjectImpl tVO=getImpTrainingDetailsVO();

sVO.setWhereClauseParam(0,studentId);
tVO.setWhereClauseParam(0,studentId);

sVO.executeQuery();
tVO.executeQuery();
}

CO: ImpStudentDetailsCO

import imp.oracle.apps.po.student.fourth.server.ImpStudentAMImpl;
public void processRequest(OAPageContext pageContext, OAWebBean webBean)
{
super.processRequest(pageContext, webBean);
ImpStudentAMImpl AM=(ImpStudentAMImpl)pageContext.getApplicationModule(webBean);

if(pageContext.getParameter("pStudentId")!=null)
{
String studentId=pageContext.getParameter("pStudentId");
AM.studentDetails(studentId);
}
}
PPR (Partial Page Rendering)

Screen shot:

Why PPR?

-PPR is used to change the contents of the page dynamically, if certain event takes place.

What is PPR?

-By using PPR the entire page is not refreshed.


-Only the changed portion of the web page be re-drawn
-This reduces the network traffic.

SPEL (Simple Possible Expression Language)

-SPEL is the basic foundation of PPR in OAF.


-SPEL is an expression that will either return TRUE or FLASE.
-Filed will be displayed if SPEL equates to TRUE.
-Filed will not be displayed if SPEL equates to FALSE.
-Let’s say you wish to hide field’s Spouse and Children based on marital status selected
dynamically. In order to hide these fields, you can simply set the Rendered property of that field to
FALSE

Properties that can be modified at run time (Using SPEL)

Rendered: To conditionally make a filed in OAF displayed.


ReadOnly: To conditionally make a enterable or non-enterable.
Required: To conditionally make a field mandatory or non-mandatory.
Disabled: To conditionally make a field disable or enable.

Syntax of the SPEL:

${oa.ViewObjectName.TransientAttribute}

Steps:
-Create table
-Create EO and Vo for that table.
-Create a row

Above 3 steps we have already done.


- Field Marital Status set below properties
Action: FirePartialAction
Event : Status
-Create one transient attribute
Name: StatusTr
Type: Boolean
Updatable: Always

-Prepare SPEL syntax

${oa.impStudentHeadersVo.StatusTr}

-Fields Spouse and children set below property with SPEL

Disabled: ${oa.impStudentHeadersVo.StatusTr}

PPR setup has been done ,now coding part starts.

AM: ImpStudentAM

public void statusPPR(String status)


{
StudentHeadersEOVOImpl vo = getStudentHeadersEOVO();
if(“MARRIED”.equals(status))
{
row.setAttribute("StatusTr", Boolean.FALSE);
} else
{
row.setAttribute("StatusTr", Boolean.TRUE);
}
}

CO: ImpStudentRegistrationCO

if("status".equals(pageContext.getParameter(EVENT_PARAM)))
{
if(pageContest.getParameter(“MaritalStatus”)!=null)
{
String status= pageContest.getParameter(“MaritalStatus”);
AM. statusPPR ();
}

Dependent LOV:

-Create LOV for Country


ImpCountryLOVVO query

select country_code,name from PA_COUNTRY_V

-Create LOV for State

ImpStateLOVVO query

select meaning,description,tag
from fnd_lookup_values
where lookup_type='IMP_STATES'

In both queries country_code and tag is the common column.

country_code=tag

User has to select value in SupplierLov first then only user can select value in SupplierSiteLov.

If user will try to select value in SupplierSiteLov without selecting any value in SupplierLov then
error message will come like

After successfully creation two lov’s create forms value items

Name: CountryFv
Type: formValue

-Country item:

1stLovMappingproperties:

LOV Region item: Name


Returnto: Country
Criteria item: Country

Create one more lov mapping for country i.e. special lov mapping and set below properties.
LOV Region item: Country_code
Returnto: CountryFv

Here we are getting the Country_code value and returning to CountryFv i.e formvalue.

-States item:

1stLovMappingproperties:

LOV Region item: Meaning


Return to: State
Criteria item: State

Create one more lov mapping for states i.e. special lov mapping and set below properties.
LOV Region item: tag
Criteria item: CountryFv

Here CountryFv holds the country_code value selected in country field and we are searching with
same country_code value in State LOV.

Dependent Pick List:

1)Create picklist for BQCourseName

ImpBQCourseNameVO query:

select lookup_code,meaning
from FND_LOOKUP_VALUES
where LOOKUP_TYPE = 'IMP_LU_BQ_COURSE';

2)Create picklist for BQSpeialization

ImpBQSpecialization query :

select lookup_code,meaning
from FND_LOOKUP_VALUES
where LOOKUP_TYPE = 'IMP_LU_BQ_SPECIALIZATION';

Now user wants to filter specialization values based on course selection at runtime
dynamically, We can achive the same by dependent pick list .

Steps:

-Set BQCourseName below properties:

Action: firePartialAction
Event : BQCourseEvent

-Get the above firePartialAction in processFormRequest method of the co and filter the
specialization vo based on the value selected in BQCourseName

AM: ImpStudentAM:

Public void validateBQSpecialization(String bqCourseName)


{
OAViewObjectImpl bqVO=getImpBQSpeicalizationVO() ;
String where="TAG='"+bqCourseName+"'";
bqVO.setWhereClauseParams(null);
bqVO.setWhereClause(where);
bqVO.executeQuery();
}

public void validatePGSpecialization (String pgCourse)


{
OAViewObjectImpl pgVO= getImpPGSpecializationVO();
String where="TAG='"+pgCourse+"'";

pgVO.setWhereClauseParams(null);
pgVO.setWhereClause(where);
pgVO.executeQuery();
}

CO: ImpStudentRegistrationCO:

String bqCourseName=new String();


if(“BQCourseEvent”.equals(pageContest.getParameter(EVENT_PARAM))
{
If(pageContest.getParameter(“BQSpecialization”)!=null)

{
String bqCourseName= pageContest.getParameter(“BQSpecialization”);
AM. validateBQSpecialization (bqCourseName);
}
}

if("PGCourseEvent".equals(pageContext.getParameter(EVENT_PARAM)))
{
if(pageContext.getParameter("PGCourseName")!=null)
{
String pgCourse=pageContext.getParameter("PGCourseName");
AM. validatePGSpecialization (pgCourse);
}
}

Validations and Cases:

1) First Name, Last Name, Mobile no, OR and Gender is mandatory.


2) DOR should be equals to the current date
3) Mobile no should be equals to 10 digits
4) Student should not be delete if user exist in training
5) IN update FirstName, LastName, DOR and Gender should be in read-only mode.
6) I Agree TNC is required.
7) Tip messages.
8) Page title should be change in update mode.
9) Training end date should be greater than Training start date.
10) Training start date should be greater than or equals to the DOR.
11) In Employee creation empno should not be duplicate.

Deployment Steps:

1) Copy the Class files and move to into server


We can get class file >>F:\OAF\jdevhome\jdev\myclasses\imp
\myprojects
(imp) Load into server (java TOP) >>D:\oracle\viscomn\java\

2) Run the XML import Scripts in Command Prompt


>>>F:\OAF\jdevbin\jdev\bin

For every Page and every Lov region

ImpStudentResitrationPG:

import
D:\OAF\jdevhome\jdev\myprojects\imp\oracle\apps\po\student\fourth\webui\ImpStudentR
egistrationPG.xml -username apps -password apps -rootdir D:\OAF\jdevhome\jdev\myprojects\
-dbconnection
"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=APPS.ora.com)(PORT=1521))(CONNECT
_DATA=(SID=VIS)))"

ImpStudentSearchPG:

import
D:\OAF\jdevhome\jdev\myprojects\imp\oracle\apps\po\student\fourth\webui\ImpStudentS
earchPG.xml -username apps -password apps -rootdir D:\OAF\jdevhome\jdev\myprojects\ -
dbconnection
"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=APPS.ora.com)(PORT=1521))(CONNECT
_DATA=(SID=VIS)))"

ImpStudentDetailsPG:

import
D:\OAF\jdevhome\jdev\myprojects\imp\oracle\apps\po\student\fourth\webui\ImpStudentD
etailsPG.xml -username apps -password apps -rootdir D:\OAF\jdevhome\jdev\myprojects\ -
dbconnection
"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=APPS.ora.com)(PORT=1521))(CONNECT
_DATA=(SID=VIS)))"

ImpCountryLOVRN:

import
D:\OAF\jdevhome\jdev\myprojects\imp\oracle\apps\po\student\fourth\lov\webui\ImpCou
ntryLOVRN.xml -username apps -password apps -rootdir D:\OAF\jdevhome\jdev\myprojects\ -
dbconnection
"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=APPS.ora.com)(PORT=1521))(CONNECT
_DATA=(SID=VIS)))"

ImpStateLOVRN:
import
D:\OAF\jdevhome\jdev\myprojects\imp\oracle\apps\po\student\fourth\lov\webui\ImpState
sLOVRN.xml -username apps -password apps -rootdir D:\OAF\jdevhome\jdev\myprojects\ -
dbconnection
"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=APPS.ora.com)(PORT=1521))(CONNECT
_DATA=(SID=VIS)))"

ImpStudentLOVRN:

import
D:\OAF\jdevhome\jdev\myprojects\imp\oracle\apps\po\student\fourth\lov\webui\ImpStud
entLOVRN.xml -username apps -password apps -rootdir D:\OAF\jdevhome\jdev\myprojects\ -
dbconnection
"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=APPS.ora.com)(PORT=1521))(CONNECT
_DATA=(SID=VIS)))"

3) Next Go to apps

System administrator Create Function for a page

Description tab:
Function Name : IMP_STUDENT_REGISTRATION
User Function Name: Imp Student Registration
Description : Imp Student Registration

Properties Tab:

Type: SSWA JSP function

WebHTML Tab

Function:
HTML call: OA.jsp?page=/imp/oracle/apps/po/student/webui/ImpStudentResitrationPG

Note: DO the same for all the pages

4) Attach these Functions to Imp Student Operations menu to Imp Student Operations
responsibility to User.
5) Bounce the apache.

Employee Creation (using Pl-Sql ):

The page is used to create the employee, here we were creating employee using pl-sql
package or procedure and validating the employee using sql query.
In this page we get know how to call pl-sql packages and sql queries in OAF. Oracle
provided two classes for us to achieve the same Callable statements and Prepare Statements

Callable statements is used to call the pl-sql packages in OAF


Prepared Statements is used to call SQL queries (functions) in OAF

Screen shot:
Emp Table:

CREATE TABLE IMP_EMP(empno NUMBER(4) PRIMARY KEY,


ename VARCHAR2(10 BYTE),
job VARCHAR2(9 BYTE),
mgr NUMBER(4),
sal NUMBER(7,2),
deptno NUMBER(2),
comm NUMBER(2),
creation_date DATE,
created_by NUMBER(15),
last_update_date DATE NOT NULL,
last_updated_by NUMBER(15) NOT NULL)

Procedure:

CREATE OR REPLACE PROCEDURE IMP_CREATE_EMPLOYE(


p_empno NUMBER
,p_ename VARCHAR
,p_job VARCHAR
,p_mgr NUMBER
,p_sal NUMBER
,p_deptno NUMBER
,p_comm NUMBER
,p_emp_id OUT NUMBER
)
AS
BEGIN
BEGIN
fnd_global.apps_initialize(fnd_global.user_id
,fnd_global.resp_id
,fnd_global.resp_appl_id
);
END;

SELECT emp_seq.NEXTVAL
INTO p_emp_id
FROM DUAL;

INSERT INTO IMP_EMP


(empno
,ename
,job
,mgr
,sal
,deptno
,comm
,creation_date
,created_by
,last_update_date
,last_updated_by
)
VALUES (p_empno
,p_ename
,p_job
,p_mgr
,p_sal
,p_deptno
,p_comm
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
);

COMMIT;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line(fnd_file.LOG, 'Exception at inserting' || SQLERRM);
END;
CO: ImpEmployeeCreation:

public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)


{
super.processFormRequest(pageContext, webBean);

ImpStudentAMImpl AM = (ImpStudentAMImpl)pageContext.getApplicationModule(webBean);
String number=new String();
String salary=new String();

if(pageContext.getParameter("Save") != null)
{
/*************************************************
* Prepared
* ***********************************************/
int count=0;
String empno=pageContext.getParameter("EMPNumber");

try
{
PreparedStatement prpdStmt1 =
AM.getOADBTransaction().getJdbcConnection().prepareStatement("select count(empno) from
IMP_EMP where empno='"+empno+"' ");
ResultSet rs=prpdStmt1.executeQuery(); //Cursor fetch row

while(rs.next())
{
count=rs.getInt(1);
}
if(count >0)
{
throw new OAException("Employee already exist.", OAException.ERROR);
}
else
{
System.out.printline(“Employee number not exist.”);
}
}

catch(Exception e)
{
throw new OAException("Employee already exist.", OAException.ERROR);
}

/***************************************************
* Callable
* *************************************************/

String seq=new String();


try
{
CallableStatement cs = AM.getOADBTransaction().getJdbcConnection().prepareCall("{call
IMP_CREATE_EMPLOYE(?,?,?,?,?,?,?,?)}");
number=pageContext.getParameter("EMPNumber").toString();
int eNumber=Integer.parseInt(number);
cs.setInt(1,eNumber);

String name=pageContext.getParameter("EMPName").toString();
cs.setString(2,name);

String job=pageContext.getParameter("Job").toString();
cs.setString(3,job);

String manager=pageContext.getParameter("Manager").toString();
int eManager=Integer.parseInt(manager);
cs.setInt(4,eManager);

salary=pageContext.getParameter("Salary").toString();
int eSalary=Integer.parseInt(salary);
cs.setInt(5,eSalary);

String deptNo=pageContext.getParameter("DeptNo").toString();
int eDeptno=Integer.parseInt(deptNo);
cs.setInt(6,eDeptno);

if(pageContext.getParameter("Commission")!=null
&& !pageContext.getParameter("Commission").equals(""))
{
String commision=pageContext.getParameter("Commission").toString();
int ecommision=Integer.parseInt(commision);
cs.setInt(7,ecommision);
}
else
cs.setInt(7,0);
cs.registerOutParameter (8, Types.INTEGER);
cs.execute();
seq=cs.getString(8);
OAMessageTextInputBean
internalId=(OAMessageTextInputBean)webBean.findIndexedChildRecursive("InternalId");
internalId.setValue (pageContext, seq);
cs.close();
AM.getOADBTransaction().commit();
throw new OAException("Employee Created sucessfully.", OAException.CONFIRMATION);
}

catch(Exception e)
{
System.out.println("Catch::"+e.getMessage());
throw new OAException(e.getMessage(), OAException.CONFIRMATION);
}
}
}
Personalization:
To change Look and feel of seeded oracle self-service page, we need to follow the
process called personalization. E.g. you may want to add a new field or change label of any field etc.
Initially we need to enable the Personalization link in oracle apps instance, use profile called
Personalization Self service definition profile to enable personalization link.
The same we can set profile options user, responsibility and site level. once we set this profile to yes
then Personalization link appears.

-Add extra field in a region or LOV. Can be done only at Site level
-Display / Hide a field/region in a page
-Make a field read-only
-Display / Hide DFF in a region. You can also specify default editable/viewable DFF contexts
-Conditionally display/hide fields. Need to know SPEL (expression language) for this .

Personalization Levels:

Site: Usually set for adding field/region item which can be done only at site level.
Organization: refers to operating unit
Responsibility: refers to responsibility
Function: If you define same OA page as two different menu functions then you can personalize
both differently

Personalization’s can be enabled at the function, site, operating unit or responsibility


level. Personalization’s at lower levels override personalization’s at higher levels. Values inherit the
definition from the level immediately above unless changed.

Functional administrator responsibility using this we can move the personalization’s from
instance to other instance.
Customization:
To modify existing business logic or to add new business logic to seeded oracle self-service page,
we need to follow process called customization.
Under this we have 4 processes:

1. CO Extension 2. VO Extension 3. EO Extension 4. AM Extension

CO Extension:
In seeded if you we need to change the business functionality will got for extension of co.

Steps:
Get the exact requirement from client and decide whether we need of co extension or vo extension.

How can you know whether its required need of co or vo extension..

--If any changes required in coding will go for co extension to full the requirement.
--If any change required in query of vo will go for vo extension to full fill the requirement.
--Open the seeded the page that is you want to do the extension
--Click on about this page link, here you can see all BC4J components of the page. find out the co
name and full path and download it from server. Include those directories in your Project Class
path in Jdevlp.

Set profile option FND: Diagnostics: Yes to enable the About this page

--Comes to J-Developer
--Create OAWorkspace and OAProject
ImpExtendWorkspace and ImpExtendProject
-Right click on project create new class

Name: ImpStarndardCO
Package: imp.oracle.apps.po.req.webui
Extends: Standard CO (Select the seeded co, that is we recently downloaded)

--Click on ok, its creates new controller it extend the seeded co.
public class ImpStandardCO extends StandardCO
{
public void processRequest(OAPageContext pageContext, OAWebBean webBean)
{
super.processRequest(pageContext, webBean);
}
}
--write the code to full fill the requirement.
--After successfully compilation of co goes to my classes and transfer to java (imp)
Ensure that personalization is turned on for your username.
This can be done by setting profile "Personalize Self-Service Defn" to Yes

--Click on Personalize Page link on right handside top corner.


--Select "Complete View" and "Expand All" Option in personalization page.
--Here try to find the exact region(the region contains the seeded co) where you want add co
and give the full path of Custom co and click on apply to save the changes.

Why is the Controller extension unsafe?

Two reasons:-

Point 1. If in your extended CO class, you write a method named processRequest, then framework
will execute this method in your custom class. Framework will not execute the method in original
controller class.

Point 2. In Oracle Fusion Applications, the User Interface layer will certainly change, and controller
may not exist in FUSION in same manner as we see it now. Hence you may have to re-
develop/design your extension to controller in equivalent technology in Fusion Apps [ADF with
Faces].

What can we do to make the controller extension safe?


Whilst we can't do much about the "Point 2", but we can certainly play safe on "Point 1".

If in your extended controller, you call super () method, then there is a possibility that your
extension is safe.
VO Extension:

In seeded if you we need to change /add new business functionality will got for extension of vo.

Steps:
Get the exact requirement from the client and decide whether we need of co extension or vo
extension.

How can you know whether its required need of co or vo extension..

--If any changes required in coding will go for co extension to full the requirement.
--If any change required in query of vo will go for vo extension to full fill the requirement.
--Open the seeded the page that is you want to do the extension
--Click on About this page link, here you can see all the BC4J components of the page. Try find out
the vo name and full path that you want extend and download it from server.

Set profile option FND: Diagnostics: Yes to enable the About this page

--download all related vo files .xml, .Impl, .RowImpl files. Include those directories in your Project
Class path in jDev

--Comes to J-Developer
--Create OAWorkspace and OAProject
ImpExtendWorkspace and ImpExtendProject
--Create new BC4J component same as the seeded BC4j but it should be in custom top.

Name : StandardVO
Package: imp.oracle.apps.po.req.server
Extends : ImpStandardCO (Select the seeded vo, that is we recently downloaded)

--Click on next button, here give the modified query and test it.
--After successfully compilation of it will creates new .xml,Impl,RowImpl files.
--Right click on .jpx to do the substitution
--Available window select seeded vo and Substitute window select the customVO and click on add
and ok button.
--Move these files to java top into the server (imp top/custom top)
-- Import the substitution definition using jpx ,run the jpx import command to update in MDS
repository.
--Then bounce apache.
--Open the seeded page click on Personalization link to add the vo
--Find exact region and set below two properties

ViewInstacne: StandardVO
ViewAttriuites: NewAttribute

Note: Here will give the standard vo name.


Important Profile Options:

1-FND_Diagnostics:
Setting the FND : Diagnostics (FND_DIAGNOSTICS) profile option to "Yes" will enable the
diagnostics global button to be rendered on the screen. Pressing this button brings the user to an
interface where the user can choose what type of logged messages to display.

2-Personalize Self-Service Defn –


Set this profile to Yes to allow personalizations.

3-FND: Personalization Region Link Enabled:


Valid values: Yes - renders the "Personalize Region" links above each region in a page. Each link
takes you first to the Choose Personalization Context page, then to the Page Hierarchy
Personalization page with focus on the region node from which you selected the "Personalize
Region" link.

4-Disable Self-Service Personalization –


Yes will disable all personalization’s at any level.

5-FND: Personalization Document Root Path (new in 11.5.10):


Required to migrate personalizations, set this profile option to a tmp directory with open
(777) permissions for migrating personalization between instances.
Interview questions:
1)How many custom(self service ) page’s developed?
2)Have you done co ,vo extensions and personalization’s?
3)What is the client requirement for custom oaf pages?
4)What is the client requirement for extensions?
5)Explain MVC arctecutre?
6)What is Model?
7)What is entity object?
8)What is View object?
9)What is Association?
10)What is View Link?
11)What is Application module?
12)What is View?
13)What is Controller?
14)What is Region and Item?
15)How to create LOV?
16)How to create Pick list or message Choice or Pop list
17)How to create Dependent LOV?
18)How to create Dependent Pick list?
19)What is form Value?
20)Steps to create Creation page?
21)Steps to create Search page?
22)Steps to create Edit page?
23)Steps to create Delete page?
24)How to create Radio group?
25)How to navigate between pages?
26)How to pass parameters from one page to another page?
27)How to get the profile values in oaf?
28)How to get sequence value in oaf?
29)Validations?
30)Steps to set Jdevlp?
31)What is SPEL?
32)what is PPR?
33)How to make change item properties in process Request?
34)How to make filed Read-Only dynamically in processFormRequest?
35)What are the properties we can set using SPEL?
36)SPEL syntax?
37)How to call sql or packages in OAF?
38)How to Enables Personalization’s?
39)How to do Personalization?
40)How to find out the page components?
41)How to enable to AboutThispage link?
42)How to do co extension?
43)How to do vo extension?
44)Deployment steps?
45)Why we need to run import script?
46)What happens if run import script?
46)How to disable the personalization’s?
47)What is OADailog page?
48)How to create Dialog page?
49)How to migrate the Personalization’s from Develop to testing instance?
50)How to migrate the Extensions from Develop to testing instance?

You might also like