Master-Detail page is a very common requirement for OAF based project.This tutorial is based on Oracle's Toolbox tutorial,it has been redone and explained step by step to help beginners.Below are the step by step by approach to implement the Master Detail Page using PPR.Source code for this tutorial is available as attachement.

Note: Only registered users can download the source code and registration is free.

Have a Look at Oracle Forms Style Master Detail Page

 

 

License:

{tab=Initial Steps -->}

1. Right click Workspaces and click create new OAworkspace and name it as "CholaMasterDetail". Automatically a new OA Project is also created. Name the project as CholaMasterDetailand package as chola.oracle.apps.fnd.master.

Workspace

{StickyNote}{/StickyNote}

Set the project properties as per the screenshot below:

Projprop

2. We need to create two Business component package. Right click on CholaMasterDetail.jpr and click on new Business Component Package.

Name - cholamd.oracle.apps.fnd.master.server

3.Right click on cholamd.oracle.apps.fnd.master.server and click new Application Module.

Name - CholaMdAM.
Package - cholamd.oracle.apps.fnd.master.server.

{tab=VO -->}

4. Right click on cholamd.oracle.apps.fnd.master.server and click new View Object.

Name - SupplierPVO
Package - cholamd.oracle.apps.fnd.master.server.

Click Next and go to the attributes page.The VO is based on any EO.We need to create transient attributes.Click New and create the below attributes.

Name - RowKey
DataType - String
Updatable - Always
Key Attribute - Yes

Name - PoApproveReadOnly
DataType - Boolean
Updatable - Always

Name - PoApproveRequired
DataType - String
Updatable - Always

Name - PoApproveRender
DataType - Boolean
Updatable - Always

Name - PoApproveReject
DataType - Boolean
Updatable - Always

Name - DetailTableText
DataType - String
Updatable - Always

Click Next and Finish.

PVO

5.Right click on cholamd.oracle.apps.fnd.master.server and click on new View Object.

Name - SupplierSitesVO
Package - cholamd.oracle.apps.fnd.master.server.

Click Next.Go to the query page and paste the following query:

SELECT SupplierSiteEO.SUPPLIER_ID, 
SupplierSiteEO.SUPPLIER_SITE_ID,
SupplierSiteEO.SITE_NAME,
SupplierSiteEO.PURCHASING_SITE_FLAG,
SupplierSiteEO.START_DATE,
SupplierSiteEO.END_DATE
FROM FWK_TBX_SUPPLIER_SITES SupplierSiteEO

Click Next and Finish.

6.Right click on cholamd.oracle.apps.fnd.master.server and click on new View Object.

Name - SuppliersVO
Package - cholamd.oracle.apps.fnd.master.server.

Click Next.Go to the query page and paste the following query:

SELECT SupplierEO.SUPPLIER_ID, 
SupplierEO.NAME,
SupplierEO.ON_HOLD_FLAG,
SupplierEO.START_DATE,
SupplierEO.END_DATE
FROM FWK_TBX_SUPPLIERS SupplierEO
WHERE SupplierEO.SUPPLIER_ID <= 100

Note : Add a new attribute SelectFlag as a transient attribute.Do not forget to do this step.

Edit the AM and shuttle the SuppliersVO and SupplierSitesVO to the right side and click ok. Only then the VO instances will be accessible.
{tab=VL -->}
7.Right click on cholamd.oracle.apps.fnd.master.server and click on new View Link.

Name - SuppliertoSitesVL
Package - cholamd.oracle.apps.fnd.master.server
.

8.From the source view object select SuppliersVO and from destination view object select SupplierSitesVO.Click Next.

VL1

9.Select the SupplierId from the available attributes of SuppliersVO and shuttle it to the right side.Click Next.

sourceVL

10.Select the SupplierId from the available attributes of SupplierSitesVO and shuttle it to the right side.Click Next.

destvl

 

vlsql

 

11.Choose the cardinality for the source(SuppliersVO) as 1 and destination(SupplierSitesVO) as *.Click Next and Finish.

vlprop

{tab=PG -->}

12.Right click on CholaMasterDetail.jpr and select new. Click on web tier and then OA Components and select Page.

Name - CholaMasterDetailPG
Package - cholamd.oracle.apps.fnd.master.webui.

Page

13.Select the CholaMasterDetailPG and go to the strcuture pane where a default region has been created.

14. Select region1 and set the following properties:


ID - PageLayoutRN
AM Definition - cholamd.oracle.apps.fnd.master.server.CholaMdAM
Window Title - Master Detail Page Demo
Title - Master Detail Page Demo

15.Right click on PageLayoutRN and select new Region.

Name - MasterDetailRN
Region Style - Header

16.Right click on MasterDetailRN and select new Region Using Wizard.

17.From the droplist select the CholaMdAM and then SuppliersVO1.Click Next.

selectVOin RN

18.Set the RegionID as SuppliersTable and RegionStyle as Table.

19.Shuttle all the attributes to the right side and click next.

20.Change the Style of all the attributes to messageStyledText.Click Next and Finish.

