You are on page 1of 21

Form Personalization

This document describes the use of the Form Personalization feature, which allows you to
declaratively alter the behavior of Forms-based screens.
The following topics are covered:
Overview
sing the Personalization form
!imitations
"#amples and Tips
$dministration %indow
&oving Personalizations between instances
'elationship to ()TO& library
'elationship to Folder
Troubleshooting, )upport, and pgrade considerations
(hanges to Form Personalization in **.+.*, (*
(hanges to Form Personalization in **i.$T-.PF./ 'ollup 0 1Patch 200234+5
(hanges to Form Personalization in **i.$T-.PF./ 'ollup 2 1Patch 2464+735
Overview
The Form Personalization feature allows you to declaratively alter the behavior of Forms-based
screens, including changing properties, e#ecuting builtins, displaying messages, and adding
menu entries.
For each function 1a form running in a particular conte#t based on parameters passed to it5, you
can specify one or more 'ules. "ach 'ule consists of an "vent, an optional (ondition, the )cope
for which it applies, and one or more $ctions to perform.
$n "vent is a trigger point within a form, such as startup 1%/"8-8"%-FO'&-98)T$8("5, or
when focus moves to a new record 1%/"8-8"%-'"(O':-98)T$8("5. There are standard
events that almost every form sends, and certain forms send additional product-specific events.
The )cope is evaluated based on the current runtime conte#t to determine if a 'ule should be
processed or not. The )cope can be at the )ite, 'esponsibility, ser, or 9ndustry level. "ach 'ule
can have one or more )copes associated with it.
8OT": the scope of ;9ndustry; is reserved for future use.
The (ondition is an optional )<! code fragment that is evaluated when the "vent occurs= if it
evaluates to T'" then the $ctions are processed.
"ach $ction consists of one of the following:
setting a Property, such as ma>ing a field 'e?uired or hiding a Tab page
e#ecuting a @uiltin, such as -O.@!O(A, :O.A"B or F8:.F8(T9O8."C"(T"
displaying a &essage
enabling a )pecial menu entry
Once 'ules are defined, when the target function is run then the 'ules are automatically applied
as events occur within that form.

