PPR Stands for Partial Page rendering.
Which means that only a particular part of the page is refreshed and not the entire page.
PPR is a mechanism where in only the required part of the page is refreshed as against the whole page. The page objects fire the ?events? and accordingly the request is handled in the controller file
SPEL is the basic foundation of PPR in OA Framework.
PPR is used to change the contents of the page dynamically if certain events take place.
In this article I will explain the concepts of partial page rendering and its usage with SPEL in OA Framework.
What makes PPR so special?
By using Partial Page Rendering, the entire page is not refreshed.
Only the changed portion of the web page will be redrawn.
This reduces the network traffic and enhances the user experience.
Examples are :
Hiding Showing objects
Required/Optional
Disable/Enabled
Read Only Uneatable
While developing pages, we may face some scenarios where the requirement is to make
modifications on the current page itself, instead of navigating to different page.
Such as selecting an item from a choice list might result in modifications to other fields or clicking a
button to add a new row in table region and many more like these.
All these tasks can be performed by simply refreshing the page however this could result in
performance issues.
Another alternative is to use javaScript which will give faster results but implementing complex functions can be a tough job using javaScript.
UIX Framework provides a solution for this: Partial Page Rendering i.e. to re-render only
a limited portion of a page.
PPR is a three step process:
1) Partial page event
Partial page events are quite similar to full page events. However, there are two important differences between partial and full page events.
First, partial page events specify partial page rendering-specific event parameters which are not present on the full page event equivalents.
Real Time Example:
Method 1:
Let us try to implement partial page rendering for a text item.
If value of TextItem1 is null then TextItem2 will not be appeared on UI.
If value of TextItem1 is not null then TextItem2 will be appeared on UI.
Step 1: Create a New OA Workspace and Empty OA Project
File> New > General> Workspace Configured for Oracle Applications
File Name -- PPRProj
Project Name – PPRDemoProj
Default Package -- oracle.apps.fnd.pprdemo
Step 2: Create Application Module AM
PPRDemoProj right click > New > ADF Business Components > Application Module
Name -- PPRAM
Package -- oracle.apps.fnd.pprdemo.server
Check Application Module Class: PPRAMImpl Generate JavaFile(s)
Step 3: Create a PPRVO View Object
PPRDemoProj> New > ADF Business Components > View Objects
Name – PPRVO
Package – oracle.apps.fnd.pprdemo.server
In Attribute Page
Click on New button and create transient primary key attribute with the following properties:
Attribute-->Property
Name -->RowKey
Type -->Number
Updateable -->Always
Key Attribute--> (Checked)
Click New button again and create transient attribute with the following properties:
Attribute--> Property
Name--> TextItem2Render
Type--> Boolean
Updateable -->Always
Note – No Need to generate any JAVA files for PPRVO
Step 4: Add Your View Object to Root UI Application Module
Right click on PPRAM > Edit PPRAM > Data Model >
Select PPRVO in Available View Objects list and shuttle to Data Model list
Step 5: Create a OA components Page
PPRDemoProj right click > New > OA Components > Page
Name – PPRPG
Package -- oracle.apps.fnd.pprdemo.webui
Step 6: Modify the Page Layout (Top-level) Region
Attribute-->Property
ID -->PageLayoutRN
Region Style -->pageLayout
Form Property--> True
Auto Footer--> True
Window Title -->PPR Demo Window Title True
Title -->PPR Demo Page Header
AM Definition--> oracle.apps.fnd.pprdemo.server.PPRAM
Step 7: Create the Second Region (Main Content Region)
Right click on PageLayoutRN > New > Region
Attribute--> Property
ID--> MainRN
Region Style--> messageComponentLayout
Step 8: Create Two Text Items
Create First messageTextItem --
Right click on MainRN > New > messageTextInput
Attribute Property
ID -->TextItem1
Region Style--> messageTextInput
Prompt Text--> Item1
Length--> 20
Disable Server Side Validation--> True
Disable Client Side Validation--> True
Action Type -->firePartialAction
Event--> TextItem1Change
Submit--> True
Note -- Disable Client Side Validation and Event property appears after you set the Action
Type property to firePartialAction
Create Second messageTextItem --
Select MainRN right click > New > messageTextInput
Attribute--> Property
ID --> TextItem2
Region Style--> messageTextInput
Prompt Text--> Item2
Length--> 20
Rendered--> ${oa.PPRVO1.TextItem2Render}
Step 9: Add Following code in PPRAMImpl.java
import oracle.apps.fnd.framework.OARow;
import oracle.apps.fnd.framework.OAViewObject;
import oracle.apps.fnd.framework.server.OAApplicationModuleImpl;
import oracle.apps.fnd.framework.server.OAViewObjectImpl;
public void handlePPRAction()
{
Number val = 1;
OAViewObject vo = (OAViewObject)findViewObject("PPRVO1");
if (vo != null)
{
if (vo.getFetchedRowCount() == 0)
{
vo.setMaxFetchSize(0);
vo.executeQuery();
vo.insertRow(vo.createRow());
OARow row = (OARow)vo.first();
row.setAttribute("RowKey", val);
row.setAttribute("TextItem2Render", Boolean.FALSE);
}
}
}
Step 10: Implement Controller for Page
Select PageLayoutRN in Structure pane right click > Set New Controller
Package Name -- mahi.oracle.apps.fnd.pprdemo.webui
Class Name – PPRCO
Write following code in processFormRequest function of PPRCO Controller
import oracle.apps.fnd.framework.OARow;
import oracle.apps.fnd.framework.OAViewObject;
public void processRequest(OAPageContext pageContext, OAWebBean webBean)
{
super.processRequest(pageContext, webBean);
PPRAMImpl am = (PPRAMImpl)pageContext.getApplicationModule(webBean);
am.invokeMethod("handlePPRAction");
}
public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
{
super.processFormRequest(pageContext, webBean);
PPRAMImpl am = (PPRAMImpl)pageContext.getApplicationModule(webBean);
OAViewObject vo = (OAViewObject)am.findViewObject("PPRVO1");
OARow row = (OARow)vo.getCurrentRow();
if ("TextItem1Change".equals(pageContext.getParameter(EVENT_PARAM)))
{
if (pageContext.getParameter("TextItem1").equals(""))
{
row.setAttribute("TextItem2Render", Boolean.FALSE);
}
else
{
row.setAttribute("TextItem2Render", Boolean.TRUE);
}
}
}
Which means that only a particular part of the page is refreshed and not the entire page.
PPR is a mechanism where in only the required part of the page is refreshed as against the whole page. The page objects fire the ?events? and accordingly the request is handled in the controller file
SPEL is the basic foundation of PPR in OA Framework.
PPR is used to change the contents of the page dynamically if certain events take place.
In this article I will explain the concepts of partial page rendering and its usage with SPEL in OA Framework.
What makes PPR so special?
By using Partial Page Rendering, the entire page is not refreshed.
Only the changed portion of the web page will be redrawn.
This reduces the network traffic and enhances the user experience.
Examples are :
Hiding Showing objects
Required/Optional
Disable/Enabled
Read Only Uneatable
While developing pages, we may face some scenarios where the requirement is to make
modifications on the current page itself, instead of navigating to different page.
Such as selecting an item from a choice list might result in modifications to other fields or clicking a
button to add a new row in table region and many more like these.
All these tasks can be performed by simply refreshing the page however this could result in
performance issues.
Another alternative is to use javaScript which will give faster results but implementing complex functions can be a tough job using javaScript.
UIX Framework provides a solution for this: Partial Page Rendering i.e. to re-render only
a limited portion of a page.
PPR is a three step process:
1) Partial page event
Partial page events are quite similar to full page events. However, there are two important differences between partial and full page events.
First, partial page events specify partial page rendering-specific event parameters which are not present on the full page event equivalents.
Real Time Example:
Method 1:
Let us try to implement partial page rendering for a text item.
If value of TextItem1 is null then TextItem2 will not be appeared on UI.
If value of TextItem1 is not null then TextItem2 will be appeared on UI.
Step 1: Create a New OA Workspace and Empty OA Project
File> New > General> Workspace Configured for Oracle Applications
File Name -- PPRProj
Project Name – PPRDemoProj
Default Package -- oracle.apps.fnd.pprdemo
Step 2: Create Application Module AM
PPRDemoProj right click > New > ADF Business Components > Application Module
Name -- PPRAM
Package -- oracle.apps.fnd.pprdemo.server
Check Application Module Class: PPRAMImpl Generate JavaFile(s)
Step 3: Create a PPRVO View Object
PPRDemoProj> New > ADF Business Components > View Objects
Name – PPRVO
Package – oracle.apps.fnd.pprdemo.server
In Attribute Page
Click on New button and create transient primary key attribute with the following properties:
Attribute-->Property
Name -->RowKey
Type -->Number
Updateable -->Always
Key Attribute--> (Checked)
Click New button again and create transient attribute with the following properties:
Attribute--> Property
Name--> TextItem2Render
Type--> Boolean
Updateable -->Always
Note – No Need to generate any JAVA files for PPRVO
Step 4: Add Your View Object to Root UI Application Module
Right click on PPRAM > Edit PPRAM > Data Model >
Select PPRVO in Available View Objects list and shuttle to Data Model list
Step 5: Create a OA components Page
PPRDemoProj right click > New > OA Components > Page
Name – PPRPG
Package -- oracle.apps.fnd.pprdemo.webui
Step 6: Modify the Page Layout (Top-level) Region
Attribute-->Property
ID -->PageLayoutRN
Region Style -->pageLayout
Form Property--> True
Auto Footer--> True
Window Title -->PPR Demo Window Title True
Title -->PPR Demo Page Header
AM Definition--> oracle.apps.fnd.pprdemo.server.PPRAM
Step 7: Create the Second Region (Main Content Region)
Right click on PageLayoutRN > New > Region
Attribute--> Property
ID--> MainRN
Region Style--> messageComponentLayout
Step 8: Create Two Text Items
Create First messageTextItem --
Right click on MainRN > New > messageTextInput
Attribute Property
ID -->TextItem1
Region Style--> messageTextInput
Prompt Text--> Item1
Length--> 20
Disable Server Side Validation--> True
Disable Client Side Validation--> True
Action Type -->firePartialAction
Event--> TextItem1Change
Submit--> True
Note -- Disable Client Side Validation and Event property appears after you set the Action
Type property to firePartialAction
Create Second messageTextItem --
Select MainRN right click > New > messageTextInput
Attribute--> Property
ID --> TextItem2
Region Style--> messageTextInput
Prompt Text--> Item2
Length--> 20
Rendered--> ${oa.PPRVO1.TextItem2Render}
Step 9: Add Following code in PPRAMImpl.java
import oracle.apps.fnd.framework.OARow;
import oracle.apps.fnd.framework.OAViewObject;
import oracle.apps.fnd.framework.server.OAApplicationModuleImpl;
import oracle.apps.fnd.framework.server.OAViewObjectImpl;
public void handlePPRAction()
{
Number val = 1;
OAViewObject vo = (OAViewObject)findViewObject("PPRVO1");
if (vo != null)
{
if (vo.getFetchedRowCount() == 0)
{
vo.setMaxFetchSize(0);
vo.executeQuery();
vo.insertRow(vo.createRow());
OARow row = (OARow)vo.first();
row.setAttribute("RowKey", val);
row.setAttribute("TextItem2Render", Boolean.FALSE);
}
}
}
Step 10: Implement Controller for Page
Select PageLayoutRN in Structure pane right click > Set New Controller
Package Name -- mahi.oracle.apps.fnd.pprdemo.webui
Class Name – PPRCO
Write following code in processFormRequest function of PPRCO Controller
import oracle.apps.fnd.framework.OARow;
import oracle.apps.fnd.framework.OAViewObject;
public void processRequest(OAPageContext pageContext, OAWebBean webBean)
{
super.processRequest(pageContext, webBean);
PPRAMImpl am = (PPRAMImpl)pageContext.getApplicationModule(webBean);
am.invokeMethod("handlePPRAction");
}
public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
{
super.processFormRequest(pageContext, webBean);
PPRAMImpl am = (PPRAMImpl)pageContext.getApplicationModule(webBean);
OAViewObject vo = (OAViewObject)am.findViewObject("PPRVO1");
OARow row = (OARow)vo.getCurrentRow();
if ("TextItem1Change".equals(pageContext.getParameter(EVENT_PARAM)))
{
if (pageContext.getParameter("TextItem1").equals(""))
{
row.setAttribute("TextItem2Render", Boolean.FALSE);
}
else
{
row.setAttribute("TextItem2Render", Boolean.TRUE);
}
}
}
Step 11: you have successfully finished. Run Your PPRPG page and Test Your
Work
No comments:
Post a Comment