Right click on SuppliersTable and select new - > singleSelection.Set the following properties for the singleSelection:

View Instance - SuppliersVO1

View Attribute - SelectFlag

Action Type - firePartialAction

Event - supplierSelect

 

21.Right click on SuppliersTable and click new singleSelection.Set the following properties:

View Instance - SuppliersVO1
View Attribute - SelectFlag
Action Type - firePartialAction
Event - supplierSelect

21.Select MastersDetailRN and select new Region.

23.Set the RegionID as SupplierSitesHeader and RegionStyle as header.

24.Right click SupplierSitesHeader and select new Region Using Wizard.

25.From the droplist select the CholaMdAM and then SupplierSitesVO1.Click Next.

 

SitesVOselinRN

26.Set Name as SupplierSitesHeader and RegionStyle as Table.Click Next.

27.Shuttle all the attributes to the right side and click next.

28.Change the Style of all the attributes to messageStyledText.Click Next and Finish.

{tab=CO -->}

29.Right click on the PageLayoutRN in the page and select Set new Controller.

Name- MasterDetailCO
Package - cholamd.oracle.apps.fnd.master.webui

CO


Import Statements:


 

Import Statements
1
2
3
4
5
6
7
8
9
import oracle.apps.fnd.common.VersionInfo;
import oracle.apps.fnd.framework.OAApplicationModule;
import oracle.apps.fnd.framework.webui.OAControllerImpl;
import oracle.apps.fnd.framework.webui.OADataBoundValueViewObject;
import oracle.apps.fnd.framework.webui.OAPageContext;
import oracle.apps.fnd.framework.webui.OAWebBeanConstants;
import oracle.apps.fnd.framework.webui.beans.OAWebBean;
import oracle.apps.fnd.framework.webui.beans.layout.OAHeaderBean;
import oracle.apps.fnd.framework.webui.beans.table.OATableBean;

 

Code:

{slide=ProcessRequest}

1
2
3
4
5
6
7
8
9
10
OAHeaderBean sitesHeader =
(OAHeaderBean)webBean.findChildRecursive("SupplierSitesHeader");
sitesHeader.setAttributeValue(OAWebBeanConstants.TEXT_ATTR,
new OADataBoundValueViewObject(sitesHeader, "DetailTableText",
"SupplierPVO1"));
OAApplicationModule am =
(OAApplicationModule)pageContext.getApplicationModule(webBean);
am.invokeMethod("initializePPRExamplePage");
OATableBean table = (OATableBean)webBean.findChildRecursive("SuppliersTable");
table.queryData(pageContext, true);

 


{/slide}

{slide=ProcessFormRequest}

1
2
3
4
5
6
7
OAApplicationModule am =
(OAApplicationModule)pageContext.getApplicationModule(webBean);
String event = pageContext.getParameter("event");
if ("supplierSelect".equals(event))
{
am.invokeMethod("handleSupplierSelectionEvent");
}

 


{/slide}

{tab=AM Code -->}

Include the two methods in CholaMdAMImpl.java file.

handleSupplierSelectionEvent:

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
public void handleSupplierSelectionEvent()
{
OADBTransaction txn = getOADBTransaction();
String detailTableText = null;
OAViewObject vo = (OAViewObject)findViewObject("SuppliersVO1");
Row masterRow = vo.getFirstFilteredRow ("SelectFlag", "Y");
if (masterRow != null)
{
vo.setCurrentRow(masterRow);
String supplierName = (String)masterRow.getAttribute("Name");
MessageToken[] tokens = { new MessageToken("SUPPLIER_NAME", supplierName)};
detailTableText =
txn.getMessage("AK", "FWK_TBX_SITES_FOR_SUPPLIER", tokens);
}
else
{
detailTableText =
txn.getMessage("AK", "FWK_TBX_SUPPLIER_SITES", null);
}
SupplierPVOImpl appPropsVo = getSupplierPVO1();
Row appPropsRow = appPropsVo.getCurrentRow();
if (appPropsRow != null)
{
appPropsRow.setAttribute("DetailTableText", detailTableText);
}
} // end handleSupplierSelectionEvent()

 


 

initializePPRExamplePage:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void initializePPRExamplePage()
{
OAViewObject appPropsVO = (OAViewObject)findViewObject("SupplierPVO1");
if (appPropsVO != null)
{
if (appPropsVO.getFetchedRowCount() == 0)
{
appPropsVO.setMaxFetchSize(0);
appPropsVO.executeQuery();
appPropsVO.insertRow(appPropsVO.createRow());
OARow row = (OARow)appPropsVO.first();
row.setAttribute("RowKey", new Number(1));
}
handleSupplierSelectionEvent();
}
else
{
// throw exception
}
}
 
 

 



{tab=Save and Run }


res1


res2


 


{/tabs}


 


 


 


 

Hits : 11276 Share This


Points : 1792

I am an Oracle Technical Architect working on Oracle Property Manager.My Expertise includes OA Framework,SOA and OBIEE.
Category: OA Framework

Advertisements