You are on page 1of 4

Thursday Apr 12, 2012

Oracle D2K to OA Framework Transformation


By PRajkumar on Apr 12, 2012
What is the difference between Oracle D2K form and OA Framework?
It is a very innocent but important question for someone that desires to make transition
from D2K to OA Framework. I hope you have already read and implemented OA
Framework Getting Started.
I will re-visit my own experience of implementing HelloWorld program in "OA
Framework". When I implemented HelloWorld a year ago, I had no clue as to what I was
doing & why I was doing those steps. I merely copied the steps from Oracle Tutorial
without understanding them.
Hence in this blog, I will try to explain in simple manner the meaning of OA Framework
HelloWorld Program and compare the steps to D2K form [where possible]. To keep
things simple, only basics will be discussed.
Following key Steps were needed for HelloWorld
Step 1
Create a new Workspace and a new Project as dictated by Oracle's tutorial. When
defining project, you will specify a default package, which in this case was
oracle.apps.ak.hello
This means the following: -
ak is the short name of the Application in Oracle
[means fnd_applications.short_name]
hello is the name of your project
Step 2
Next, you will create a OA Page within hello project
Think OA Page as the fmx file itself in D2K. I am saying so because this page gets
attached to the form function.
This page will be created within hello project, hence the package name
oracle.apps.ak.hello.webui
Note the webui, it is a convention to have page in webui, means this page represents
the Web User Interface
You will assign the default AM [OAApplicationModule]. Think of AM "Connection
Manager" and "Transaction State Manager" for your page
I can't co-relate this to anything in D2k, as there is no concept of Connection Pooling
and that D2k is not stateless. Reason being that as soon as you kick off a D2K Form, it
connects to a single session of Oracle and sticks to that single Oracle database session. So
is not the case in OAF, hence AM is needed.
Step 3
You create Region within the Page.
Region is what will store your fields. Text input fields will be of type messageTextInput.
Think of Canvas in D2K. You can have nested regions. Stacked Canvas in D2K comes the
closest to this component of OA Framework
Step 4
Add a button to one of the nested regions
The itemStyle should be submitButton, in case you want the page to be submitted
when this button is clicked
About
Puneet Rajkumar
Search
Enter search term:
Search only thisblog
Recent Posts
Under Maintenance
Oracle External Bank Payment APIs
API to Create External Bank Branch
API to Create Bank
API to Create APSupplier Site
Oracle APSupplier APIs
API to Create APSupplier
OTBI Developer Guide
OTBI vs. OBIA
Oracle Application in DMZ
(Demilitarized Zone)
Top Tags
add_resp_to_fnd_user
adf_developer_guide
adf_helloworld_tutorial
am_extension_in_oaf
api_create_external_bank_branch
api_create_supp_bank
api_supplier_site
api_to_create_ap_supplier
api_to_create_fnd_user
autocustomize_oaf_search_page
bounce_apache_server call
call_d2k_form_from_oaf_page
clear_result_table_in_oaf
commit_in_sql
controller_extension_in_oaf
cr_upd_emp_phone_detail
cr_upd_emp_salary
create_emp_payment_method
create_employee_address
create_employee_api
create_employee_contact
create_employee_element_entry
create_lov_in_adf_application
create_master_detail_form_in_oracle_adf
create_oaf_search_page
create_simple_search_form_in_oracle_adf
create_state_tax_rule
create_update_on_one_click d2k
data_entry_form_in_adf
delete_employee_element_entry
delete_records_in_oaf_page
dependent_lov_in_oaf
BLOGS HOME PRODUCTS & SERVICES DOWNLOADS SUPPORT PARTNERS COMMUNITIES ABOUT Login
Welcome to My Oracle World
Puneet Rajkumar
Welcome to My Oracle World 6/2/2014
https://blogs.oracle.com/prajkumar/tags/oracle_d2k_to_oa_transformation 1 / 4
There is no WHEN-BUTTON-PRESSED trigger in OAF. In Framework, you will add
a controller java code to handle events like Form Submit button clicks. JDeveloper
generates the default code for you. Primarily two functions [should I call methods]
will be created processRequest [for UI Rendering Handling] and
processFormRequest
Think of processRequest as WHEN-NEW-FORM-INSTANCE, though
processRequest is very restrictive.
Note
What is the difference between processRequest and processFormRequest?
These two methods are available in the Default Controller class that gets created.
processFormRequest
This method is commonly used to react/respond to the event that has taken place, for
example click of a button.
Some examples are
if(oapagecontext.getParameter("Cancel") != null) (Do your processing for Cancellation/
Rollback)
if(oapagecontext.getParameter("Submit") != null) (Do your validations and commit here)
if(oapagecontext.getParameter("Update") != null) (Do your validations and commit here)
In the above three examples, you could be calling oapagecontext.forwardImmediately to
re-direct the page navigation to some other page if needed.
processRequest
In this method, usually page rendering related code is written. Effectively, each GUI
component is a bean that gets initialised during processRequest. Those who are familiar
with D2K forms, something like pre-query may be written in this method.
Step 5
In the controller to access the value in field "HelloName" the command is
String userContent = pageContext.getParameter("HelloName");
In D2k, we used :block.field.
In OAFramework, at submission of page, all the field values get passed into to
OAPageContext object.
Use getParameter to access the field value
To set the value of the field, use
OAMessageTextInputBean field
HelloName = (OAMessageTextInputBean)webBean.findChildRecursive("HelloName");
fieldHelloName.setText(pageContext,"Setting the default value" );
Note when setting field value in controller:
Note 1. Do not set the value in processFormRequest
Note 2. If the field comes from View Object, then do not use setText in controller
Note 3. For control fields [that are not based on View Objects], you can use setText to
assign values in processRequest method
Lets take some notes to expand beyond the HelloWorld Project
Note 1
In D2K-forms we sort of created a Window, attached to Canvas, and then fields within
that Canvas.
However in OA Framework, think of Page being fmx/Window, think of Region being a
Canvas, and fields being within Regions.
This is not a formal/accurate understanding of analogy between D2k and Framework,
but is close to being logical.
Note 2
In D2k, your Forms fmb file was compiled to fmx. It was fmx file that was deployed on
mid-tier. In case of OAF, your OA Page is nothing but a XML file. We call this MDS
[meta data].
dependent_lov_in_oaf
deploy_oaf_page
download_conc_prog_ldt_using_shell_script
enable_diagnostics_in_oracle_apps
enable_personalization_link_oaf
end_date_resp_for_fnd_user
entity_object_extension_in_oaf
eo_based_vo_extension_oaf
execute_parameterized_plsql_procedure
external_bank_payment_apis form
fromhost_name_url_of_oaf_page
hrms_hire_into_job_api
implement_poplist_in_oa_framework
implement_train_in_oaf_page
implementing_external_lov_in_oaf
Categories
Oracle
Personal
Archives
June 2014
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

