You are on page 1of 27

Forms Personalization Tutorial

Why personalization?

Oracle Supports personalization unlike customization

Personalizations are stored in tables rather than files

Will not have a bigger impact when you upgrade or apply patches to the environment

Can be moved easily through FNDLOAD from one instance to other

Can be restricted at site/responsibility/user level

Easy to disable/enable with click of a button.

Personalization will store who columns with which we have the ability to track who created/modified
it where as in CUSTOM.PLL we dont have that ability.

Can be applied to new responsibilities/users easily.

Can be restricted to function or form.

What can be done through personalization?

Zoom from one form to another

Pass data from one form to another through global variables

Change LOV values dynamically

Enable/Disable/Hide fields dynamically

Display user friendly messages when required

Launch URL directly from oracle form

Execute PL/SQL programs through FORM_DDL package

Call custom libraries dynamically

Zoom Functionality through Forms Personalization


What is Zoom?

Directly going from one form to another form with click of a button is called zoom functionality in oracle
applications. This can be done in different ways. Firstly, We can just call the second form and then leave it
for user to enter the data. Second way is call the second form from first and then dynamically populate
the data in second form based on first forms data.
How to implement Zoom functionality?
In this tutorial we will zoom from Order Organizer form to Shipping transactions form and also populate
the order number dynamically in destination form.
Know the following things before you start

Know the names of source form and destination form

If you need to populate the data dynamically know what fields that you need to populate.

Global Variables: These variables can be initialized in any form and can be used in any form all over
the applications

Trigger & Action: trigger is an event and action is operation/execution that we do. When an event
occurs we do operation/execution

Source form: Order Organizer form ( )


Destination form: Shipping transactions form (WSHFSTRX)
Source field: Order number ()
Destination field1: Order number low (QM_DLVB.DLVB_SOURCE_HEADER_NUMBER_LO)

Destination field2: Order number high (QM_DLVB.DLVB_SOURCE_HEADER_NUMBER_HI)


Destination field3: Line Status (QM_DLVB.DLVB_LINE_RELEASED)
Process flow:

Initialize the menu/icon in source form

Initialize the global variables

When the menu/icon is clicked copy the order number from source form filed to global variable and
then launch the destination form

In the destination form copy the value from global variable to destination form field.

Initialize the menu/icon in source form


Navigation: Order Management Super User > Orders, Returns > Order Organizer

Navigation: Help > Diagnostics > Custom Code > Personalize

Follow the screenshots

Personalization in Destination Form

Forms personalization call PLSQL procedure


Many times we need to execute custom PLSQL procedures and we often choose to create concurrent
programs to do that but there are certain cases where we need to use forms personalization to call PLSQL
procedure.

I will take one simple business requirement to help you understand the need for this kind of approach.
Lets say your business has a third party system like Agile to maintain your inventory items but your item
creation should start from Oracle Apps. As we dont want to give our base table MTL_SYSTEM_ITEMS_B
table access to agile system we will create a custom table (preferred in custom schema) with limited
columns which need to be shared with agile system.
Custom Table Script:
1 CREATE TABLE "APPS"."ERPS_DEMO_FORMS_PERS"
2 ( "ID" VARCHAR2(100 BYTE),
3 "NAME" VARCHAR2(100 BYTE)
4 );

Custom procedure to call from Inventory item Form via Forms personalization.
1 CREATE OR REPLACE PROCEDURE erps_demo_forms_pers_prc(
2 p_inv_item VARCHAR2,
3 p_inv_desc VARCHAR2)
4 AS
5 BEGIN
6 INSERT INTO erps_demo_forms_pers VALUES
7 (p_inv_item,
8 p_inv_desc
9 );
10 COMMIT;
11 EXCEPTION
12 WHEN OTHERS THEN
13 NULL;
14 END;

Now having Custom table and custom procedure compiled in database we will move on to front end and
personalization to call this procedure.
Loging to Apps front end and navigate to Inventory Responsibility.

Navigation: Inventory > Items > Master Items

If it prompts for selection of inventory organization select anything as per your preference. This form
being a master form your selection doesnt matter here in anyway.
Navigation: Help > Diagnostics > Custom Code > Personalize

Enter information as below.


Recommendation: Always limit personalization scope to USER when you are developing so that if
something goes wrong you can at least log in as another user and disable it.

Navigate to Actions Tab and enter the information as shown in screenshot below.

Argument:
1 ='declare
2 begin
3 erps_demo_forms_pers_prc('''||${item.MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR.value}||''',
4 ${item.MTL_SYSTEM_ITEMS.DESCIPTION_MIR.value}||''' );
5 end'

Save it.

Close form.
Open form again, Create new inventory item and save it.
Now you should be able to see the item in both standard base table and also in our custom table.

You might also like