<-----Google Analytics Code Start----> <-----Google Analytics Code Close---->
Skip to content

Green

color

Default screen resolution  Wide screen resolution  Increase font size  Decrease font size  Default font size  Skip to content Default color Pink color Green color Green color

Related Items

Home
This website has now moved to http://apps2fusion.com





D2K to OA Framework Transition | Print |  E-mail
Written by Anil Passi   
Saturday, 06 January 2007
Ram Kumar emailed me a very simple question, "What is the difference between D2K form and OA Framework". Its 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 .

To answer to Ram's question, I will re-visit my own experience of implementing HelloWorld program in "OA Framework". When I implemented HelloWorld an 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 Tutorials without understanding them. Hence in this article, I will try to explain in simple manner the meaning of OA Framework HelloWorld Program and compare the steps to D2k forms[where possible]. To keep things simple, only basics will bediscussed.

Following key Steps were needed for HelloWorld[visit Oracle's tutorial for complete list]
Step 1. Created 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:-
  a. ak is the short name of the Application in Oracle [it means fnd_applications.short_name].
  b. hello is the name of your project.

Step 2.

Next, you will create a OAPage within hello project.
Think of OAPage as the fmx file itself in D2K. I am saying so because this page gets attached to the form function.
a. This page will be created within hello project, hence the package name oracle.apps.ak.hello.webui
b. Note the webui, its a convention to have page in webui,means this page represents the Web User Interface
c. 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.
a. Region is what will store your fields. Text input fields will be of type messageTextInput. Think of Canvas in D2K[to an extent].
b. 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.
a. The itemStyle should be submitButton, in case you want the page to be submitted when this button is clicked.
b. 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 createdprocessRequest[for UI Rendering Handling] and processFormRequest.
Think of processRequest as WHEN-NEW-FORM-INSTANCE, though processRequest is very restrictive.

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.
a. Use getParameter to access the field value
b. To set the value of the field, use
OAMessageTextInputBean fieldHelloName =
        (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 ViewObject[in latter tutorials], then do not use setText in controller.
Note 3. For control fields[that are not based on ViewObjects], you can use setText to assign values in processRequest method.


Lets take some notes to expand beyond the HelloWorld Project
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.
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].
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 XMLImporter command.
See article on XML Importer if interested.
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 your java files will go underneath java top/oracle/apps/../.. etc.
4. When building your 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 [to an extent]
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.
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.
7. Inside the controller, all the Database Related interactions for example interaction with View Objects happens 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();
8. In D2K, we have control block or a block based on database view. Similarly, in OA Framework, if the field does not have viewObject attached, then its like a control field. Hence in HelloWorld example, field HelloName is a control field[in D2K terminology]. A viewObject can either be based on a view/table.synonym or on a SQL statement.
9. I wish to access the fields in multi record block that is based on viewObject. Can I do this in Controller?
Sure you can. To traverse through those records, do the below
  a. Get the reference to the ViewObject using (OAViewObject)oapagecontext.getApplicationModule(oawebbean).findViewObject("VO Name Here")
  b. Loop through the records in View Objects using count returned from oaviewobject.getFetchedRowCount()
  c. 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 ");



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 duringprocessRequest.
Those who are familiar with D2K forms, something like pre-query may be written in this method.




Comments (19)add
...
written by Prativa , March 01, 2007
Hi Anil,First of all let me thank you for bringing up such a nice site..
There are so many things in the site, just confused where to start.

Thanks a lot,
Prativa
...
written by Anil Passi , March 02, 2007
Hi Prativa,

If you can let me know your knowledge background and what you seek to learn, then I might be able to provide help in guiding you.

Thanks,
Anil Passi
...
written by Anil Passi , March 02, 2007
Hi Prativa,

If you can let me know your knowledge background and what you seek to learn, then I might be able to provide help in guiding you.

Thanks,
Anil Passi
...
written by Gopi , March 07, 2007
Anil,

This is one of the best sites I love reading.Thanks for explaining so clearly. I just started learning JDeveloper.

Thanks
Gopi
...
written by Praveen , March 29, 2007
Hi anil
i have problem to create folders in the D2K forms 6i.(i.e Folder options ). plz give my some idea for that folder options

thanks & regards
Praveen.G
...
written by Sunil , March 30, 2007
Hi Anil,
I wish to congratulate for such a great work. I would appreciate if you could guide me take up carrier in Oracle Apps. Having spent 8 years in Oracle Pl/sql form,report, now i m working in Oracle Apps.(CRM). But not able to decide where to start. Whether become functional or Technical guy OA.
Regards
Sunil
...
written by Anil Passi , March 31, 2007
Hi Sunil
8yrs in any field is a long time. If you understand how CRM processes work, and how they map to business practices in real world, then functional switch will be a good move. Having said that, keep learning new upcoming technologies too until you get a functional role in project. Always have a backup.
Thanks
Anil
...
written by Anil Passi , March 31, 2007
Sunil

8yrs in any field is a long time. If you understand how CRM processes work, and how they map to business practices in real world, then functional switch will be a good move.
Having said that, keep learning new upcoming technologies too until you get a functional role in project.
Always have a backup.

Thanks
ANil
...
written by sameer , April 05, 2007
I am working on AK Developer(11.5.smilies/cool.gif technology . What is the difference between AK Developer/Framework(11.5.smilies/cool.gif, OA Framework(11.5.10.2), and ADF Framework (Release 12i) ? Is there any major structural changes from AK Developer/Framework(11.5.smilies/cool.gif to.. ADF Framework (Release 12i) ?
...
written by Michu , May 14, 2007
Hi Anil,

Thanks for keep sending the info.

How do you create method in Application Module? When you right click on Application Module name there is no option of creating method. Then how?

Thanks,
Michu
...
written by Anil Passi , May 14, 2007
Hi Michu,

Simply go inside the ApplicationModuleImpl java class, and write code for your method there.

Thanks,
Anil
...
written by Michu , May 15, 2007
Hi Anil,

Thanks for responding quickly. Keep your good work.

Michu
Thanks
written by Sreedhar Ravula , October 05, 2007
Hi Anil,

It very glad to see your site, today first time I saw your site smilies/smiley.gif. First of all let me thank you for your good posts on site.
It helps me a lot to get into the OAF.
Thanks
Sreedhar

...
written by Srinath , December 09, 2007
Anil,

Let me first congratulate for this excellent work.
I would like to know if there are any restrictions on the JDeveloper version that could be used for development for integration with Oracle Apps. Also, please let me know if there are any plug-ins that need to be installed.
D2K Tutorial
written by TV , December 17, 2007
Hi Anil

I browsed the whole site but couldnt find a forms6i tutorial.Can you pls point to me where i can find it ?

Thx
Rajanikant

OAframe works
written by sureshkumar. , January 28, 2008
Hi All,
I am working on PL/SQL. I have Knowledge on APPS and D2K. Now I want to learn OAFramework.
Can you please tell me what r the pre-requisites to learn this course.

Thank you,
Suresh.
my d2k form is nt working in apps
written by rakesh9911890887 , February 13, 2008
hell friends

I have designed a D2K form and its not working in apps..its show a error when we run it on apps....according to me its not compiling the form properly we compile it in D2K...
One more thing my Apps is on Windows Plateform not on linux....

plz tell me how to compile it...or tell me solution..
plz mail me the solution at
rakesh_verma143@rediffmail.com

bye

rakesh
OA Framework - How to modify VO's
written by Sanjaya Patro , February 22, 2008
Hi Anil,

I've been reading your articles about OA Framework. Great. I've development experience in pl/sql, forms and reports in the oracle application platform. I'm learning oa framework and self service personalization at this point. But I've now got specific requirement to modify a VO to increase the overtime amount.
Scenario is:
Previously this has been implemented as an overtimeVO function jsp page. There are two VO fields one is total days and other one is amount field in the page. The current limit has been implemented in the next button. How do I change the current limit?
This is my first task to deal with self service using OA framework technology. I've got only little knowledge about Oracle JDeveloper and OA Framework MVC pattern. Can you please help me where to start?

Do I need to ftp only the overtimeVO page (JSP) and open in jDeveloper or any other components related to this?

Regards,
Sanjaya Pator
Extending VO
written by kishore Ryali , February 28, 2008
Hi Sanjaya
Im also working on Extending standard VO to show some additional information in iProcurement.

As a start up, identify the VO associated to ur page by using "About this page" link which is enabled through a profile value. Then download all the files from the $JAVA_TOP/oracle/apps//.... to ur local drive.

1. Create a new project and set the classpath of the project to the downloaded files above.
2. Extend the standard VO identified above and change the query associated with it & create a new VO.
3. Use substitutions to replace the original VO with the extended VO.
4. Migrate ur files to the apps server.



You must be logged in to a comment. Please register if you do not have an account yet.

busy