Login
Register

Home

Trainings

Fusion Blog

EBS Blog

Authors

Contact Us

OA Framework - All Articles
  • Register

Oracle Gold Partners, our very popular training packages, training schedule is listed here
Designed by Five Star Rated Oracle Press Authors & Oracle ACE's.

webinar new Click here to raise Support Ticket. Get reply within 48 hours.

Search Courses

User Rating: 5 / 5

Star ActiveStar ActiveStar ActiveStar ActiveStar Active
 
A commonly encountered restriction with OA Framework Personalization is that you can not add certain type of beans using personalization. For example, let’s say you wish to add a Submit button a page. Another scenario is whereby you wish to add a Column Group or Column to an advanced table layout. These are two of the most common scenarios that can not be achieved using personalization

Note:- In R12 though, new columns can be added to Advanced Table bean using Personalization- however this is not possible in 11i, hence the need of this article.


In this article, I will also explain one of the common issues that you face during controller extension, due to the inherent nature of how controller extensions get registered in MDS.


Such restrictions can be overcome quite easily by “programmatically instantiating” such items [or call them beans], followed by programmatically attaching these newly created items/beans to the page.

Given the declarative nature of OA Framework, you can create most type of objects programmatically, be it AM or VO or an entire Advanced Table.


In this article, I will show you how, using OA Framework Extensions, you can add a New Column within an existing advanced table region. [Note:- This is not possible via personalization, either in 11i or in R12[checked until Rollup3]


NOTE:- In Release 11i, it is indeed possible to add a column to a “table” based bean on OA Framework page using personalization[ but not to “advanced” table]


What are the key challenges when faced by such requirement?
You can not add a new column [or column group] to an Advanced Table section of the page using personalization.
Your requirement is:-
To add a column to Advanced table, which will appear as field.
This column will be attached to a View Object attribute.


In ideal world [as in R12], you would:-
Personalize the Advanced table to add a column
Personalize the newly added column to AdvancedTable, so that a field is added to this column
While creating this field via personalization, you will map that field to view object attribute.


However, in 11i world, you will have no choice but to:-
Create new controller class, that extends the existing controller against the page
In extended controller, in processRequest, do below steps programmatically
    a. Call super.processRequest to process standard functionality
    b. Get a handle to the existing advanced table bean on that page
    c. Create a column by using createWebBean
    d. Create a field [lets say messageStyledText]
    e. Map this new field to ViewObject Attribute
    f. Attach this field to the column
    g. Attach this column to existing Advanced Table


What if there isn’t a standard view object attribute available?
In this case, you will be required to extend the View Object.
By extension, you will be adding a new attribute/column to the extended view object.


How will the new VO Attribute be mapped to Column/item within advanced table?
This will happen programmatically, you will find in the sample code.



But how do I get started for this solution?
1. Find out the name of the page on which Advanced table resides. This can be done by attempting to personalize the page. When you personalize, the entire path of the page will be listed, in the format /oracle/apps/ota/admin/…/webui/otabcdPG
[Note:- You might as well use “about this page” to find this out]

2. Open this page in jDeveloper and identify the controller class that you will need to extend. [Note:- Again, you might as well use “about this page” to find this out]. Also if you fancy, you can use vi editor to read the XML page definition from $MODULE_TOP/mds/…/pagenamePG.xml

3. Try to make that page run from jDeveloper itself. Once you can produce a test case on jDeveloper, then rest of development becomes a cakewalk.
4. Optionally, instead of extending the controller class, to begin with temporarily, simply modify the base Controller class’s java file from jDeveloper. Append your logic to processRequest. Once you are completely satisfied with results, you can then move changes from “base class” into a new “extended controller class”. **** There is a good reason for taking this temporary approach****

5. Use personalization to substitute the standard controller class by custom controller class.




****What is the reason for this additional step ****
Problem definition:- The moment you specify an extended controller using personalization, that extended controller reference will get stored in the database. This will happen even though you have done your extension while running page off your local PC[jDevelopers oc4j]


Following situation can arise:-

  1. You create an extended controller in jDeveloper

  2. You run the page via jDeveloper

  3. You personalize the page by running it via jdeveloper, to specify new controller class

  4. This new controller class reference gets stored in MDS Tables of database

  5. Some other person runs the same page via Linux/Unix server, by accessing application URL. This will make OAF search for extended class in $JAVA_TOP. This will error given that extended controller is yet to be deployed to server.

Hence, we have two options

  1.  
    1. Do your testing by appending code to std decompiled class on jdeveloper

    2. deploy a stub class for extended controller as soon as you have done your personalization.



Lets take this scenario, where you wish to add a new column to an existing AdvancedTable bean
Assumption :- Name of advanced table bean is AccountsLinesAdvTable

Name of view object is PoRequisitionLinesVO

Name of the view object attribute being displayed is xxfocustChargeAccountDescr
    Note:- In this example, VO Attribute begins with xx, as it is an extended VO Attribute

 

//====SAMPLE SOURCE CODE FOR THIS EXTENSION IS AS BELOW====

package xxfocust.oracle.apps.icx.por.req.webui;

import oracle.apps.fnd.framework.webui.OAPageContext;
import oracle.apps.fnd.framework.webui.beans.OAWebBean;
import oracle.apps.fnd.framework.webui.beans.message.OAMessageStyledTextBean;
import oracle.apps.fnd.framework.webui.beans.table.OAAdvancedTableBean;
import oracle.apps.fnd.framework.webui.beans.table.OAColumnBean;
import oracle.apps.icx.por.req.webui.CheckoutLinesCO;

public class xxCheckoutLinesCO extends CheckoutLinesCO
{
/***********************************
 * Anil Passi
 * To display GL Description in iProc Screens
 *
 * *********************************/
    public xxCheckoutLinesCO()
    {
    }

    public void xxfocustProcessRequest(OAPageContext oapagecontext, OAWebBean oawebbean)
    {
    System.out.println("Inside CheckoutLinesCO, executing xxfocustProcessRequest()" ) ;
    OAAdvancedTableBean tableBean = (OAAdvancedTableBean)oawebbean.findIndexedChildRecursive("AccountsLinesAdvTable") ;       
    OAColumnBean columnForSegment1 = (OAColumnBean)tableBean.findIndexedChildRecursive("ChargeAccountCol");
    OAMessageStyledTextBean leaf2=(OAMessageStyledTextBean)createWebBean(oapagecontext,MESSAGE_STYLED_TEXT_BEAN,null,"Leaf2");
    leaf2.setViewUsageName("PoRequisitionLinesVO");
    leaf2.setViewAttributeName("xxfocustChargeAccountDescr");
    columnForSegment1.addIndexedChild(leaf2);
    }

    public void processRequest(OAPageContext oapagecontext, OAWebBean oawebbean)
    {
        super.processRequest(oapagecontext, oawebbean);
        xxfocustProcessRequest(oapagecontext, oawebbean);
    }
}



Important Note:- In this article, it is assumed 11i is upto 11.5.10 CU2.



Anil Passi

Comments   

0 #1 Naveen 2008-04-16 10:24
Hello Anil,
Anil,
I must say thanks for your time putting on this great apps2fusion site.
I'm a newbie to OA framework. I could not find any document for my above question(May be I did't look right places).
Can you please tell me the steps how to define a newly developed custom report(report 6i) cocurrent program in web forms.

