You are on page 1of 23

Form Personalization

Advanced Concepts

1-1 Copyright © 2004, Oracle. All rights reserved.


Objectives

After completing this module, you should be able to do


the following:
 Work with GLOBAL variables
 Understand Oracle Forms Query-by-Example
(QBE) mode
 Create Special menu entries
 ‘Zoom’ to other functions

1-2 Copyright © 2004, Oracle. All rights reserved.


Related Course Material

 The viewlet Oracle Applications Form


Personalization Demonstration – Advanced
Concepts shows many of the concepts included in
this module.

1-3 Copyright © 2004, Oracle. All rights reserved.


Agenda

Global Variables
Query-by-Example (QBE) mode
Special menu entries
‘Zooming’

1-4 Copyright © 2004, Oracle. All rights reserved.


WARNING!
Form Personalizations allows you to fundamentally alter
the behavior of the product that Oracle ships, and
access any and all data. Therefore,
This feature should only be made available to trusted
users.
Avoid building Personalizations on a production system.
– Form Personalizations should first be entered and
thoroughly QA’ed on a test system before they are
loaded to a production system

1-5 Copyright © 2004, Oracle. All rights reserved.


Global Variables
GLOBAL variables are dynamically created at runtime
They can hold up to 255 bytes
They are visible across all forms that are currently
running
They are very useful for Form Personalizations!
– Allow you to establish a value once then re-use it
– Allow you to pass information between forms

1-6 Copyright © 2004, Oracle. All rights reserved.


Global Variables, continued
2 Properties affect them:
VALUE:
– Creates it if it does not exist
– Always sets the value

INITIAL VALUE:
– Creates it if it does not exist, setting it to null
– Only sets the value if it is currently null

1-7 Copyright © 2004, Oracle. All rights reserved.


Global Variables, continued
Name any you create starting with ‘XX’
– Prevent collisions with global variables that base
product code creates
In Conditions and evaluated strings, refer to them
with :global.<name>
– Example: ='Your password must have at least
'||:global.xx_password_length||' characters.'
– References will produce an error if the variable does
not exist yet
Make sure they exist by first setting the INITIAL
VALUE property in a prior action or rule
Remember, they are shared across all forms

1-8 Copyright © 2004, Oracle. All rights reserved.


Global Variables, continued

Creates the global variable


:global.xx_password_failures if it did not already exist
Sets its value to :global.xx_password_failures
Because the example is self_referencing, a prior
Action needs to have created it!

1-9 Copyright © 2004, Oracle. All rights reserved.


QBE Mode
QBE is a power-user mechanism to locate records,
instead of Find Windows
Normally invoked by selecting View > Query By
Example > Enter from the pulldown menu
The builtin DO_KEY with argument
ENTER_QUERY will invoke this mode, for the
current block
It is a ‘mode’
– Things operate differently, or are suspended, until you
exit this mode by Running a query or selecting Cancel
– Specifically, any actions after invoking the mode will
not be executed until the mode is exited

1-10 Copyright © 2004, Oracle. All rights reserved.


QBE Mode, continued
Trigger Events can fire in QBE mode, or not
– Set ‘Fire in Enter-Query Mode’ as desired
– This will cause the Rule to execute in both QBE
and ‘normal’ mode
– It is very, very, very rare that you would want your
rules to fire in this mode!
– Later we’ll discuss one example where this could
be used.

1-11 Copyright © 2004, Oracle. All rights reserved.


Special Menus
Embedded in every menu are 45 entries you
can activate

Each has the name SPECIAL#


– SPECIAL1 though 15: under ‘Tools’
– SPECIAL16 though 30: under ‘Reports’
– SPECIAL31 though 45: under ‘Actions’
Must be activated in a Rule based on the WHEN-NEW-FORM-INSTANCE event

1-12 Copyright © 2004, Oracle. All rights reserved.


Special menus, continued

 Menu Entry: which entry you want to activate


 Menu Label: the text for the menu entry
 Render Line before menu: will draw a separator line above the menu entry
 Enabled In Block(s): the blocks for which the menu entry should be enabled.
– Leave blank to enable for all blocks.
 Icon Name: the name of an optional .ico file, which will render in the toolbar

1-13 Copyright © 2004, Oracle. All rights reserved.


Special menus, continued

This action:

Activates the Tools


menu and creates
the menu entry, for
all blocks of the
form:

1-14 Copyright © 2004, Oracle. All rights reserved.


