Tuesday, 27 February 2024

Form Personlization-Q1

 

--> 1) What is Forms Personalization? Where it is used? What For?

Forms Personalization is a standard feature provided by oracle and supported by oracle to customize the forms. With Forms personalization you can hide fiedls, make fields mandatory, create zoom functionality, change lov dynamically e.t.c

 

--> 2) What are different triggers that can be used in personalization?

WHEN-NEW-FORM-INSTANCE

WHEN-NEW-BLOCK-INSTANCE

WHEN-NEW-RECORD-INSTANCE

WHEN-NEW-ITEM-INSTANCE

WHEN-VALIDATE-RECORD

MENUS

SPECIAL

EVENTS

 

--> 3) What is the difference between having personalization at function level rather than form level?

A Form can have multiple functions. Having the personalization at function level limits the scope of the personalization. Forexample in Inventory for both 'Master Item form' and 'Organization Item form' uses same form named INVIDITM where as both have different fucntions linked to them.

 

--> 4) Can you use global variables in forms personalization? If so How?

Yes.

 

--> 5) Can you hide a text field using personalization? How?

Yes. In the actions set DISPLAYED property to false.

 

--> 7) Can you transfer the data from one form to another form using personalization?

Yes. Using global Variables.

 

--> 8) How do you move personalization from one instance/database to other?

Form Personalizations can be moved easily through FNDLOAD from one instance to other. Refer to the Article FNDLOAD for more details:http://www.erpschools.com/Apps/oracle-applications/articles/General/FNDLOAD-to-transfer-the-menus-concurrent-programs-personalization-from-one-instance-to-other/index.aspx

 

--> 9) What is personalization and what features can be achieved through personalization?

1)Personalization gives us the ability to customize Forms in a very easy manner. The below customizations are possible through Personalization: 

2)Zoom from one form to another.

3)Pass data from one form to another through global variables Change LOV values dynamically.

4)Enable/Disable/Hide fields dynamically.

5)Display user friendly messages when required Launch URL directly from oracle form 

6)Execute PL/SQL programs through FORM_DDL package Call custom libraries dynamically

 

--> 12) At what level you can restrict personalization code?

FORM level and FUNCTION level

 

--> 13) What can be implemented through Forms Personalization?

The below can be done using PErsonalization: Zoom from one form to another Pass data from one form to another through globalvariables 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

 

--> 14) How to do implement ZOOM Functionality using personalization?

Refer to the Forms Personalization Tutorial article: http://erpschools.com/articles/forms-personalization-tutorial

 

--> 15) What are the advantages/disadvantages of Forms Personalization when compared to CUSTOM.pll?

Advantages: Personalizations are stored in tables rather than files Will not have a bigger impact when you upgrade or apply patchesto the environment Can be moved easily through FNDLOAD from one instance to other Can be restricted at site/responsibility/userlevel 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 don't have that ability. Disadvantages: Not all can be customized using Personalization.

 

--> 16) When you display a error message at WHEN-VALIDATE Trigger will the data will be saved into database?

No. If it is normal message or warning data will be saved but not for error message.

 

http://nemathora.blogspot.com/2014/03/forms-personalization.html?_sm_au_=itHDNvkRQs057s17





-> Oracle has provided a simple and easy feature to implement the customer specific requirements without          modifying the underlying forms code or Custom library.
--> This personalization feature provides easy, faster way to customize Oracle apps forms with
       minimum development effort.
--> The Form Personalization feature allows you to declarative alter the behavior of Forms-based screens          like changing properties, executing built-ins, displaying messages, and adding menu entries…etc

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 don’t 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.
  
To create personalization for a particular function/form, first invoke the function/form in Oracle
applications.
Navigation: choose “Help -> Diagnostics -> Custom Code -> Personalize” from the pull down

Personalization Tables:-

All personalization’s that we have made to Oracle application forms will be stored in following
tables :
1. FND_FORM_CUSTOM_RULES
2. FND_FORM_CUSTOM_ACTIONS
3. FND_FORM_CUSTOM_SCOPES
4. FND_FORM_CUSTOM_PARAMS
5. FND_FORM_CUSTOM_PROP_LIST
6. FND_FORM_CUSTOM_PROP_VALUES