Thanks in advance
Naveen
Quote
0 #2 Shasikkumar 2008-06-01 05:10
Hi Anil,

I have a small doubt which I thought I will clarify as adding a new column to an advanced table thru' extension is not working. I am working with 11.5.10 RUP6 version of Apps and Jdev

Situation - In iSupplier portal - Create Credit Memo from the PO screen, I want to add a new column for TaxCode and make it as an editable field with LOV

So for this, I had extended the base VO so that my new VO includes that column and I had made the substition. Then since its an advanced table, I extended the controller class and wrote the code accordingly. Everything seems to execute and also in the about Page - I see the things correctly, but somehow in the new table I dont see the new field appearing. I find the VO substition, I find the new controller class getting executed, in the advanced table list of columns I can see my new column appearing in the about page

Am I missing something ?.

Following is my code in the controller class file,

public void xxProcessReques t(OAPageContext pageContext, OAWebBean webBean)
{
OAAdvancedTabl eBean tableBean = (OAAdvancedTabl eBean) webBean.findInd exedChildRecurs ive("PoItemLine sTable");

OACo lumnBean taxCodeCol = (OAColumnBean) createWebBean(p ageContext,COLU MN_BEAN,null,"T axCodeCol");

t ableBean.addInd exedChild(taxCo deCol);

OAMessageStyl edTextBean taxCode = (OAMessageStyle dTextBean) createWebBean(p ageContext,MESS AGE_STYLED_TEXT _BEAN,null,"Tax Code");

OASortableHea derBean sortBean = (OASortableHead erBean) createWebBean(p ageContext,SORT ABLE_HEADER_BEA N,null,"TaxCode ");

taxCode.setVi ewUsageName("Xx ApInvPoItemLine sVO");
taxCode. setViewAttribut eName("TaxCode" );
taxCodeCol.a ddIndexedChild( taxCode);
taxCo deCol.addIndexe dChild(sortBean );
taxCodeCol.s etRendered(true );
}

