Friday, June 1, 2007

Extensions in OA framework

1. Introduction
2. What is Oracle Applications Framework?
3. Setting up your Environment
4. How to confirm whether actually go for extension or not?
5. BC4J Extensions
6. Deploying your extensions on the application server



1. Introduction

This purpose of this document is to help its readers understand the extensions in Oracle Applications Framework (OAF) and provide a general guideline as to how to create and deploy extensions in OAF.

This document is created based on experiences while implementing iProcurement module in R11.5.10 for one of US Banking Client.


2. What is Oracle Applications Framework?

Oracle Applications Framework is a development and deployment platform for Oracle Self-Service Web Applications. It is a
100% Java & XML, middle-tier application framework and services for the rapid development & deployment of HTML based applications. This framework is based on MVC archietecture (Model-View-Controller).















Correspondingly, MVC in OA Framework can be categorized as:
View – Common UIX-based HTML components used throughout Applications.
Controller – OA Controller responds to user actions, directs application flow.
Model – Business logic encapsulated in Business Components for Java view objects and entity objects.
OA Framework provides with two main features:

1.Personalizations
2.Extensibility

1. Personalization

Personalization means declaratively tailoring the user interface (UI) look-and-feel, layout or visibility of page content to suite a business need or a user preference.
Note that with personalization we are not adding a custom functional flow to the system. It plainly refers to modifying the User Interface with the capabilities provided by the framework, for a better user experience.

Examples of personalization include:

Changing the order of the column in a UI table
Making certain attributes as read-only
Hiding/Showing certain attributes to the user



2. Extensibility

Extensibility refers to the ability to programmatically extend an application's functionality. In other words, extending the n functionality of an application gives developer the ability of:

· Adding new content or business logic
· Extending/overriding existing business logic

The tool which we use for extending various applications in Oracle Applications 11i is JDeveloper.Oracle Self-Service Web Applications can be customized using extensibility feature as per business requirement, in following two ways:

· Customization by extensions: The Oracle Self-Service Web Applications can be customized as per business requirement by adding the custom code to the extended class of the base class. Oracle support this approach because in case of upgrading or applying any patch, if the base class file is replaced by a new class file, then the custom code will still be present in the extended class.


· Customization by modification: The Oracle Self-Service Web Applications can also be customized as per business requirement by adding the custom code to base class itself. However, Oracle does not support this , because in case of upgrading or applying any patch, if the base class file is replaced, then the custom code is removed and so, is the related functionality. That is why Oracle advises for customization by extensions.
With extension, custom functional flows can be created or existing business logic can be overridden to suit customer needs. Examples of extensions include:

· Extending View Objects in order to include an extra transient attribute.
· Extending Application Modules in order to add a new logic as per business requirement.


3. Setting up your Environment

In order to start with extensions we first have to setup appropriate environment for it, i.e. setup Jdeveloper environment. For setting JDeveloper environment, we follow following steps:

Download the latest version of JDeveloper (OAJdev.zip) which is patched for OA Framework from metalink.(We used 9.0.3 version of JDeveloper) and install it as per the instructions on metalink.

To start Jdeveloper go to JDev\jdevbin\jdev\bin and click
jdevw.exe (For convenience, we can create a shortcut of this icon on desktop.)

Put the dbc file extracted from server from <$FND_TOP>\secure\ and put it in appropriate folder i.e.
\dbc_files\secure
Here, refers to path till “jdev” directory in “jdevhome” directory of JDeveloper

Expand the Connections node in the JDeveloper System Navigator, and then expand the Database node. Right-click on the Database node, and select New Connection... to open the Connection Wizard. Follow the JDeveloper instructions to define a new database connection for the Oracle Applications database identified by the DBC file you selected above.

Please confirm that the dbc file does not contain any slashes in the line:
APPS_JDBC_URL=……
Originally the dbc file contains back slashes in this line it is extracted from Unix database server.



The various information needed to complete the connection wizard can be filled by opening the dbc file and then filling Host name, Port, Sid etc. If you get any errors while making the database connection, again cross check the database entries from dbc file and see that there are no back slashes in line
APPS_JDBC_URL=……
of the dbc file.

In order to set our module related environment in Jdeveloper,make a folder named “myclasses” under path \myclasses
Zip the application top from your UNIX application server specific to your module. Eg., since, we were working on IProcurement, so it was
$JAVA_TOP\oracle\apps\icx

Extract this under \myclasses. Please ensure that we have exactly same directory structure under myclasses folders as the zip file of application top has.