The Personalization form mainly contains four sections.

 

·         Rules

·         Conditions

·         Context

·         Actions

 

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQT5RAezLyJcEYByLOh8ceRfUC1DydTtT55n-ThXjqGvwK8ZPnbGuui-1SJGuJQx9poqnxNwrMpUwx9SZKibyLhwMHkDHzdUeNH-Sr_QVNkXCZUBTW4BQ22T5llByNtjmWzYyEumaYRJgX/s1600/Personalization.png


Rules:

   - Contains Sequence, description of the rule. Level either Form or Function depends on requirement.
   - Enable or Disable Rules using check box
Condition:
  -  Provide Trigger Event, Trigger Object, Sql statement in Condition.

  -  Processing mode: not in Enter-Query mode, only in Enter-Query mode or both

Context:

  -  Like profile options: Industry, Site, Responsibility, User

Actions:

  -  Property, Message, Builtin, Menu

 

Real-Time Examples

1. Change Displayed data in LOV


Goal:
Change the LOV in “Supplier Name” field in the Find “Invoice Form (AP_APXINWKB)”
Navigation: Payables Manager > Entry > 
Invoices
Double Click it to open



https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOXnvwEzdDFMIOFulh7lxChetkYLD9I44ryWDc_J9PD2Z7gE2VZJDHxY1em4-Uch3jiASgJLTXLc7vpUKZ2fV3IDoE03JP1x_Oovjz4dhBzMcwpbekPc8P2sJwMHXq-eq9_B4tnchJBBEN/s1600/1.jpg


In the first filed, Supplier Name change LOV In such a way that no one can see the TaxPayerID in LOV. It should be masked with *’s.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgOWCy0GWsKiuyeSU4RMBp-3oKldG4X7hM1EB95JvUUR2ZumZLHci4A6bMg2g30lm8_PFeeSxA81FDPDA-yeJDBVi4kpp2oOOmfaUkMdFJ1LRfRlbIzj4fWGCoJ8_-_-nq-hkL95YTAK93/s1600/2.jpg


Navigation: Help Menu >> Diagnostics >> Custom Code >> Personalize

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMMS99T6P_yBMazQvqLmouLmnjAoHjauOtxfTKFTKRZrj8LmFfi9qAXiaJUkiYowBAATtObH1HhHvJYSmMs7HYDS9fsGIgVSO6WBXNZxcYB0qYWLRd-Cd9h3YpAOgZDkZTy-KMOq-KVdI2/s1600/3.jpg



Enter the following information:

Seq: 5   Description:  Disable Tax Payer Id

Level: Form  Enabled: checked


Trigger Event: WHEN-NEW-FORM-INSTANCE
Processing Mode: Not in Enter-Query Mode

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi51cbluTFFJniDAdIJlcxsHolAFIwyPZIjXduxbLui6WGhUiV0737Zcs5Aasc0_J6RhDntGT9JYK1bZ9AowIzm3orCN4DlBBEoOKJbnDvYF7j9y7r0syLKTWjceH6GGIaOIittN6FAgKmS/s1600/4.jpg



Click on Actions and enter the following.

Seq: 10 Type: Builtin Language: all

Builtin type: Create Record Group from Query
Argument: 
     SELECT vendor_name, vendor_number, 
     DECODE (active_flag, ‘Y’, ‘Yes’, ‘N’, ‘No’, ‘Yes’) active, ‘***’ num_1099,vat_registration_num, vendor_id, ”, ”, ”,       ”, hold_all_
payments_flag
     FROM po_vendors_ap_v
     WHERE num_active_pay_sites > 0 OR num_inactive_pay_sites > 0
     ORDER BY UPPER (vendor_name)
Group Name: ERP_SCHOOLS_ALL_VENDORS_NAME

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUXpipHFU6iDtrpgSKHFqZitNeidh1SK2SPz2y9Jmvbx4_QCez8-Fp_URsGzo6_eY3bZzq2BKvMPraNql0NelANkIqMFmS5TVMSAN3w5t3V-b_cYfvBqElGQ_8BsszY7X2WRCDrzvCWWpU/s1600/5.jpg



