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
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
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
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
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
: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!
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
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.
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
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
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!
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
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):
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!
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
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
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
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
Oracle Apps Forms Personalization - (Demonstrated Example - (Shipping and Transaction Form) - Using Zooming, Global Variables, Local Variables, Passing Parameters Etc.,)