Under the directory structure C:\JDev\jdevhome\jdev there are two folders:
myclasses
myprojects
Ideally myclasses folder contain all the files of the application top related to that module, while in myprojects folder we should put only those packages and files are needed to be run, extended or customized. Also note, once a file in myprojects folder is compiled through jdev, a copy of its class file is automatically placed in myclasses.
But, there are a lot of dependencies between VOs and Eos, so, what we did in our implementation was that we unzipped the application top both in myclasses as well as myprojects folder.

In order to find which page to run, to start Oracle Applications from a specific responsibility, through local Jdev Apache server, login on Oracle Applications home page and click the responsibility specific to your module.
Like in our case it was I- procurement. Click on about the page link on this page in order to find relevant information.


NOTE:The about the page link is by default not available on every page. To make it available, two profile options need to set, to have the link ‘about the page’ and ‘Personalize this Page’ on each OA Page. In order to enable it, set these two profile options:

Personalize Self-service Defn (FND_CUSTOM_OA_DEFINTION) - set to “YES”
FND: Personalization Region Link Enabled - set to “YES”



In the above screenshot you can see the directory structure and exact page (red oval space) that opens up while clicking the I-procurement responsibility. In our case it was
oracle\apps\icx\icatalog\shopping\webui\ShoppingHomePG.xml
Now, make the same directory structure under myprojects folder and copy, paste ShoppingHomePG.xml i.e.
\myprojects\oracle\apps\icx\icatalog\shopping\webui\ShoppingHomePG.xml

Select File > New... to open the New... dialog (shown in the following screenshot). This dialog is also called the New Object Gallery.
Workspace Configured for Oracle Applications highlighted">
Choose General > Workspace Configured for Oracle Applications from the New... dialog, or highlight Workspaces in the Navigator and choose New OA Workspace... from the context menu. We'll be prompted to create an OA workspace. Verify that the default workspace directory name points to our own \myprojects directory, as shown in the following diagram. Modify the workspace file name as well (any name is okay for a workspace, such as Iproc.jws). Check the Add a New OA Project check box.


After you click OK, you will see the Oracle Applications Project Wizard.
In Step 1 of the wizard, verify that the default project directory name points to your own JDEV_USER_HOME\myprojects directory, as shown in the following diagram. Modify the project file name as well (any name is okay for a project, such as OAPjoject2.jpr). Set the default package name to
oracle.apps. Like in our case it was oracle.apps.icx
In Step 2 of the wizard we have to set the database connection and runtime connection. In Step3, Browse the correct dbc file here. Fill the runtime username and password .Fill the application short name specific to your module, like in our case it was “ICX” for iprocurement. (If you are unaware of application short name you can find it out from fnd_application_vl).To fill Responsibility key of the related responsibility (for iprocurement it is SELF_SERVICE_PURCHASING_5), you can login in oracle applications and then
System AdministratoràSecurity: ResponsibilityàDefine
Here query for the Responsibility name to get Responsibility key.




12. In order to add homepage of the responsibility(module), on which we are working to the current project, click the red circled button as shown in screenshot below:

We will browse the page which we found in step 4 in myprojects folder i.e.


\myprojects\oracle\apps\icx\icatalog\shopping\webui\ShoppingHomePG.xml
13. Right click ShoppingHomePG.xml and select Run ShoppingHomePG.xml
14. We will be able to see the homepage of the specific responsibility.
This completes all steps needed to develop suitable environment for extensions in particular page under specific responsibility in Oracle Applications 11i.

4. How to confirm whether actually go for extension or not?
In order to decide whether to actually go about extending a webpage or not, we take an example, which we implemented in I-Procurement. The requirement was that in a standard requisition details page, it looks like the screenshot below



Item number was not available. We had a requirement where we have to introduce an extra column in the table: LinesTableRN named as Item number, which will reveal item number of the item. We added an extra column through personalization, to reveal to item number , but to check whether item number is available in standard view objects of the page ,we have to check its availability in the about this page of the page.
Click “about this page” link, to find out information about various View Objects, application modules and controller objects. We also get information about directory structure and the page from this link. So, we get following information:

Page : /oracle/apps/icx/por/reqmgmt/webui/ReqDetailsPG
Application Module : ReqMgmtAM
Available View Objects : (All view objects that are available in ReqMgmtAM can be used)
Controller object : ReqDetailsCO

In order to analyze whether we need to actually extension or we can solve just by going through personalization, we analyzed all the view objects definitions by clicking each view object through about this page link and search whether item number is available in any view object or not .We found that non of the available view objects had item number, so, we are now confirmed of the approach, extension
We introduced an extra column in the table: LinesTableRN named as Item number, which will reveal item number of the item. We added an extra column through personalization and now we will have to extend any View Object available on the page(we choose ReqDetailsVO) to add an extra an extra transient column called item number and get it populated by some business logic.