Now Create New Record with below information


Seq:12 Type: Property Language: All Enabled: Checked

Object Type: LOV
Target Object: INV_ALL_VENDORS_NAME
Property Name: GROUP_NAME
Value: ERP_SCHOOLS_ALL_VENDORS_NAME

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjifsE9o4jaIalOtQdnlO00hmqVuAT6QjBWbjzt02Nd_BrR6WnLPfCikjduQvB3ESCBJ3TH8njHrfog6r0FP4yif0AlBlduo0TAsuVv8YTsw-HFr2UO3jyuBWQSPrQ4mGVRb5M96ePtJJX8/s1600/6.jpg



Save it.

Click Validate
Click Apply Now.
Go to tools Menu >> click Validate All

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCSNPFnd-Fv7QuM507ZKn4LaEVmlzOSgWCdWUlcNZiWOUhSC5rO6-reqBBbq1s2Jif5X7_vcaY6bDMM6J6q69denu6Ft-bKyLadUDrAkRBKh2rEX7FdtidXmFn0kalBTpFFJtJ_E6egQBU/s1600/7.jpg



Once it is successfully validated you are ready to go.

Click ok and close personalization form.
Close your find invoices form and invoices form completely.
Open it again and click on Supplier name field LOV
Query any supplier. You will see your changes to the LOV as shown below.

 

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2UVm0bxmyx9LHpT5Vv5fNLcargt4Wc3G4zxQihK6DVsNCsHD3oGu1vdod_8Av3pAtVJPlGVKlRnhkNv-4XW9OOGm5mUrX7g1xdD9z1Jid0s6e3GTRVDkaXdVP00x8rAmDdUqK-7EjDRW8/s1600/8.jpg

 

 

Now Taxpayer ID is shown as ***** instead of number

 

Q. Have you heard about Zoom function in Oracle Apps Forms?
Yes. It is CUSTOM.ZOOM_AVAILABLE function

Q. What is the use?
Generally the function CUSTOM.ZOOM_AVAILABLE was used for navigation from a block to another and it by default returns BOOLEAN value; False. It was used in earlier time in Oracle Apps. Now we are using Open_Form, Call_Form etc.


Ex: If Zoom is available for this block, then return TRUE; otherwise FALSE.Always test for the form and block name. Refer to the SYSTEM variables for form name and block name in your code and branch accordingly. The module name of your form must match the form file name.

By default this routine must return FALSE.

The following example enables Zooms in the following places:

Form: FNDSCAUS, Block USER and

Form: FNDCPMCP, Block PROCESS

 

FUNCTION zoom_available RETURN BOOLEAN IS

form_name  VARCHAR2(30)  := NAME_IN(‘system.current_form’);

block_name VARCHAR2(30)  := NAME_IN(‘system.cursor_block’);

BEGIN

IF (form_name = ’FNDSCAUS’ AND block_name = ’USER’) OR

       (form_name = ’FNDCPMCP’ AND block_name = ’PROCESS’)

THEN

    RETURN TRUE;

ELSE

    RETURN FALSE;

END IF;

 END zoom_available;

Q. What is the sequence of Trigger firing in Form?
a) Pre-Form

b) Pre-Block

c) Pre-Record

d) Pre-Text-Item

e) When-New-Form-Instance

f) When-New-Block-Instance

g) When-New-Record-Instance

h) When-New-Item-Instance

i) Post-Text-Item

j) Post-Record

k) Post-Block

l) Post-Form


Q. What is the process of Form registration in Oracle Apps?


·             Send the file through FTP in binary mode to …/forms/US

·             Generate *.fmx by running the fmx script

·             f60gen module=<FORMNAME.fmb> userid=APPS/adm1n output_file=<FORMNAME.fmx> module_type=form batch=no compile_all=special


Q. What is the default directory of Forms in Oracle Apps?
Application top(autop)/forms/US

Q. How can we disable a form from the menu?
System Administrator (Responsibility) > Security > Responsibility -> Define (at Menu) > Find Responsibility Name & The Menu attached to it >  Exclusion > Exclude the Function of the Form