Special menus, continued
But ‘Special’ simply activates the menu entry
– At runtime, if the user selects it, it emits an event
name that matches the menu entry name
For example, if you activate SPECIAL1, when the
user selects it the event ‘SPECIAL1’ will be sent
– You create a second rule that triggers off that event
and does what you want
WARNING
– Base product code uses these menu entries too.
Select an entry they do not use
The Menu Entry list shows the current label if
there is one; no label is an indication it is currently
unused

1-15 Copyright © 2004, Oracle. All rights reserved.


Zooming
One of the most commonly requested
enhancements:
– The ability to open a function, passing
context from the current function
For example, from the Purchase Orders
form, open the Vendors form, and pass
the vendor on the current PO to query its
details
Special+Globals+QBE let’s you define these
yourself!

1-16 Copyright © 2004, Oracle. All rights reserved.


Zooming: One Strategy
 Activate a Special menu
 In response to that menu (when selected by the user),
– Copy context, like primary key fields, into globals
 Use Conditions to test those values
 If they are not set yet, show an error message
 If they are set, Open the desired function
 In the target form,
– Create a rule that sets the initial value of those globals to null, to insure they
exist
– Then test them: if they are not null,
{this is where other strategies, discussed later, could be used}
 Invoke QBE mode on the appropriate block
 Copy the values into base table fields
 Execute the query
 Clear the globals

1-17 Copyright © 2004, Oracle. All rights reserved.


Zooming: One Strategy, continued
To open the desired function
 Create an Action of type Builtin, with the Type
FND_FUNCTION.EXECUTE
 This example would open the Responsibilities form (after first checking
security):

1-18 Copyright © 2004, Oracle. All rights reserved.


Zooming: One Strategy, continued
Rules in the target form
 Rule 1:
– Trigger Event: WHEN-NEW-FORM-INSTANCE
– Action: For one of the global variables being passed, set its INITIAL
VALUE property to null (empty)
 This makes sure the next rule will not fail when the form is
opened standalone
 Rule 2:
– Trigger Event: WHEN-NEW-FORM-INSTANCE
– Condition: test if that global variable is not null
– Action 1: Builtin GO_BLOCK to the block you want to query
– Action 2: Builtin DO_KEY with ENTER_QUERY to invoke QBE
– Don’t put more actions here - they will not fire!

1-19 Copyright © 2004, Oracle. All rights reserved.


Zooming: One Strategy, continued
Rules in the target form, continued
 Rule 3:
– Trigger Event: WHEN-NEW-RECORD-INSTANCE, for the block you are
querying
– Condition: test if that global variable is not null
– ‘Fire in Enter-Query’ mode checked
– Action 1+: set the VALUE of the appropriate fields to have the values of
the globals you passed
 The Value is of the format “=:global.<name>”
 Create an Action for each variable you need to process
– Action 2+: Set the VALUE of the globals to null (empty)
 This prevents future queries from re-running just this one
 Create an Action for each variable you need to process
– Action 3: Builtin DO_KEY with EXECUTE_QUERY to run the query

1-20 Copyright © 2004, Oracle. All rights reserved.


Zooming: Other Strategies
Each form in Oracle Applications has its unique quirks. You may
discover other ways to force it to query:
 The target function may already accept the value(s) as an
input parameter
– Use the ‘Add Parameters’ button to see parameters associated with
other functions on the same form
– Note that this will not reveal every parameter that a function takes, nor
its intended usage
– Examining source code is the only way to know exactly how
parameters work
– Oracle does not warrant that a parameter will exist or function the
same after a patch
 In forms that have Find Windows, it may be possible to
populate the appropriate field(s) in the Find window, then issue
builtin DO_KEY with argument NEXT_BLOCK

1-21 Copyright © 2004, Oracle. All rights reserved.


Zooming: Other Strategies, continued
 You could modify the DEFAULT_WHERE clause of the
appropriate block, then query it using DO_KEY with
argument EXECUTE_QUERY, then reset the
DEFAULT_WHERE clause back to its original value

 A little bit of experimentation and creativity is all it takes!


 Zooms need to be extensively tested after a patch
because of their inherent complexity

1-22 Copyright © 2004, Oracle. All rights reserved.


Summary
In this module, you should have learned how to:
Work with GLOBAL variables, including the differecnes
between the properties VALUE and INITIAL VALUE
Understand Oracle Forms Query-by-Example (QBE) mode
Create Special menu entries, and write Rules that respond
to their selection
‘Zoom’ to other functions, and various strategies to try

1-23 Copyright © 2004, Oracle. All rights reserved.

You might also like