5. BC4J Extensions
The best way to start the extensions is to mount the whole package in Jdeveloper. To do it we should browse through the server folder of the package. Like in our case we browsed

/oracle/apps/icx/por/reqmgmt/server

This folder contains a file called server.xml

Sometimes, it happens that some server.xml files are missing in the package which stops us from mounting the package in jdeveloper. In such case raise an SR with Oracle to provide patch for all server.xml files of the module or package your working. We raised it for Iprocurement module, as some server.xml files were missing. As soon as you apply this patch all the server.xml are available.

Now, in order to complete our extensions follow these steps:
1. Create Your New BC4J Package.
In your OAProject2.jpr project, create a new, empty BC4J package named .oracle.apps.icx.por.reqmgmt.server. i.e.
ftu.oracle.apps.icx.por.reqmgmt.server
2. Create Your New View Object (VO) and transient attribute
Create a new VO, named ReqDetailsVO, that extends ftu.oracle.apps.icx.por.reqmgmt.server. ReqDetailsVO i.e.
FtuReqDetailsVO
Create the VO in the ftu.oracle.apps.icx.por.reqmgmt.server
Package. Add transient attribute Item Number to your extended VO.
Substitute new VO FtuReqDetailsVO for the existing VO ReqDetailsVO.For details of how to substitute one VO for another ,look at the steps listed in the
OAF Implementation Guide.
Similarly extend the controller class ReqDetailsCO to FtuReqDetailsCO and a new method in process request () like "ftuItemNumberDisplay". Invoke this method through application module.
Extend the application module ReqMgmtAM TO FtuReqMgmtAM, so that we extend the application module and write our custom logic inside the method "ftuItemNumberDisplay" in FtuReqMgmtAM, in order to retrieve value of Item Number
Run ShoppingHomePG and navigate to the present page in order to see the result of our personalization and extension. We see the following result






6. Deploying your extensions on the application server
In order to deploy your extensions follow these steps:
1. Compile your Java files in JDeveloper and zip up your Java classes to the
<$JAVA_TOP>// oracle/apps/
Hence in our case we, put the all the class files from C:\JDev\jdevhome\jdev\myprojects\ftu\oracle\apps\icx\por\reqmgmt\server
To <$JAVA_TOP> /ftu/oracle/apps/icx/por/reqmgmt/server in the application unix server.
Run the jpx import utility to import substitutions specified in the .jpx definition file to the MDS repository of application server. Hence, in our case we have OAProject2.jpx file which is used for extracting substitutions on application server. For details of how to jpx import utility, look at the steps listed in the OAF Implementation Guide.
Note: Each JDeveloper project has one .jpx file. If you have more than one JDeveloper project where you have created substitutions, you can import the substitutions specified in the respective .jpx file from each project, one after another. If you deploy substitutions for the same component more than once, the latest substitution will take precedence, replacing the existing substitution for that component.
3. Bounce the web server
4. Review your deployed extensions
At this point the deployment of your extension is complete, and you should be able to login to your application to verify that your changes have successfully taken effect.

53 comments:

Gagan said...

Hi Mukul,

Good article. Unfortunately I cannot see any of your diagrams except for the first one. I am using Vista Home.
Also, I have a similiar requirement as below.

In IProcurement-> Preferences Page -> Iproc Preferences, has many profiles that can be set to have a default value. I need to do the following add a NEW LOV item in the Delivery Billing region (DeliveryBillingDefaultsRN) on the existing page.

I found the Page to be in $ICX_TOP/mds/profiles/webui/MYProfilePG.xml.
The VO used by the page is oracle.apps.icx.profile.server.ProfileValuesVO
This VO does not contain the attribute I need to add.
1)What are the steps I need to do to add this new lov item on that page via extensions.
Would appreciate some detailed steps, as I am fairly new with OA Framework.
2)Also, would I need to extend AM ?
3)I read somewhere that U cannot extend rootAM, is it correct ?
Many thanks

Mukul said...

Hi Gagan,
Thanks for updates nand also sorry for replying late, I have uploaded all pics, now you can see in the blog.
Now Answers for your questions:
1)1)What are the steps I need to do to add this new lov item on that page via extensions.
>>I guess that is what this article is mean for :)
2)About Extension of AM
>>As of now this ia a bug in OAF, that you cannot extend root AM.But if you find that the AM you need to write ur custom method is root AM either you can extend controller, or add an extra region to the page and add an AM to it. In that case that AM will be a nested AM and you can write ur custom code there.
I hope it would help.
--Mukul

Venkatram said...

