Wednesday, September 11, 2019

PPR in OAF ?

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);
}
}
}


Step 11:  you have successfully finished. Run Your PPRPG page and Test Your
Work









No comments:

Post a Comment

AME (Approval Management Engine)

AME (Approval Management Engine) : AME Stands for Oracle Approval Management Engine. AME is a self service web application that enables...