Hiding an item conditionally through SPEL in OAF ( VO Extension + Personalization )
- by Manoj Madhusoodanan
In this blog I will explain how to conditionally set property of an item through personalization.Let me discuss using a business scenario.
My customer wants to make Hold from Payment/ All Invoices column readonly when the Operating Unit is UK ( Configured in a lookup XXCUST_EXCLUDED_ORGS ).
Analysis
First thing is we have to find out the page and business components.
Page: /oracle/apps/pos/supplier/webui/QuickUpdatePGView Object: oracle.apps.pos.supplier.server.SitesVO
Solution
Download oracle.apps.pos.supplier.server.SitesVO from $JAVA_TOP to JDEV_USER_HOME/myprojects.Make sure the transfer mode of the file (See below table).
Normal
0
false
false
false
EN-US
X-NONE
X-NONE
MicrosoftInternetExplorer4
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
File Type
Transfer Mode
.xml
ASCII
.class
Binary
.tar
Binary
.java
ASCII
Since there is no VO attribute available to determine the Site Org against the lookup Org we have to add the logic inside a custom VO attribute. So VO extension is required in this scenario.
Add an attribute "isPymtReadOnlyStr" in the existing query.This column returns 'Y' if there is a match in the lookup otherwise 'N'. Create a transient attribute "isPymtReadOnly" of type BOOLEAN.This will return TRUE if "isPymtReadOnlyStr" is "Y" otherwise FALSE.
The reason behind adding the "isPymtReadOnly" is we are setting the item property as readonly through SPEL.It will recognize only BOOLEAN.But SQL query doesn't support BOOLEAN.So we are building a BOOLEAN attribute from the SQL which will use in the personalization layer to set the item property.
Steps
1) Create a new VO xxcust.oracle.apps.pos.supplier.server.XXCUSTSitesVO which extends from oracle.apps.pos.supplier.server.SitesVO. Make sure the binding style should be same as SitesVO.
Create the XXCUSTSitesVO which same query of SitesVO.Later we will add the new attribute to XXCUSTSitesVO.
At this point of time all the existing VO attributes are of Updatable property as "Always".
Press Finish without creating XXCUSTSitesVORowImpl.java
2) Select the XXCUSTSitesVO from JDeveloper Application Navigator. Modify the query and add the extra column.
3) Create a new transient attribute as follows.
4) Once you modify the query all the existing attributes Updatable property will change to Never.So revert that property back to orginal.
5) Create XXCUSTSitesVORowImpl.java by checking the following check box.
6) Add the following code snippet in XXCUSTSitesVORowImpl.java
7) Create the substitution for SitesVO as follows.
Following entry will get created in current jpx file.
<Substitutes> <Substitute OldName ="oracle.apps.pos.supplier.server.SitesVO" NewName ="xxcust.oracle.apps.pos.supplier.server.XXCUSTSitesVO" /> </Substitutes>
8) Migrate XXCUSTSitesVOImpl.java,XXCUSTSitesVORowImpl.java and XXCUSTSitesVO.xml from desktop to actual instance.
9) Migrate the substitution using jpximporter.
10) Restart the server and verify the substitution has done perfectly.
11) Go to /oracle/apps/pos/supplier/webui/QuickUpdatePG and personalize the page.Set the item read only property to ${oa.SitesVO.IsPymtReadOnly}
12) Click on Apply and in next page click on Return to Application.
Verify your output.
Note: You can remove the substitution using following script.Please click here.