Nice work Mukul. I would like to ask you how can I add a custom dialog page in an self service module ? All the examples I look around in the web are related UI. Is there anyway that you can help me on this.

Mukul said...

Venkatram,
Yes you can add a dialog page in an self service module.But which way to follow depends on what is your requirement.
1)If you just need to show some message in your dialog box to user, then you can use
OADialogPage cass. See javadoc for details, they have given example there.

2)But if requirement is like you wanna do some processing based on the input of dialog page, then you have to use javascript, to set the size and popup nature of oa page.
--Mukul

binghao said...
This comment has been removed by the author.
Sharas said...

Hello Mukul:
I am trying to get some hands-on the OA Framework. I have followed the iprocurement example mentioned in the article. However, I encountered an error (at step 3-13)while running ShoppingHomePG.xml from local PC itself. Here is the error message, (oracle.apps.fnd.framework.OAException: Could not load application module 'oracle.apps.icx.por.req.server.RequisitionAM'). I have made sure that, the requisite permissions are available on the folders (oracle,apps,icx,por,req etc), files (RequisitionAM.xml, RequisitionAMImpl.class ?). THere seems to be a dumb mistake...would appreciate, if you can help me rectify this!!!

Thanks for your time !
Sharas

Mukul said...

Sharas,
As the error message says:
the error message, (oracle.apps.fnd.framework.OAException: Could not load application module 'oracle.apps.icx.por.req.server.RequisitionAM').
means your requisition am cannot be loaded in Jdev, just check, if requisitionAM class file is there in myclasses and my projects directory in jdev?Basically unzip all class files both in myclasses and myprojects, in order to avoid dependancy errors.I hope this will solve your problem.
--Mukul

Mukul said...

Srinivas,

First thing is that i willappreciate you if ask all your queries in my blof or on OA Forums,instead of mail

Here are the answers for your questions:

IN Step 5 ( BC4J Extensions), you talk about mounting the package in JDeveloper. What exactly do you mean by mounting. Is it just ftp the server.xml to your local machine from the server and try to open it in your JDeveloper project.

>>By mounting a pkg in Jdev, I mean for example if you want to mount whole of ICX pkg i.e.Internet procurement module or any sub pkg, you have to ftp all files of that pkg in your local machine. then when you create a new project in jdev, just browse server.xml of that pkg and jdev will prompt you to mount the whole pkg in jdev, basically this pkg will be added to your project. Server.xml file you will find in all server packages, which basicaly contain EO's, VO's and AM. You have to add your page and controller separately to the project.You may get dependancy errors, while adding a pkg, because files in that pkg may be using other pkg files, in that case you have to see that error and add that pkg too.



2)Should we even try to run a standard Oracle Fwk page in JDeveloper. If so, what are the files we need to copy to the local machine and include in JDeveloper project. For ex: you start with server.xml from one directory, but then if the page has LOV’s, then we need LOV server etc.. etc.. So is there a specific order in which we need to import server.xml files in JDeveloper.

>>Yes you can run standard oracle pages in jdeveloper.In fact, that is the only way to do customizations in standard pages through extensions.You have to bring all related files locally, so that page should work,

In Step 5 ( BC4J Extensions), you say Run ShoppingHomePG . Is this run from JDeveloper?

>>Yes

--Mukul

Leena said...

Hi Mukul,

Got to know about this fantastic blog from a friend.
Its really a nice way to put up OAF extension queries in specific at one place.

my requirement:

I want to know,how can I do extensions on standard oracle page,as there is no source code for those pages sp how can we get the source code.

I have been given clue that I can get class files and then decompile them to get the source code but I am ignorant about the way to decompile them or even way to get the source code?
Also, guide me that after getting the source code will I be able to make changes as in custom pages and eventually how to deploy this extended page...

Mukul said...

Leena,
There are many standard java decompilers available on net.One decompiler which i m using from a long time without facing any problem is cavaj.You can download from following link:
http://www.download.com/3000-2417_4-10499785.html
--Mukul

Naresh said...

Hi Mukul,

Great Articals, It will help to get hands-on the OA Framework. Good work..!

Naresh.

Mukul said...

Thanks for the comments Naresh.
--Mukul

Prince said...

Hi mukul,

I installed 9.0.3.5 Jdev. I setup my database accounts and i copied dbc file in correct directory. When i run the tutorial, i am getting an error, do you have any ieda?

Auto-deploying OA Framework web application deployment descriptor (New server version detected)...

ICX DIAGNOSTIC: routine getUserId : couldn't get a UserId

ICX DIAGNOSTIC: FND_TOP = C:\jdev\jdevhome\jdev\system9.0.3.5.1312\oa\dbc_files\