$lthough the Form Personalization feature is declarative, the intended audience is a person
familiar with Oracle Forms including the P!D)<! programming language, and the Oracle
$pplications :evelopment -uide. $dditionally, any change made could interfere with the base
code of a form 1the code that Oracle ships5, thus the )upport statements discussed later in this
chapter must be followed diligently.
Using the Personalization Form
To create personalizations for a particular function, first invo>e that function from the 8avigation
menu. %hile in the form, choose /elp-E:iagnostics-E(ustom (ode-E Personalize from the
pulldown menu. This menu entry is secured by the F8:./9:".:9$-8O)T9() 1/ide :iagnostics
menu entry5 and :9$-8O)T9() 1tilities::iagnostics5 profiles, as are most other entries on the
:iagnostics menu.
The Personalization form will open and automatically ?uery e#isting 'ules for that function. $fter
ma>ing changes, )ave them then close and re-run the function to have them ta>e effect. Bou can
also Falidate or $pply certain changes immediately to test them without having to re-run the
target form by pressing the GFalidateH or G$pply 8owH buttons.
Figure *: The Personalization screen, when opened from the sers form 1Function 8ame F8:.F8:)($)5
"ach 'ule consists of the following fields:
Seq: The se?uence in which rules will be processed. This is a value between * and *,,, with *
being processed first. The se?uence of rules does not have to be uni?ue. 8ote that there is an
interaction with the Trigger "vent field, described below.
Description: se this field to document the personalization you are ma>ing.
Enabled: nchec> this chec>bo# to temporarily disable processing of a 'ule.
The following fields appear on the (ondition tab:
Trigger Event: )elect the event at which you want the 'ule to be processed. Bou can pic> from
the list of standard events, or type in a specific event uni?ue to the form. 8ote that this field is a
(ombobo#, which is a hybrid of a Poplist and Te#t 9tem. 'ules are processed first by matching
the "vent, then by their )e?uence number.
Trigger Object: :epending on the Trigger "vent, this field may be :isabled, or "nabled and
'e?uired in which case it will validate against a !ist of Falues. For e#ample, if Trigger "vent
%/"8-8"%-9T"&-98)T$8(" is selected, then you must enter a specific block.field for that
trigger to be processed.
Condition: This is an optional )<! code fragment that is evaluated when the "vent occurs= if it
evaluates to T'" then the $ctions are processed. The condition can contain any of the
following:
)<! functions and operators, such as $8:, O', TO.(/$', :"(O:", and 8F!
'eferences to bind variables 1:bloc>.field5, including :system, :global and :parameter
values. se the ;$dd 9tem...; button to assist with item names.
(alls to server-side functions that do not have OT parameters
The entire fragment must be syntactically correct, and can be tested with the ;Falidate; button,
which will evaluate it in the current conte#t of the target form. 9f the evaluation fails, the
processing engine will return an O'$ error as if the condition had been part of a )<! e#pression.
)ome e#amples:
Condition Comments
:users.user.name is not null and
:users.description is null
The rule will be processed if the user.name field has a
value and the description field does not
sysdate EI to.date1G*-*-J,,+H, G::-
&&-''''H5
The rule will be processed if the current date is e?ual to
or after Kanuary *, J,,+.
Fire in Enter-Qer! "ode: This chec>bo# controls whether the 'ule should be processed if the
event occurs during enter-?uery mode processing.
"ach 'ule consists of one or more )cope rows, and one or more $ctions. 9f a 'ule has no )cope
rows or $ction rows, it is not processed. 8ote that upon saving a 'ule, if no )cope rows have
been entered the form will automatically create a row at the )ite level. 9f any scope matches the
current runtime conte#t then the 'ule will be processed.
The following )cope fields appear in the (onte#t region of the (ondition tab:
#evel: )elect the level at which you want the rule to be applied, either )ite, 'esponsibility, ser,
or 9ndustry.
$ale: @ased on the !evel, either :isabled, or "nabled and 'e?uired in which case it will validate
against a !ist of Falues.
$ll $ction fields appear on the $ctions tab:
Figure J: the $ctions tab of the Personalization form
Seq: The se?uence in which actions will be processed within that 'ule. This is a value between *
and *,,, with * being processed first. The se?uence does not have to be uni?ue. $ll of the
actions associated with a particular rule are processed as a group, then the ne#t rule 1if any5 is
processed. This feature is particularly useful when moving items, in which case a canvas may
have to be resized first before an C Position can be altered.
T!pe: the type of action to ta>e:
Property: allows you to select a specific obLect, a property of that obLect, and specify a
new value for that property
@uiltin: allows e#ecution of a standard Forms @uiltin, such as -O.@!O(A or :O.A"B
&essage: displays a message in one of several styles
)pecial: enables a special menu entry, defining its label, icon name and which bloc>s it
applies to.
Description: se this field to document the personalization action you are ma>ing.
#angage: )pecify ;$ll; to have the action processed for any language, or select a specific
language. Typically te#t-related personalizations would be applied for a specific language.
Enabled: nchec> this chec>bo# to temporarily disable processing of the action.
%ppl! &o': For several Types, this button will be enabled. 9t allows you to apply the change
immediately to the target form to test its effect. 8ote that the actual effect that will occur during
normal runtime e#ecution of rules may be different, due to timing of triggers and other
considerations.
The following buttons are enabled conditionally based on the Type field:
%dd (ara)eter*: !ist of Falues that displays currently used parameters. $pplies to the builtin
F8:.F8(T9O8."C"(T" only.
%dd +lock*: !ist of Falues that displays bloc> names.
%dd ,te)*: !ist of Falues that displays item names.
$alidate: sed to test if the synta# of your string is valid. 9f the evaluation fails, the processing
engine will return an O'$ error as if the string had been part of a )<! e#pression. Otherwise, it
will display the te#t e#actly as it would appear at runtime in the current conte#t.
The following fields appear conditionally based on the Type field:
For a Type of ;Property;:
Figure 0: The fields associated with an action of ;Property;
Select +! Te-t: This button allows you to select an obLect based on te#t appearing on the
screen at the point in time that you invo>e the Personalization form, including any changes
that current rules might have performed. For e#ample, if you want to change a field with the
current prompt of ;9tem 8umber;, you should see ;9tem 8umber; in this list, and selecting it will
automatically fill in the ObLect Type and Target ObLect fields.

Object T!pe: the type of obLect, including 9tem, %indow, @loc>, Tab, (anvas, 'adio button,
Fiew, -!O@$!, or P$'$&"T"'.
Target Object: based on the ObLect Type, the internal name of the obLect. For ObLect Types of
-!O@$! and P$'$&"T"', the Target ObLect name must not include those >eywords. For
e#ample, to refer to -!O@$!.CC.&B.F$'9$@!", only enter CC.&B.F$'9$@!".
(ropert! &a)e: based on the ObLect Type, the properties that can be personalized. The
ObLect Type of 9tem supports a vast array of properties including:
9tem-level properties, which set the property for all instances of that obLect.
9tem-instance properties, which set the property for the current record of that bloc>
using set.item.instance.property15
$pplications cover properties, which are a hybrid of multiple item and item-instance
level properties. These are fully documented in the Oracle $pplications :evelopment
-uide.
$ale: the new value. The appearance and validation of this field changes based on whether
the property accepts @oolean values 1TrueDFalse5, numbers, a restricted set of values, or a
string 1)ee "valuation of )trings below5
.et $ale: This button gets the current property value of the obLect.
For a Type of ;&essage;:
Figure 2: The fields associated with an action of ;&essage;
"essage T!pe: either ;)how;, ;/int;, G%arnH, ;"rror;, or G:ebugH. G"rrorH and G%arnH if the user
selects the G(ancelH button will raise a form.trigger.failure after e#ecuting, and stop all further
processing. &essages of type G:ebugH will only be displayed if the G)how :ebug &essagesH
chec>bo# is chec>ed.
"essage Te-t: The te#t you want to display in the message. 1)ee "valuation of )trings
below5
For a Type of ;@uiltin;:
Figure +: The fields associated with an action of G@uiltin;
+iltin T!pe: The name of the builtin, such as -O.9T"&, :O.A"B, -O.@!O(A, '$9)"
FO'&.T'9--"'.F$9!'", FO'&).::!, F8:.T9!9T9").OP"8.'! or
F8:.F8(T9O8."C"(T".
%rg)ent: The argument for the currently selected builtin, if applicable.
:epending on the specific builtin, other argument fields may appear.
Figure 4: The fields associated with an action of G@uiltinH and @uiltin Type of F8:.F8(T9O8."C"(T"
Fnction &a)e: The name of the function that should be e#ecuted.
(ara)eters: Bou can manually enter parameters or use the G$dd ParameterMH button. The
G$dd ParameterMH button displays an !OF listing currently defined parameters for the
Function 8ame, by ?uerying other functions for that same form. 9t is possible that other
parameters e#ist that will not be displayed in the !OF. The only way to see all parameters
that a function has is to open the form in the Oracle Forms @uilder. Oracle ma>es no
warranties that any function provides the specific input parameters that you may desire, nor
that any e#isting parameter and its behavior will remain unchanged after a patch.
For a Type of ;)pecial;:
Figure 6: The fields associated with an action of ;)pecial;
"en Entr!: One of 2+ menu entries that you can activate. The menus are arranged in 0 sets
of *+ each under the Tools, 'eports and $ctions pulldown menus. 9f you select a menu that
the base form is already using, your functionality will override the form;s functionality.
"en #abel: The te#tual label that you want on the menu entry. 1)ee "valuation of )trings
below5
/ender line before )en: 9f chec>ed, will render a line above the menu entry to visually
separate it from prior entries.
Enabled in +lock0s1: )pecify the bloc>s that you want the menu entry enabled in= specify
more than one bloc> by separating the names with a comma. 9f no bloc>s are specified, the
entry will be enabled in all bloc>s. se the ;$dd @loc>...; button to add a bloc>name to the end
of the field.
,con &a)e: )pecify an optional icon name that you want added to the Toolbar to achieve the
same functionality as in the special pulldown menu entry.
)pecifying an action of ;)pecial; merely activates the appropriate menu entry. %hen the user
selects the entry, it will fire the corresponding )P"(9$!N trigger. Bou must must also create
another rule that traps this Trigger "vent and performs the desired functionality.
8ote that the $ctions bloc> automatically defaults most values from the prior row when you create
a new row.
"valuation of )trings
"very property that ta>es a string can either be processed literally or evaluated at runtime.
9f you type a string in that does not start with GIH, then the e#act value you type in will be
used at runtime
9f the string you type starts with GIH, then the te#t immediately after that character will be
evalated at runtime. This allows you to write comple# logic that can include references
such as:
)<! operators, such as OO, TO.(/$', :"(O:", and 8F!
bind variables 1:bloc>.field5, including :system, :global and :parameter values. se the
;$dd 9tem...; button to assist with item names.
(alls to server-side functions that do not have OT parameters.
)"!"(T statements. To use this form, you must follow these rules:
The te#t must start with ;I)"!"(T;
The column being selected must evaluate to a (/$', with a length no longer
than J,,, bytes.
Bou must alias the column being selected to ;$;.
Bour )"!"(T statement should only return one row, but if more than one is
returned only the value of the first row will be used.
%hen using this method you must follow )<! conventions for string processing, including
escaping of ?uotes. The following e#amples show how this can be used:
String typed in Personalization form Result at runtime
I;Bour password will e#pire on ;OO1sysdateP65 Bour password will e#pire on 0*-:"(-
J,,2 Qassuming that sysdate is
currently J2-:"(-J,,2R
I;Bour password must have at least
;OO:global.password.lengthOO; characters.;
Bour password must have at least 7
characters. Qassuming that global
variable password.length e#ists and
has a value of 7R
IHBour password isnHHt valid.H Bour password isnHt valid.
I:items.part.number Qwhatever the current value of variable
:items.part.number isR
I)"!"(T meaning $ from fnd.loo>ups where
loo>up.type I ;:$B.8$&"; and loo>up.code
I ;)$T;
)aturday Qassuming that the system is
running in englishR
I)"!"(T ;The office is closed on ;OOmeaning $
from fnd.loo>ups where loo>up.type I
;:$B.8$&"; and loo>up.code I ;)$T;
The office is closed on )aturday
Qassuming that the system is running in
englishR
se the GFalidateH button to test if the synta# of your string is valid. 9f the evaluation fails,
the processing engine will return an O'$ error as if the string had been part of a )<!
e#pression. Otherwise, it will display the te#t e#actly as it would appear at runtime in the
current conte#t.
Limitations
This feature has several significant limitations due to the architecture of Oracle Forms andDor the
e-@usiness )uite.
Bou can only change what Oracle Forms allows at runtime. For e#ample, the following cannot be
changed:
Bou cannot create new items
Bou cannot move items between canvases
Bou cannot display an item which is not on a canvas 1thus, individual fle#field
segments cannot be displayed5
Bou cannot set certain properties such as the :atatype of an 9tem.
Bou cannot change frames, graphics, or boilerplate
Bou cannot hide the item that currently has focus

Form Personalization can only respond to events that are centrally processed and dispatched by
$PP(O'". These are limited to:
%/"8-8"%-FO'&-98)T$8(", %/"8-8"%-@!O(A-98)T$8(", %/"8-
8"%-'"(O':-98)T$8(", %/"8-8"%-9T"&-98)T$8(". These events
occur as the user moves focus within the form.
%/"8-F$!9:$T"-'"(O': 1in many but not all forms5. This event occurs
whenever changes have been made to the current record in the current bloc>.
)P"(9$!* through )P"(9$!2+. These occur when the user selects entries
from the Tools, 'eports and $ctions pulldown menus.
Product-specific events. These are typically documented in implementation
manuals, such as ;(onfiguring, 'eporting and )ystem $dministration in Oracle
/'&);.
Bou can see events that are being passed by enabling the ;)how "vents; option in the (ustom
(ode menu.
(ertain personalizations must be performed at specific events:
To specify the 9nitial Falue of an 9tem, you must perform that action in the
%/"8-8"%-'"(O':-98)T$8(" event of the bloc> that contains the item.
)pecial menu entries can only be created at form startup 1%/"8-8"%-FO'&-
98)T$8("5
@oth the Personalization form and the runtime processing engine will report errors for these
cases and s>ip processing of them.
(ertain obLects may not be available to you to change, or cannot be validated:
9f a Tab within a form has no items directly rendered on it, that Tab will not
appear in the list of obLects that you can modify. 9n some cases, ma>ing that Tab
the active tab before invo>ing the Personalization feature may cause it to be
detected.
The obLect types -!O@$! and P$'$&"T"' cannot be detected, thus these
fields have no !OFs to restrict their input. se the ;Falidate; or ;$pply 8ow;
buttons to determine if the values you have entered actually e#ist. 8ote that
-!O@$! variables are dynamically created, so whether they e#ist or not can be
a matter of timing.
&ost significantly, any change you ma>e might interfere with the normal operation of the form.
This can manifest itself in several ways, such as:
Bou may ma>e a personalization but it doesn;t ta>e effect, because there is code
in the form that overrides it. 9n some cases you may be able to perform your
personalization by moving the Trigger "vent to a ;lower; level, such as bloc>- or
item-level.
Bour personalization may simply produce the wrong result, because your
change interacted with the base code in une#pected and untested ways. $t best
this error will occur immediately upon the personalization being applied= at worst
it could affect some later processing which does not appear to be directly related
to the obLect or event.
9n e#treme cases, your changes may prevent the form from running at all,
ma>ing it difficult to open the Personalization screen to remove the offending
personalization unless you turn off (ustom (ode.
@ecause of this, it is critical that any change be thoroughly tested in a Test environment. )ee the
;Troubleshooting, )upport, and pgrade considerations; section later in this chapter for more
information.
Examples and ips
(hanging the prompt of an item
This is a step-by-step e#ample of changing a prompt. 9n this case, we will modify the ;sers; form,
and change the prompt Gser 8ameH to G!ogon 8ameH:
*. Open the sers form
2. )elect /elp-E:iagnostics-E(ustom (ode-E Personalize from the pulldown menu. 9f this
menu entry is disabled, chec> the values of the F8:./9:".:9$-8O)T9() and
:9$-8O)T9() profiles.
0. (reate a rule with the following values:
Seq: *
Description: (hange prompt of ser 8ame
$ccept the defaults for all other values of the 'ule and (onte#t
2. )elect the $ctions Tab and enter the following values:
Seq: *
Press the G)elect @y Te#tH button and choose the Gser 8ameH row from the !OF
(ropert! &a)e: P'O&PT.T"CT
$ale: !ogon 8ame
$ccept the defaults for all other values of the $ctions.
+. )ave
4. $ctivate the sers form, then close it.
6. 'e-open the sers form. Bou should see that the prompt is now G!ogon 8ameH.
7. To disable this 'ule, set "nabled to unchec>ed 1at either the 'ule or $ction level5, or Lust
delete the 'ule, then )ave.
:isabling or /iding a Tab Page
%hen you disable or hide a tab page, it does not change the state of the items on that page. &ost
significantly, if the items remain 8avigable, and there is code elsewhere that attempts to navigate
to them, it will succeed, causing the tab page to appear. To completely achieve the effect of hiding
or disabling a tab page, you may need to account for the following:
The G8e#t 8avigation 9temH of the item that immediately preceeds the first item on the tab
page.
The GPrevious 8avigation 9temH of the item1s5 that immediately follow the last item on the
tab page.
The G8e#t 8avigation @loc>H of the bloc> that immediately preceeds the bloc> that
contains an item on the tab page.
The GPrevious 8avigation @loc>H of the bloc>1s5 that immediately follow the bloc> that
contains an item on the tab page.
:epending on how the form was coded, there may be additional properties or events that need to
be changed.
&essages are a great debugging tool
:ue to interactions of Personalization and the base code of each form, it is common to create
rules that do not seem to be getting applied, or are applied incorrectly. The simplest way to debug
is to include &essage actions of type G:ebugH either immediately before or after the action of
interest. )et the G)how :ebug &essagesH chec>bo# to chec>ed, and then re-run your form= only in
this mode will :ebug messages be displayed. 9f you do not see your debug message at all, then
the most li>ely reasons are:
The 'ule or $ction is not enabled
The (ondition you entered for the 'ule has evaluated to F$!)"
The Trigger "vent andDor Trigger ObLect were not what you e#pected
The scope of the rule only consists of 'esponsibility, 9ndustry andDor ser, and none is
true for the current conte#t.
$n action is e#ecuting the @uiltin ;'$9)" FO'&.T'9--"'.F$9!'"; . That will abort all
further processing for that event.
The !anguage of the $ction is different than what you are currently running
Bou have set (ustom (ode to GOffH or G(ore code onlyH in the pulldown menu.
9nteraction with the G(lose Other FormsH chec>bo#
%hile building personalizations, you may need to e#it and re-open your form in order to see the
effect of your personalizations. %e recommend that you set the G(lose Other FormsH option in the
Tools menu of the 8avigator to unchec>ed, otherwise the Personalization form itself will close
automatically before your form runs.
sing the same value multiple times
Often in code you want to determine a value once, then refer to it multiple times. Bou can do that
with Form Personalization by using the ;Falue; property of a -!O@$! variable. Bou can set such a
value using any of the methods mentioned in ;"valuation of )trings;. @y setting that property, the
global variable will be created at that point in time, and then any future actions can refer to that
variable. To minimize the ris> of collision with -!O@$! variables that the base form may create,
name your variable starting with ;CC;.
Sooming to a form
$ common scenerio is to open another function and have that form ?uery a specific row of data
associated with the source form. For e#ample, consider the sers form which allows entry of
'esponsibilities for each user. $ possible zoom would be to carry the current responsibility >ey to
the 'esponsibilities form and have it ?uery that record automatically. )ome strategies to
accomplish this type of functionality are:
The target function may already accept the value as an input parameter. )imply passing
the parameter name and value as the argument to the Function may accomplish the
desired result.
9n forms that have Find windows, it may be possible to populate the appropriate field in
the Find window, then issue :O.A"B1;8"CT.@!O(A;5 which should simulate pressing
the Find %indow. Pass the value1s5 between forms by using global variables.
Bou could modify the :"F$!T.%/"'" clause of the appropriate bloc>, then ?uery it
using :O.A"B1;"C"(T".<"'B;5, then reset the :"F$!T.%/"'" clause bac> to
its original value. Pass the value1s5 between forms by using global variables.
Put the form into enter-?uery mode using :O.A"B1;"8T"'.<"'B;5, populate the
desired fields, then issue :O.A"B1;"C"(T".<"'B;5. Pass the value1s5 between
forms by using global variables. This is a comple# techni?ue though because invo>ing
enter-?uery mode will suspend processing of that rule= populating the fields and issuing
the :O.A"B1;"C"(T".<"'B;5 would need to be done in the %/"8-8"%-
'"(O':-98)T$8(" event that fires as a result of entering ?uery-mode.
%ith any techni?ue that uses global variables, be aware that they may not e#ist yet. Bou should
always initialize them before referring to them by setting the 9nitial Falue to null, which will create
the variable if it does not yet e#ist, otherwise it will leave it unchanged.
Bou should also code (onditions to account for situations where the value you want to pass
between forms has not yet been entered, for e#ample when the cursor is sitting on a brand new
row.
!dministration "indow
The GFind PersonalizationsH administration window can be invo>ed only from the Personalization
Form. 9n the Tools pulldown menu, select G$dministrationH. This will allow you to get a list of all
functions that currently have Personalizations 1'ules5 defined.
Figure 7: The GFind PersonalizationsH administration window
For): The filename of a form.
Fnction: $ uni?ue function name defined for a form. One form can have many different functions
defined for it.
9f you press the Find button while both Form 8ame and Function 8ame are empty, all forms that
have any personalizations 1enabled or not5 will be ?ueried. This is particularly useful after
applying a patch= >nowing which forms the patch affects, you can ?uic>ly detemine if any
personalizations need to be re-validated.
2ser Fnction &a)e: $ description of the form function. Bou see this name when assigning
functions to menus.
Enabled /les: The number of active rules that a function has defined.
#oving Personalizations $etween instan%es
Once you create and test personalizations in your test instance, you can move them to production
instances. Personalizations are e#tracted by the loader on a per-function basis 1that is, each
loader file will contain all of the personalizations for a single function5. 8ote that upon uploading,
all prior personalizations for that function are first deleted, and then the contents of the loader file
are inserted.
The loader synta# is as follows:
:ownload:
FNDLOAD <userid>/<password> 0 Y DOWNLOAD $FND_TOP/patc/!!"/i#port/a$$r#cus.%ct
<$i%e&a#e.%dt> FND_FO'(_)*+TO(_'*L,+ $u&ctio&_&a#e-<$u&ctio& &a#e>
Function.name is a re?uired parameter= if it is not supplied then no personalizations are
downloaded.
pload:
FNDLOAD <userid>/<password> 0 Y *PLOAD $FND_TOP/patc/!!"/i#port/a$$r#cus.%ct
<$i%e&a#e.%dt>
Relationship to CUSO# li$rary
Form Personalization allows personalizations that could be made in the ()TO& library, but it
does not re?uire that you use the Oracle Forms @uilder to edit and compile the ()TO& file.
:epending on the comple#ity of your personalizations, it may still re?uire a degree of coding s>ill
comparable to that needed to use the ()TO& library. $nd the ()TO& library is able to
support more comple# personalizations because it gives you access to all of the capabilities of
the P!D)<! programming language, including calling client-side program units, all Oracle Forms
builtins, and issuing any )<!.
@oth Form Personalization and the ()TO& library drive off the e#act same events. The Form
Personalization feature receives and processes them first, then passes them to the ()TO&
library, thus you can use both mechanisms simultaneously. 1&ote: )P"(9$!CC and &"8CC
events are not passed to the ()TO& library5.
@oth features also respond identically to the (ustom (ode events of ;8ormal;, ;Off; and ;(ore
(ode Only;.
9n general, Oracle recommends that you use the Form Personalization feature whenever
possible, and only use the ()TO& library when significantly more comple# processing is
re?uired.
Relationship to Folders
Folders allow an end-user to ;customize; a screen by changing the fields and records displayed.
For the most part, folder bloc>s are identifiable by an enabled GFolderH menu entry, and an GOpen
FolderH icon above the bloc>. 9n a few cases, folder technology may be used by base code to
dynamically alter a bloc>, but no folder functionality is e#posed to the end user.
Folder bloc>s are constructed differently than GregularH Forms bloc>s T they include an e#tra bloc>
that renders the prompts for the fields, and many properties of the bloc> are dynamically
managed by the folder code as it receives events. $s a result, when using the Form
Personalization feature on a folder bloc>, you must be aware of certain restrictions:
The following properties of a folder bloc> can only be set at form startup 1%/"8-8"%-
FO'&-98)T$8("5. &ore specifically, they must be set before any folder code attempts to
read the values otherwise une#pected results may occur:
P'O&PT.T"CT
:9)P!$B":
%9:T/
:"F$!T.%/"'"
O':"'.@B
C.PO)9T9O8 and B.PO)9T9O8, in a single-row folder bloc>
The following properties also have special considerations:
"8$@!":: within a folder bloc>, it is invalid to set this property to F$!)". The cursor
must be able to navigate to every item in a folder bloc>. (onsider setting $!T"'$@!" to
F$!)" instead.
8"CT. 8$F9-$T9O8.9T"& and P'"F9O).8$F9-$T9O8.9T"&: These properties
have no effect in a Folder bloc>. 9n a single-row folder bloc>, the navigation se?uence is
computed based on C.PO)9T9O8 and B.PO)9T9O8. The navigation se?uence of a
multi-row folder bloc> cannot be changed.
rou$leshooting' Support' and Upgrade %onsiderations
sing the Form Personalization feature to alter Oracle code at runtime may bypass important
validation logic and may Leopardize the integrity of your data. Bou should thoroughly test all
changes you ma>e in a Test instance before using it in a production environment.
@efore contacting Oracle )upport, you should always confirm that your personalizations are not
the source of the problem. Oracle )upport and :evelopment cannot provide assistance on how
you can ma>e personalizations to a particular form using this mechanism, nor does Oracle
warrant that any desired personalization can be made with this mechanism.
Troubleshooting
$ny personalization you ma>e may have unintentional conse?uences, to an e#treme of
preventing a form from running at all. )hould this happen, you can disable all personalizations by
invo>ing the pulldown menu and selecting /elp-E:iagnostics-E(ustom (ode-E Off. This menu
entry is secured by the F8:./9:".:9$-8O)T9() and :9$-8O)T9() profiles. This will allow
you to open the form and invo>e the Personalization screen so you can correct the problem.
pgrade (onsiderations
$ form may change after an upgrade or patch to Oracle $pplications. Bou should test any
personalization logic that you have defined to confirm that it still operates as intended before
using it in a production environment.
9t is common for obLect names within a form to change after a applying a patch. To assist you with
this, there is a function which will confirm the e#istence of obLects that your personalizations
reference. Bou should perform the following for each form that is changed during a patch and has
personalizations:
'un that form. 9f the form fails to run due to personalizations that are now in error, first
turn (ustom (ode to GOffG then re-run the form.
9nvo>e the Personalization screen from that form
9n the Tools pulldown menu, select GFalidate $llH. This will process every rule for that
function, chec>ing for the validity of references to obLects in the form. Only rules that are
"nabled are processed.
For each 'ule or $ction identified as having an error, you can then ?uic>ly locate that row
and ma>e corrections.
8ote that this function only chec>s for obLect e#istence= it still may be the case that certain
personalizations that previously wor>ed no longer do. 8ote that pressing the GFalidate $llH button
will first create any -!O@$! variables referred to in Property settings of either Falue or 9nitial
Falue= this will reduce missing bind variable references to them if the code that creates them has
not yet run.
Changes to Form Personalization in (()*)(+ CU(
The following topics are covered:
"valuation of )trings with )"!"(T statements no longer re?uire the G$H alias
8ew ObLect Type of !OF
8ew &enu "ntries
The ability to ;-et; a property in an e#pression
!ocal Fariable )upport
Form !evel )upport for 'ules
@uiltins that have (hanged
8ew @uiltins
Fire in "nter-<uery mode
Tab Pages can be modified even if they do not appear in the ObLect list
$dministration %indow
"nhanced :ebugging
$utomatic defaulting in the $ctions @loc>
Evaluation of Strings with SELEC statements no longer re,uire the -!. alias
%hen constructing a string that is a )<! statement 1starts with I)"!"(T5, you no longer need to
alias the column being selected to ;$;. Pre-e#isting aliased te#t will continue to function as before.
/owever, there is the additional limitation that the result set &)T return only a single row and
only a single column. 9f this is not the case then an error will be shown during processing.
)o the last J e#amples in the Table above can now be entered as follows:
String typed in Personalization form Result at runtime
I)"!"(T meaning from fnd.loo>ups where
loo>up.type I ;:$B.8$&"; and loo>up.code I
;)$T;
)aturday Qassuming that the
system is running in "nglishR
I)"!"(T ;The office is closed on ;OOmeaning from
fnd.loo>ups where loo>up.type I ;:$B.8$&"; and
loo>up.code I ;)$T;
The office is closed on )aturday
Qassuming that the system is
running in "nglishR
8ew ObLect Type of !OF
)imple !OF properties can now be modified using Form Personalization, including
-'OP.8$&", /"9-/T, T9T!", %9:T/, C.PO) and B.PO). $t this point in time, the property
'"(O':.-'OP.<"'B, which would allow you to dynamically change the underlying ?uery
of an !OF, cannot be changed= this is being considered for a future release.
8ew &enu "ntries
*+ new menu entries &"8* through &"8*+ are available in the Tools pulldown menu. These
are guaranteed not to be used by Oracle and are e#clusively for customer use, therefore we
strongly encourage you to use these entries as opposed to the )P"(9$! menu entries in order to
avoid collisions of code. %hen the user selects the entry, it will fire the corresponding &"8N
trigger. Bou must also create another rule that traps this Trigger "vent and performs the desired
functionality.
The $ction Type of ;)pecial; has changed to ;&enu; to better describe the functionality.
The ability to ;-et; a property in an e#pression
)trings and (onditions can now refer to properties of obLects using a )P"! synta# 1)implest
Possible "#pression !anguage5. For e#ample, this enables you to build a (ondition that tests if a
field is displayed or not. These e#pressions ta>e the following general format:
UQobLectType.obLect8ame.PropertyR
9nternally, the )P"! e#pression is a cover for Oracle Forms builtins li>e -"T.9T"&.P'OP"'TB,
-"T.@!O(A.P'OP"'TB, etc. $dditionally, the )P"! e#pressions support retrieving Profile
values, &essage :ictionary te#t, and !ocal Fariables 1described later5.

$ new window, activated by the V9nsert ;-et; "#pressionMV button, has been provided to
automatically construct the e#pression. %hen complete, the e#pression is inserted into the Falue
or (ondition field from where the window was launched. Bou can manually type the e#pression
too= however, we strongly recommend using the window to build it to reduce mista>es.
For completeness, the )P"! e#pression supports the ;Falue; property for an item= however,
runtime performance is faster with the :bloc>.field synta#.
$ll processing drives off the e#istence of the string ;UQ;, so that string is no longer valid in any
(ondition or Falue e#cept for this purpose. 9f a Falue contains a )P"! e#pression, it is processed
as if it started with ;I; 1)ee "valuation of )trings, above5.
)ome e#amples:
ype String typed in Personalization form Result at runtime
Falue I;The prompt is:; OOU
Qitem.bloc>.field.prompt.te#tROO;, located at:
;OOUQitem.bloc>.field.#.posR
The prompt is: ser 8ame,
located at: J., Qassuming that
the current Prompt of field
bloc>.field is ;ser 8ame;, and
it;s C position is J.,R
(ondition UQitem.bloc>.field.re?uiredR I ;T'"; QTrue or False, depending on
the current 'e?uired property of
field bloc>.fieldR
!ocal Fariable )upport
$ new ObLect Type of ;!ocal Fariable; is available on actions of type Property. This is very similar
to a -lobal variable, e#cept that it creates a variable local to the current form, with a ma#imum
length of 2,,, bytes 1-lobals are limited to J++ bytes5.
Form !evel )upport for 'ules
'ules may now be specified as acting either at the Function level 1the default5 or at the Form
level. 9n this latter case they are applied for all functions that run the form. %hen creating rules at
the Form level, pay close attention to the )e?uence number and how it will blend with other rules
at the function level for the same form.
@ecause of this change, the loader can now operate in 0 different modes:
To download rules for a particular function:
FNDLOAD <userid>/<password> 0 Y DOWNLOAD $FND_TOP/patc/!!"/i#port/a$$r#cus.%ct
<$i%e&a#e.%dt> FND_FO'(_)*+TO(_'*L,+ $u&ctio&_&a#e-<$u&ctio& &a#e>
Note: t3is st!le is not reco))ended4 as t3e personali5ations t3at affect a particlar
fnction can no' be a )i- of fnction- and for)-level rles.
To download rules for a particular form:
FNDLOAD <userid>/<password> 0 Y DOWNLOAD $FND_TOP/patc/!!"/i#port/a$$r#cus.%ct
<$i%e&a#e.%dt> FND_FO'(_)*+TO(_'*L,+ $or#_&a#e-<$or# &a#e>
To download all personalizations 1all forms and functions5:
FNDLOAD <userid>/<password> 0 Y DOWNLOAD $FND_TOP/patc/!!"/i#port/a$$r#cus.%ct
<$i%e&a#e.%dt> FND_FO'(_)*+TO(_'*L,+
The pload synta# for all styles is unchanged:
FNDLOAD <userid>/<password> 0 Y *PLOAD $FND_TOP/patc/!!"/i#port/a$$r#cus.%ct
<$i%e&a#e.%dt>
@uiltins that have (hanged
F8:.T9!T9").OP"8.'! is renamed to G!aunch a '!H and now allows an /T&!
target window to be set. @y default the target is ;.@!$8A;, which will open a new browser
window. Bou can select from 2 pre-defined targets, or enter your own target name.
F8:.F8(T9O8."C"(T" is renamed to ;!aunch a Function;. The function can be
selected either by its internal 1developer5 name, or ;friendly; name.
8ew @uiltins
G!aunch )') FormH allows the )ubmit (oncurrent 'e?uest form 1)')5 to be run in the
conte#t of a specific program. This ta>es a single argument of the program name. 8ote
that no additional security is applied to this program name T whatever you supply will be
available to the user, even if a standard invocation of the )') screen does not allow
access to that program.
G"#ecute ProcedureH allows a stored procedure to be e#ecuted. Type the procedure name
and arguments e#actly as you would in P!D)<! code. The entire string will be evaluated
1)ee "valuation of )trings, above5 before being sent to the server for processing.
9nternally, this uses the FO'&).::! builtin, but automatically supplies the additional
P!D)<! wrapper te#t.
)B8(/'O89S" is intended for rare circumstances when the screen is not synchronized
between the client and middle tiers, typically at form startup.
"C"(T".T'9--"' allows you to e#ecute a trigger within the form. 9t ta>es an
argument of the trigger name. This builtin will test form.success after completion, and if
that is False then it will raise form.trigger.failure

Fire in "nter-<uery mode
This is now a 0-state poplist so 'ules can be applied while not in "nter-<uery mode 1the default5,
only in "nter-<uery mode, or in @oth modes.
Tab Pages can be modified even if they do not appear in the ObLect list
,f a Tab page does not appear in t3e list of objects its na)e can be entered )anall!. T3is is
)eant to address t3e kno'n li)itation t3at so)e tab na)es cannot be ato)aticall! detected at
rnti)e. 6o 'ill need to open t3e for) in t3e Oracle For)s +ilder to deter)ine t3ese tab
na)es4 and t3en !o can t!pe it into t3is Co)bobo-.
$dministration %indow
:ue to the ability to define rules at the Form level it is no longer meaningful to ?uery
personalizations at the Function level, so that field has been removed from the Find
Personalizations window.
"nhanced :ebugging
:ebug &ode now supports J levels. ;)how :ebug &essages; will show messages of type :ebug.
;)tep-@y-)tep; is a new mode that will show messages when each condition is evaluated and
each action is e#ecuted, to help you determine if your rules and actions are being applied as
e#pected. ;Off; disables these modes.
$utomatic defaulting in the $ctions @loc>
The $ctions bloc> used to automatically default most values from the prior row when you created
a new row. 8ow a smaller number of properties is defaulted, in order to reduce confusion. To
copy all the values from the prior row, use the menu entry "dit E :uplicate E 'ecord $bove.
Changes to Form Personalization in ((i)!/0PF)1 Rollup 2 3Pat%h 422456*7
The following topics are covered:
8ew Property Type for @loc>s
8ew @uiltins
"nhanced $bility to Find ObLects
8ew Property Type for @loc>s
For those bloc>s where a W@lind <ueryX has been prevented by development for performance
reasons, new property $!!O%.8O8.)"!"(T9F".)"$'(/ allows you to re-enable W@lind
<ueryX on a bloc>-by-bloc> basis.
8ew @uiltins
G(all (ustom "ventH allows the ()TO& library to be called. :espite the declarative
interface of Forms Personalization it is still sometimes necessary to write P!D)<! code
within the ()TO& library. To facilitate this we have introduced a new builtin type of G(all
(ustom "ventH which ta>es a single argument of the event name. %ithin the ()TO&
library, code can then be written to respond to this event.
G(reate 'ecord -roup from <ueryH allows you to create a record group dynamically. This
ta>es two arguments, the )<! statement to create the group and the record group name
which must not already e#ist within the form. This builtin can be used to declaratively
create a record group that can then be used to populate an !OF. 8ote that using this
builtin re?uires >nowledge of the structure of the e#isting record group in order to achieve
success. The structure of the current record group assigned to the !OF can only be
determined by opening the form in Forms @uilder, determining the correct record group,
and then loo>ing at the )<! statement. $lso note that all this routine does is create a
record group T it does not populate the group.
"nhanced ability to find obLects
$s the visible te#t for obLects may be identical across multiple windows of the same form,
it is sometimes difficult to determine e#actly which obLect you wish to personalize. The
W)elect @y Te#tX list now includes the window title in parentheses following the normal
obLect te#t.
Changes to Form Personalization in ((i)!/0PF)1 Rollup 4 3Pat%h 4686*957
8ew Property Type for @loc>s
%hen e#porting data from a forms bloc>, only the data that is currently displayed for the bloc> is
e#ported. 9f you wish to allow e#porting the bloc> data that is on other hidden canvases, as is
often with tab pages, you may now create a form personalization rule to allow e#porting the
hidden canvases.
To create a personalization to allow e#porting hidden canvases, create a new personalization as
follows:
(ondition
Trigger "vent: %/"8-8"%-FO'&-98)T$8(" level.
Processing &ode: 8ot in "nter-<uery-&ode.
)et the appropriate (onte#t !evel.
$ctions
Type: Property
ObLect Type: @loc>
Target ObLect: Ythe bloc> for the e#port personalizationE
Property 8ame: "CPO'T./9::"8.($8F$)")
Falue: T'"

You might also like