public void processRequest( OAPageContext pageContext, OAWebBean webBean)
{
super.processRe quest(pageConte xt, webBean);
xxProcessReques t(pageContext,w ebBean);
}
Quote
0 #3 Sanju 2009-09-01 10:59
Hi,

Has someone implemented Advanced Table in Advanced Table in OAF. I need detail disclosure implemented with view links since my child table is from a different view object. Please send some reference code if you have.

Basicall y i tried using the dev guide and facing an issue. My page's look anf eel is as expected but when i click on Show on any of the row in the master table, the detail query does not fire and it says " No serach conducted". I made some changes to the view link etc etc..and now i am getting an error OAAdvancedTable Helper.updateIn nerTablePropert ies. But the system does not tell me which inner table properties are missing.

Can you please help.
Thank you,
Sanjana
Quote
0 #4 usha 2009-10-22 00:42
Hi
I'm new to OAFramework. Can somebody answer my question. I have a requirement in iSupport page where in I need to hide few fields for certain set of people. Appreciate quick response.

Than ks
Usha
Quote
0 #5 janasriram 2010-04-26 15:57
I'm new to OAFramework. I have a requirement to hide a column in advanced table.here i am facing a issue is,How to find the table name.Please reply me urgent.
Quote
0 #6 Luisito 2011-10-06 10:35
Hello Anil,

I have a requirement to create a page to mimic what we have in Oracle Project; data manipulation in an advanced table for UDAs.

I am able to create the page, and the advanced table is properly populated. However, my challenge is how to perform the updates in the AT since one can perform Update on one record, perform a Delete on another, and Create a new record in a given instance. How to perform SAVE instead of using the PA_PROJECT_PUB package - the page I just created is just a very small fraction of the entire Create Project procedure. I plan to create my own API to save the changes in UDAs and UDAs only. Please help.

Kind Regards,

Luisi to
Quote
0 #7 khushi 2012-08-07 02:45
Hi anil,
i am new to OAF,
i want to add 1 additional col to a table, if status=complete d, here status is one of the column name,
can u help me to do this?
Quote
0 #8 khushi 2012-08-07 09:27
can anyone tell me that how to add records into table?
Quote

Add comment


Security code
Refresh

Search Trainings

Fully verifiable testimonials

Apps2Fusion - Event List

<<  Jun 2021  >>
 Mon  Tue  Wed  Thu  Fri  Sat  Sun 
   1  2  3  4  5  6
  7  8  910111213
14151617181920
21222324252627
282930    

Enquire For Training

Related Items

Fusion Training Packages

Get Email Updates


Powered by Google FeedBurner