ICX DIAGNOSTIC: application_id = -1

ICX DIAGNOSTIC: responsibility_id = -1

ICX DIAGNOSTIC: security_group_id = -1

Natasa said...

Hi Mukul,

I work on localization of EBS and I made some updates to FND_NEW_MESSAGES table for Self-Service Web Applications. I tried to generate message file for ICX module, through adadmin, but I've got next message: 'No Oracle message file selected for generation'.
I am able to generate message files for other modules successfully and I have problem only with ICX.
What is the reason of that and is there a solution?

Regards,
Natasa

AragoRn said...

Hi Mukul

Nice article on OAF Extensions.

If ur goal is to show a new column in the table, Why cannt you use the query in Standard VO i.e ReqDetailsVO and add a new column to the query. From the new query, build a new VO which extends the Standard VO and finally do substitutions.

Do we require to extend Controller and AM for it?

cheers
Kishore

siri said...

Hi Mukul,
Really Wonderful,Excellent.It is very good article for the new learners.
In R12 -OAF Page i am facing a problem ,in User Management Resposibility -Users page i am unable to search for a specific user.it is just displaying like - No Results Found.How can i overcome such issues.Please help me.

nikhil said...

Hi Mukul,
You are doing great job.
I want to run standard iProcurement page.but, iam getting following error
oracle.apps.fnd.framework.OAException: oracle.jbo.JboException: JBO-29000: Unexpected exception caught: java.lang.EceptionInInitializerError, msg=null

##Detail 0 ## java.lang.ExceptionInInitializerError at oracle.apps.pon.util.webui.SourcingUtil.clinit(SourcingUtil.java:92) at oracle.apps.pon.negotiation.creation.webui.NegCreationHeaderPageCO.processRequest(NegCreationHeaderPageCO.java:97)
I think this is due to dbc file location problem in NegCreationHeaderPageCO.processRequest
I am newer to Oaf and don't know how to see code in controller and
whether we have to add controller file in our project to see its code or i have to extend the controller to see its code.
Please let me know what should i do to run the page?
Or plase provide any doc.
Regard,
nikhil

noup said...

Hi,

I have a question regarding the development environment. To extend a Controller class, setting up the environment involves: copying necessary packages to local file system, creating a class that extends the controller and changing the controller in EBS. After this, to test any change to the code, one has to:
1) Compile the code locally
2) Copy the .class to the server
3) Bounce Apache
4) Open the web page

Is there a way to test the changes locally, without the need to deploy them to the server?

Shailand said...

Hi Mukul, I have been going throughout your blog and its really interest me, it just what i wanted to do..

But am getting some confusion regarding to some part:

1) "In order to set our module related environment in Jdeveloper,make a folder named “myclasses” under path \myclasses
Zip the application top from your UNIX application server specific to your module. Eg., since, we were working on IProcurement, so it was
$JAVA_TOP\oracle\apps\icx"

In my \jdevhome\jdev there already exist two folders myclasses and myprojects. I had just extract the zip file to the two folders.
e.g for myprojects it will be as follows
....\myprojects\oracle\apps\icx....

Is it good.

2) Select File > New... to open the New... dialog (shown in the following screenshot). This dialog is also called the New Object Gallery.
Workspace Configured for Oracle Applications highlighted">
Choose General > Workspace Configured for Oracle Applications from the New... dialog, or highlight Workspaces in the Navigator and choose New OA Workspace... from the context menu. We'll be prompted to create an OA workspace. Verify that the default workspace directory name points to our own \myprojects directory, as shown in the following diagram. Modify the workspace file name as well (any name is okay for a workspace, such as Iproc.jws). Check the Add a New OA Project check box.


When i create my workspace it doesnt create the business components too ......

What I may be missing can you help me?

Also the picture can we have bigger images please.


Regards

Rajeev Dave said...

Hi Mukul,

Creating a new Region is "Customization by extension" or modification by extension".

I want to create new Region in existing screen.

I already created new Custom table and that fields i want to display or accept through region.

Please suggest.

Thanks

Rajeev Dave

Oracleguy69 said...

Hi Mukul,
Great article. Is this applicable to rel 12 (ver 12.0.4) with JDeveloper ver 10.1.3.3? That is the environment where I was trying to create an extension.

Regards,
Srini

Avinash said...

Great job !!!
one question. If I click on About this page, I can see several View Objects.
How to know, which view exactly you have to modify?

TIA,
Avinash

abra-ka-dabra said...

Hi Mukul,
i was able to implement extension,thanks to ur article and advice..
I have a doubt though.
I need to add a search criteria in the search panel.Now i can add it through personalisation but how to make that as a queriable criteria..
Do i need to extend the Search Page Xml ??
Please suggest!!

