Customizing Oracle Applications with the CUSTOM Library
The CUSTOM library allows extension of Oracle Applications without modification of Oracle Applications code.
You can use the CUSTOM library for customizations such as
Ø Zoom (such as moving to another form and querying up specific records),
Ø Enforcing business rules (vendor name must be in uppercase letters),
Ø Disabling fields that do not apply for your site.
When to Use the CUSTOM Library
There are several main cases for which you can code logic using the CUSTOM library. Each of these cases must be coded differently.
Zoom—The addition of user–invoked logic on a per–block basis.
A Zoom typically consists of opening another form and (optionally) passing parameter values to the opened form through the Zoom logic.
Logic for generic events—Augment Oracle Applications logic for certain generic form events such as WHEN–NEW–FORM–INSTANCE or WHEN–VALIDATE–RECORD. You can use generic events to change field prompts and other properties, hide fields, add validation, and more.
Logic for product–specific events—Augment or replace Oracle Applications logic for certain product–specific events that enforce business rules.
Custom entries for the special menus—Add entries to the special menus for Oracle Applications forms, such as an entry that opens a custom form.
Setting visual attributes —Use the CUSTOM library to change the visual attributes of Oracle Applications fields at runtime. Use the Oracle Forms built–in SET_VA_PROPERTY to set the properties of the CUSTOM1–CUSTOM5 visual attributes, and then use APP_ITEM_PROPERTY2.SET_PROPERTY to apply the visual attribute to an item at runtime.
The CUSTOM package contains the following functions and procedure:
If Zoom is available for this block, then return TRUE; otherwise return 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’);
IF (form_name = ’FNDSCAUS’ AND block_name = ’USER’) OR
(form_name = ’FNDCPMCP’ AND block_name = ’PROCESS’)THEN
This function allows you to determine the execution style for a product–specific event if custom execution styles are supported for that product–specific event (many product–specific events do not support custom execution styles). You can choose to have your code execute before, after, or in place of the code provided in Oracle Applications. Note that some product–specific events may not support all execution styles. CUSTOM.STYLE does not affect generic form events or Zoom. Any event that returns a style other than custom.standard must have corresponding code in custom.event which will be executed at the time specified.
The following package variables should be used as return values:
By default this routine must return custom.standard (which means that there is no custom execution style code).
Oracle Corporation reserves the right to pass additional values for event_name to this routine, so all code must be written to branch on the specific event_name passed.
The following example sets up the MY_PRICING_EVENT event to
have the Override execution style.
if event_name = ’MY_PRICING_EVENT’ then
This procedure allows you to execute your code at specific events. Always test for event name, then for form and block name within that event. 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 perform ”null;”.
Oracle Corporation reserves the right to pass additional values for event_name to this routine, so all code must be written to branch on the specific event_name passed.The following example contains logic for a Zoom, a product–specific event, and a generic form event. The Zoom event opens a new session of a form and passes parameter values to the new session. The parameters already exist in the form being opened, and the form function has already been defined and added to the menu (without a prompt, so it does not appear in the Navigator).
procedure event(event_name varchar2) is
form_name varchar2(30) := name_in(’system.current_form’);
block_name varchar2(30) := name_in(’system.cursor_block’);
if (event_name = ’ZOOM’) then
if (form_name = ’DEMXXEOR’ and block_name = ’ORDERS’) then
/* The Zoom event opens a new session of a form and
passes parameter values to the new session. The
parameters already exist in the form being opened:*/
param_to_pass1 := name_in(’ORDERS.order_id’);
param_to_pass2 := name_in(’ORDERS.customer_name’);
/* all the extra single and double quotes account for
any spaces that might be in the passed values */
elsif (event_name = ’MY_PRICING_EVENT’) then
/*For the product–specific event MY_PRICING_EVENT, call a
custom pricing routine */
elsif (event_name = ’WHEN–VALIDATE–RECORD’) then
if (form_name = ’APXVENDR’ and block_name = ’VENDOR’) then
/* In the WHEN–VALIDATE–RECORD event, force the value of
a Vendor Name field to be in uppercase letters */