Q. How can you call DFF from Form?
By using a procedure called fnd_descr_flex.define
Ex: FND_DESCR_FLEX.DEFINE(BLOCK=>’ORDER_DETAIL’,  FIELD=>’DESCFF’,
                                                 APPL_SHORT_NAME=>’FND’,
                                                 DESC_FLEX_NAME=>’MYDESC’)

In Brief,

We need to follow the following steps in your form:
a) Create a displayed field to hold your concatenated segment values (the [ ] field).
b) Create fields (normally hidden) for each of the flexfield columns in your table (the

      one used for your flex).
c) In the form-level WHEN-NEW-FORM-INSTANCE,

call FND_DESCR_FLEX.DEFINE,

setting BLOCK parameter to the name of the block containing your [ ] field,

the FIELD parameter to the name of your [ ] field,

the APPL_SHORT_NAME parameter to the short name of your application and the DESC_FLEX_NAME parameter to the name of your descriptive flex.

In the form-level WHEN-NEW-ITEM-INSTANCE,

WHEN-VALIDATE-ITEM,

PRE-INSERT,

PRE-UPDATE,

POST-QUERY and

PRE-QUERY triggers place a call to FND_FLEX.EVENT as follows:

         FND_FLEX.EVENT ( 'TRIGGER_NAME');
where TRIGGER_NAME is the name of the trigger,

e.g. in the PRE-QUERY trigger .... FND_FLEX.EVENT('PRE-QUERY');

 

Form Personalization in Oracle Applications

 

The Form Personalization feature allows you to declaratively alter the behavior of Forms-based screens, including changing properties, executing builtins, displaying messages, and adding menu entries.

For each function (a form running in a particular context based on parameters passed to it), you can specify one or more Rules. Each Rule consists of an Event, an optional Condition, the Scope for which it applies, and one or more Actions to perform. An Event is a trigger point within a form, such as startup (WHEN-NEW-FORM-INSTANCE), or when focus moves to a new record (WHEN-NEW-RECORD-INSTANCE). There are standard events that almost every form sends, and certain forms send additional product-specific events.The Scope is evaluated based on the current runtime context to determine if a Rule should be processed or not. The Scope can be at the Site, Responsibility, User, or Industry level. Each Rule can have one or more Scopes associated with it.

 

The Condition is an optional SQL code fragment that is evaluated when the Event occurs; if it evaluates to TRUE then the Actions are processed.

Each Action consists of one of the following:

·   setting a Property, such as making a field Required or hiding a Tab page

·   executing a Builtin, such as GO_BLOCK, DO_KEY or FND_FUNCTION.EXECUTE

·   displaying a Message

·   enabling a Special menu entry

Once Rules are defined, when the target function is run then the Rules are automatically applied as events occur within that form.Although the Form Personalization feature is declarative, the intended audience is a person familiar with Oracle Forms including the PL/SQL programming language, and the Oracle Applications Development Guide. Additionally, any change made could interfere with the base code of a form (the code that Oracle ships), thus the Support statements discussed later in this chapter must be followed diligently.

Using the Personalization Form

 

To create personalizations for a particular function, first invoke that function from the Navigation menu. While in the form, choose Help->Diagnostics->Custom Code-> Personalize from the pulldown menu. This menu entry is secured by the FND_HIDE_DIAGNOSTICS (Hide Diagnostics menu entry) and DIAGNOSTICS (Utilities:Diagnostics) profiles, as are most other entries on the Diagnostics menu.

 

The Personalization form will open and automatically query existing Rules for that function. After making changes, Save them then close and re-run the function to have them take effect. You can also Validate or Apply certain changes immediately to test them without having to re-run the target form by pressing the ‘Validate’ or ‘Apply Now’ buttons.

 

https://i1.wp.com/farm1.static.flickr.com/90/258825290_46c1c884d8.jpg

 Why personalization?

Ø      Oracle Supports personalization unlike customization

Ø      Personalization 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 don’t 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

 

Personalization Tables:

FND_FORM_CUSTOM_RULES

FND_FORM_CUSTOM_ACTIONS

FND_FORM_CUSTOM_SCOPES

FND_FORM_CUSTOM_PARAMS

FND_FORM_CUSTOM_PROP_LIST

FND_FORM_CUSTOM_PROP_VALUES