abra-ka-dabra said...

Hi Mukul,
I am trying to run seeded pages from jdeveloper.i am able to do so when in local network.
As soon as i switch to client's network i get an error in the url saying "you dont have enough privileges for the current operation"
Now,the dbs files and connections are right.
m using vpn to connect to the client's network.
I am not sure wht is causing this,if u could help me with this.i would atleast know whther the prblm lies with us or with the client's connection

Siddharth said...

Hi Mukul,
A really good article for beginners on OAF. I am gettting stuck at the import/export script step. Please point me to OAF implementation guide on metalink. I could not figure it all I am getting is developer guide.

abra-ka-dabra said...

Hi,
I have made several programtic Vo's in the extended controller of the seeded page.
Just wanted to know if it is safe to do that.
Cos during testing i did realise that the vo's created attached to am programatically get stored in the cache or something.

pc said...

Hi Mukul,

Very Nice article.
I have following query related to my requirement.
1) I copied the imc folder from the $JAVA_TOP....as specified above also its running properly on my local machine but I am not able to get descriptive flexfields displayed as shown in standard page.Is I am missing anything?

2) In the form there are address (descriptive flexfield)I want to pass these flexfield values to my custom pop up page as url pattern, but I am not able to find out the IDs of flexfield to pass.

3)Also we have to deploy custom pages to $JAVA_TOP or $CUSTOM_TOP/java ?If is it JAVA_TOP then we have to get permission for that??

rohitblogger said...

Hi Mukul,
I have been recruited as a trainee. We are expected to learn the OAF from a developer guide we have been provided with.
Can u tell me how do i learn the subject on my own.
Any suggested tutorials?
would be helpful if u could suggest any specific training program conducted in pune / hyderabad or elsewhere

Archana said...

Hi Mukul,
Nice article. Very helpful. I am very new to OA Framework and the task is given to me to extend the iSupplier Invoice Summary page. I have to add a column from the AP_INVOICES_ALL (attribute3) to show up on the page. We log in as iSupplier Portal Full Access responsibility. The Main page as per the page description is PosApInvMainPG.xml which is under short application ICX , but the View Object is PosInvoicesVO which is under POS short name. I there gets confused as to what to define in the Project Setting. If I do not take the Main Page and just extend the VO, then I can see the added new field in the query and can also add to the page, but when i run it it gives me error.
Please help me out.

vikram A. said...

hi Mukul!
Great article.. have one question regarding seeded oracle components.
I am actually working on VO extension of iProcurement --> Receiving.
I want to bring in my Jdeveloper all the VO but i don't have server.xml in the $JAVA_TOP/..icx/por/rcv/server.
Is it normal? how can I open all VO components in my JDeveloper?

swati said...

hi mukul this is swati and i have read your blog.OAF is new for me.I am getting error while i am doing test connection and my error is java/net/inetaddress ,so i m not able to connect with database.Can you plz send me the solution how to resolve it.

Manoj Kumar Pradhan said...

Hi Mukul,
Could you please guide me in setiing up app servers and db. any pointer to it also help full.

1. Brand new to OAF , need to do a set up of dev enviornment
2.I down loaded Jdeveloper Extension.
3.I have a Oracle 9i DB with me.
4.What else I need to study OAF and set up deatils
5.I got caught up with dbc file.
6.To use Embeded OC4J what will be dbc file

Basu A R said...

Mukul...

very good article...

thanks

Ambika said...

Hi,

I have an RDF Report which generates the XML data and XML template registered in BI publisher.

Requirement is to fire the custom existing report instead of standard report.

The standard controller seems to generate XML and generate OA framework report as shown in your example.

But I want to extend the existing controller / overwrite the standard to call my custom report.

Can you tell me how to do this?

Ambika said...

Mukul,

I got a message in my mail box saying that you answered my question .. but I dont see any in the blog .. Any suggestions will be very helpful ..

suresh said...

Hi Mukul,
I was working on Extending a VO and everything went well except that the Extended VO does not show up in the "About Page". It still shows up the Original VO name BUT with the changes made in the Extended VO.

Can you please point out what could be wrong?

Thanks!
Suresh

Santosh Dadi said...

Hi Mukul,
I need to do some extensions in Oracle Trademenagement. OTM is built based on 2 different frameworks, OAF and JTF.

I see that the pages that I need to extend are built on OAF. So how do I extend my controller here? and how to tell apps to pick my extended class instead of standard class as Personalize page links are not available in OTM?

SAN said...