Today
Bookmarks
Apps Tecnical Terms VS Real Time
Oracle Technology Network Blog
Techi Corner
Technology Newsletters
Trading Community Architecture (TCA)
Developer Guides
ADF Developer Guide
OAF Developer Guide
OTBI Developer Guide
Personalization/Extensions for OAF
Oracle APIs
Oracle APInvoice APIs
Oracle APSupplier APIs
Oracle External Bank Payment APIs
Oracle FNDUser APIs
Oracle HRMS APIs
New Blogs
Stay Connected
Menu
Blogs Home
Welcome to My Oracle World 6/2/2014
https://blogs.oracle.com/prajkumar/tags/oracle_d2k_to_oa_transformation 2 / 4
Whatever name you give to "Page" in OAF, an XML file of the same name gets created.
This xml file must then be loaded into database by using XML Importer command.
Note 3
Apart from MDS XML file, almost everything else is merely deployed to your mid-tier.
Usually this is underneath $JAVA_TOP/oracle/apps/../..
All java files will go underneath java top/oracle/apps/../.. etc.
Note 4
When building tutorial, ignore the steps for setting "Attribute Sets". These are not
mandatory. Oracle might just have developed their tutorials without including these.
Think of these like Visual Attributes of D2K forms
Note 5
Controller is where you will write any java code in OA Framework. You can create a
Controller per Page or have a different Controller for each of the Regions with the same
Page.
Note 6
In the method processFormRequest of the Controller, you can access the values of the
page by using notation pageContext.getParameter("<fieldname here>").
This method processFormRequest is executed when the OAF Screen/Page is submitted
by click of a button.
Note 7
Inside the controller, all the Database Related interactions for example interaction with
View Objects happen via Application Module.
But why so? Because Application Module Manages the transaction state of the
Application.
OAApplicationModuleImpl oaapplicationmoduleimpl =
OAApplicationModuleImpl)oapagecontext.getApplicationModule(oawebbean);
OADBTransaction oadbtransaction =
OADBTransaction)oaapplicationmoduleimpl.getDBTransaction();
Note 8
In D2K, we have control block or a block based on database view. Similarly, in OA
Framework, if the field does not have view Object attached, then it is like a control field.
Hence in HelloWorld example, field HelloName is a control field [in D2K terminology].
A view Object can either be based on a view/table, synonym or on a SQL statement.
Note 9
I wish to access the fields in multi record block that is based on view Object. Can I do this
in Controller?
Sure you can. To traverse through those records, do the below
Get the reference to the View Object using
(OAViewObject)oapagecontext.getApplicationModule(oawebbean).findViewObject("VO
Name Here")
Loop through the records in View Objects using count returned from
oaviewobject.getFetchedRowCount()
For each record, fetch the value of the fields within the loop as
oracle.jbo.Row row = oaviewobject.getRowAtRangeIndex(loop index here);
(String)row.getAttribute("Column name of VO here ");
Category: Oracle ::: Tags: oracle_d2k_to_oa_transformation :::
Permanent link to this entry | Comments [0] :::
Weblog
Login
Feeds
RSS
All
/Oracle
/Personal
Comments
Atom
All
/Oracle
/Personal
Comments
Welcome to My Oracle World 6/2/2014
https://blogs.oracle.com/prajkumar/tags/oracle_d2k_to_oa_transformation 3 / 4
The views expressed on this blog are those of the author and do not necessarily reflect the views of Oracle. Terms of Use | Your Privacy Rights | Cookie Preferences
Welcome to My Oracle World 6/2/2014
https://blogs.oracle.com/prajkumar/tags/oracle_d2k_to_oa_transformation 4 / 4

You might also like