Hi Mukul,
I'm very new to OAF, i have some good knowledge in Oracle ADF.But OAF is new to me.i want to learn.Your article about OAf environment setup is too good, can u tell me clearly about, how to develop one web application as our own here.

SAN said...

Hi mukul,
Just now i reed ur setup blog, i need guidance to learn so
plz tell me what can i do next to learn OAF fully.

Salman Ahmad said...

Hi,

I have a request from client to disable reject button for appraisal notification. Can anybody help me in that?

The problem here is that the "Approve" & "Reject" buttons are dynamically generated. In this respect my quesiton was to ask you how to control it ?

Should it be through some Controller Extension to turn off the Render attribute after it is created?

If yes what should be the steps? Please elaborate the solution..

Regards,
Salman Ahmad

SabeenaBegum said...

Hi Mukul,

Useful article, I've a quick question
Normally we are performing Controller Extension for the seeded controller class say for the customer creation Page in R12.
After CO extension and personalizing the page, it'll be working fine. But if a patch is applied for the upgradation, will the extended Controller gets affect and the standard CO reflects or our extended CO reflects the same in Page?


Thanks,
Sabi

Saran said...

Hi Mukul,
Thanks for the article. We are facing one issue while trying to deploy the extended AM.
We are getting the below error:
oracle.apps.fnd.framework.OAException: oracle.jbo.NameClashException: JBO-25001: Name LOV_oracle_apps_ap_pcard_server_PcardAM of object type ApplicationModule already exists

We used the jdr_utils.deletedocument to delete the customization in the AM and import the JPX file again.

But still the issue is coming. Kindly share your thoughts on this.

Thanks,
Saran

Ashish Harbhajanka said...

Hi Mukul,

My requirement is

1) On a seeded Oracle Page when user clisks on apply button

Display Dialog Page
If user selects Yes Commit
else rollback.

can you give a sample

Ashish Harbhajanka said...

Adding code for your reference.

if (chgpcnt.intValue() > 20 )
{
OAException message = new OAException("PER","XXX_SAL_CHG_GRTR_20PERCENT",null,OAException.CONFIRMATION,null);
OAException oaexception1 = new OAException("FND", "FND_CANCEL_ALERT");
OADialogPage oadialogpage = new OADialogPage((byte)1, message, oaexception1, "", "");
oapagecontext.getMessage("FND", "FND_DIALOG_YES_DESC", null);
oapagecontext.getMessage("FND", "FND_DIALOG_NO_DESC", null);
oadialogpage.setNoButtonItemName("ContinueNoButton");
oadialogpage.setOkButtonItemName("ContinueYesButton");
oadialogpage.setOkButtonToPost(true);
oadialogpage.setNoButtonToPost(true);
oadialogpage.setPostToCallingPage(true);
oapagecontext.redirectToDialogPage(oadialogpage);
}
if(oapagecontext.getParameter("ContinueNoButton") != null)
{
oaapplicationmodule.invokeMethod("rollbackNewSalary");
oapagecontext.setForwardURL("PER_SALADMIN_LAUNCH", (byte)0, null, null, true, "Y", (byte)0);
}
if(oapagecontext.getParameter("ContinueYesButton") != null)
{
oaapplicationmodule.invokeMethod("applyNewSalary");
oapagecontext.putDialogMessage(new OAException("PER", "PER_SAL_NEW_COMMIT", null, (byte)3, null));
oapagecontext.forwardImmediately("PER_SALADMIN_LAUNCH", (byte)0, null, null, true, "Y");
}
else
{
oapagecontext.forwardImmediately("PER_SALADMIN_LAUNCH", (byte)0, null, null, true, "Y");
oaapplicationmodule.invokeMethod("applyNewSalary");
oapagecontext.putDialogMessage(new OAException("PER", "PER_SAL_NEW_COMMIT", null, (byte)3, null));
oapagecontext.forwardImmediately("PER_SALADMIN_LAUNCH", (byte)0, null, null, true, "Y");
}
}

Abi said...

Hi Mukul,

Thanks for the article.

I am not into jDeveloper side, but more onto the ERP side.
In iproc, we can setup 30 number of Chart of accounts rt.. Each responsibility, we can have a different set of default chart of account in the preference.

Is there any way to query them from backend? which are the tables that these preference chart of accounts are stored? I got the profile option name as 'POR: My Profile-Charge Acct Seg XX'..

Please help me out.

Thanks
Abijith

Prateek said...

Hi Mukul,

I want to know few things regarding a new extension for my project module.
I want to contact you personally..can you please drop me a test mail on prateeksinghal_12@yahoo.com

Neil said...

Hi Mukul,
I have to add new option in messagechoice in seeded page.and vo for that is dynamic vo.
so please explain me steps of dynamic vo extension.
and to add that new option in seeded page is that necessary to extend controller also...

Neil said...

Hi ,
I have to add new option in messagechoice in seeded page.and vo for that is dynamic vo.
so please explain me steps of dynamic vo extension.
and to add that new option in seeded page is that necessary to extend controller also...

Krishna Joshi said...

I can not download 9.0.3.5 Jdeveloper version from Oracle site?
Can someone point me in the right direction?

Unknown said...

A little bit late
> I can not download 9.0.3.5 Jdeveloper version from Oracle site?
> Can someone point me in the right direction?

There is an HOWTO on https://support.oracle.com (number 416708.1)

Mayank Mehta said...

Hi Mukul,

Thanks for wonderful Article.

We are working on a requirement for one of our clients as part of which a LOV needs to be created on Advanced Search screen in OCO module, the country field is the LOV, the region containing the fields does not have option to personalize so we have extended a controller and are creating it Programmatically, the ListOfValues region is created separately.

Now after putting the LOV at its place , we get the torch icon but on clicking it a blank page is displayed and says forbidden 403 error, website not allowed to open etc.

The lov's in the same instance are orpening fine.

Can you please suggest the reason for such a behaviour.

Below code is used for creation of LOV -

OAMessageLovInputBean CountryLOV =
(OAMessageLovInputBean)createWebBean(pageContext,
LOV_TEXT, null, MatchRuleAttrId); //MatchRuleAttrId - the fields are rendered through DQM so, this is the Id for the text input , same is taken as id for LOV, to enable search later.
if (pageContext.isLoggingEnabled(PROCEDURE))
pageContext.writeDiagnostics(this, "CountryLOV : " + CountryLOV, PROCEDURE);
CountryRowLayoutBean.addIndexedChild(CountryLOV);
Integer webBeanRegionAppId = (Integer)webBean.getAttributeValue(REGION_APPLICATION_ID);
CountryLOV.setAttributeValue(REGION_APPLICATION_ID,webBeanRegionAppId);
// Specify the path to the base page.
CountryLOV.setAttributeValue(REGION_CODE, "/oracle/apps/imc/ocong/search/webui/ImcSearchPage");
CountryLOV.setAttributeValue(LOV_REGION_APPLICATION_ID,
webBeanRegionAppId);
// Specify the LOV region definition.
CountryLOV.setLovRegion(“/mgi/oracle/apps/mgiimc/lovs/webui/CountryLOVRN", webBeanRegionAppId.intValue()); //Custom LOV region used that has a separate AM and Vo for it.
// Validation should be enabled for LOVs unless it's essential for the field to allow a partial value (in a "Search" region, for example).
CountryLOV.setUnvalidated(false);
CountryLOV.setAttributeValue(SELECTIVE_SEARCH_CRITERIA,true);
CountryLOV.setAttributeValue(SEARCH, true);
// Configure the LOV mappings.
// Note that you must call this method after you add the messageLovInput item
// to the web bean hierarchy.
// base page item
// lov item
// direction
if (pageContext.isLoggingEnabled(PROCEDURE))
pageContext.writeDiagnostics(this,
"webBeanRegionAppId : " + webBeanRegionAppId,PROCEDURE);
if (pageContext.isLoggingEnabled(PROCEDURE))
pageContext.writeDiagnostics(this,
"MatchRuleAttrId : " +
MatchRuleAttrId,
PROCEDURE);

CountryLOV.addLovRelations(pageContext,
MatchRuleAttrId,
"TerritoryShortName",
LOV_RESULT,
LOV_REQUIRED_NO); // base page item
// lov item
// direction
CountryLOV.addLovRelations(pageContext,
MatchRuleAttrId,
"TerritoryShortName",
LOV_CRITERIA,
LOV_REQUIRED_NO);




Thanks,
Mayank

Shah Rohit said...

Hi mukul,
I am extending standered OAF page technician portal i have added a button on that page nd it negivates to next page which is my custom page.i have advance table in that nd one of the column is LOV.when i write freeform text nd tab out from that it gives me error that" you are trying to access the page which is no longer active" and i have read your block which says to change the prfile option fnd validation from error to None but client is not ready to do that.can we have any alternative solution for that?
thanks in advance

Shah Rohit said...

Hi mukul,
i am extending standard OAF page technician portal.i have added button on that page which negivates me to my custom page.where i have advance table and one of the column of that table is LOV.when i enter free form text on that LOV nd tab out then it gives me an error that "page is no longer active". i have read your bolg which says that change fnd_validation (profile option) from error to None but becz of security issue client is not ready to do that.is there any alternative solution for that?