Developer ToolsFree referencePDF, Excel, Word exportOracle E-Business SuiteAll Oracle E-Business Suite tools

Oracle EBS Forms Personalization Tables and Trigger Events Reference

This reference lists the tables that store Oracle Forms Personalization rules in EBS 12.1 and 12.2, the trigger events and action types you can choose, and the builtins most teams use. The notes include a query that lists every rule on a form and the FNDLOAD commands for migration.

Download:
ItemGroupMeaningKey columns or exampleNotes
FND_FORM_CUSTOM_RULES
Table
One row per personalization rule (header)
ID, FUNCTION_NAME, FORM_NAME, SEQUENCE, DESCRIPTION, TRIGGER_EVENT, TRIGGER_OBJECT, CONDITION, ENABLED, FIRE_IN_ENTER_QUERY
Filter by FORM_NAME and FUNCTION_NAME together: function-level rules carry the function code, form-level rules apply under every function of the form.
FND_FORM_CUSTOM_SCOPES
Table
Context (where the rule applies)
RULE_ID, LEVEL_ID, LEVEL_VALUE, LEVEL_VALUE_APPLICATION_ID
One row per context line: Site, Responsibility, User or Industry. RULE_ID = FND_FORM_CUSTOM_RULES.ID.
FND_FORM_CUSTOM_ACTIONS
Table
Actions of a rule
ACTION_ID, RULE_ID, SEQUENCE, ACTION_TYPE, TARGET_OBJECT, PROPERTY_NAME, PROPERTY_VALUE, MESSAGE_TYPE, MESSAGE_TEXT, BUILTIN_TYPE, BUILTIN_ARGUMENTS, MENU_ENTRY, MENU_LABEL, ENABLED
RULE_ID = FND_FORM_CUSTOM_RULES.ID. Actions fire in SEQUENCE order.
FND_FORM_CUSTOM_PARAMS
Table
Parameters passed by Launch a Function and similar builtins
ACTION_ID, NAME, VALUE, SEQUENCE
ACTION_ID = FND_FORM_CUSTOM_ACTIONS.ACTION_ID.
WHEN-NEW-FORM-INSTANCE
Trigger event
Fires once when the form opens
Set default values, hide fields, set block WHERE clauses
Most common event for property changes that should apply all the time.
WHEN-NEW-BLOCK-INSTANCE
Trigger event
Fires when the cursor enters a block
Trigger Object = block name, e.g. ORDER
Use for block level properties such as INSERT_ALLOWED.
WHEN-NEW-RECORD-INSTANCE
Trigger event
Fires when the cursor moves to a record
Trigger Object = block name
Use when a property depends on the values of the current record.
WHEN-NEW-ITEM-INSTANCE
Trigger event
Fires when the cursor enters an item
Trigger Object = BLOCK.ITEM
Good for hints and context messages on one field.
WHEN-VALIDATE-RECORD
Trigger event
Fires when the record is validated (leaving it or saving)
Trigger Object = block name
The usual place for a validation that raises an error and stops the save.
SPECIAL1 to SPECIAL45
Trigger event
Custom menu entries activated with a Menu action
Menu action activates SPECIAL7 with label 'Open Supplier'; a second rule on event SPECIAL7 runs the builtin
Some forms already use certain SPECIAL entries. Pick one that is free in that form.
Property
Action type
Change a property of an item, block, window, canvas, tab page or the form
Target BLOCK.ITEM, property REQUIRED = TRUE; property VALUE = default
Property values can be literals or SQL expressions starting with '='.
Message
Action type
Show a message
Message Type: Show, Hint, Error, Debug, Warn
Error and Warn behave like FND_MESSAGE.ERROR and WARN. Error stops processing in validation events.
Builtin
Action type
Call a builtin or launch something
Builtin Type chosen from a list (rows below)
Arguments depend on the builtin type.
Menu
Action type
Activate a SPECIAL menu entry and set its label and icon
Menu Entry SPECIAL7, Menu Label 'Supplier Details'
Usually on WHEN-NEW-FORM-INSTANCE, then a separate rule handles the event.
Launch SRS Form
Builtin
Opens Submit Request for a given concurrent program
Program name argument
Saves users searching for a report.
Launch a Function
Builtin
Opens another form function with parameters
Function code plus parameters (FND_FORM_CUSTOM_PARAMS)
Combine with a SPECIAL menu entry for zoom-like navigation.
Launch a URL
Builtin
Opens a URL in a browser window
Argument such as ='http://intranet/item?id='||:ITEM.INVENTORY_ITEM_ID
Target can be a new or the same window.
DO_KEY
Builtin
Runs a key trigger as if the user pressed it
Argument COMMIT_FORM, NEXT_BLOCK, EXECUTE_QUERY
Key names follow Oracle Forms built-in names.
EXECUTE_TRIGGER
Builtin
Runs a named trigger in the form
Argument trigger name
Only triggers the form actually defines.
GO_BLOCK / GO_ITEM
Builtin
Navigate to a block or item
Argument block name or BLOCK.ITEM
Navigation builtins are restricted in some trigger events by Forms rules.
FORMS_DDL
Builtin
Runs an anonymous PL/SQL block or DDL from the form
Argument such as ='begin xx_pkg.log(' || :HEADER.ID || '); end;'
Runs in the form session. Keep logic in a database package and call it.
RAISE FORM_TRIGGER_FAILURE
Builtin
Stops the current trigger and the event that fired it
Usually after an Error message in WHEN-VALIDATE-RECORD
This is how a personalization blocks a save.
Execute a Procedure
Builtin
Calls a database procedure
Argument such as ='xx_pkg.do_something('||:BLOCK.FIELD||')'
The procedure runs as APPS. Do not use it for commits outside the form transaction without care.
SYNCHRONIZE
Builtin
Refreshes the screen with the current internal state
No argument
Useful after a FORMS_DDL that changed values shown on screen.
Call Custom Library
Builtin
Calls the CUSTOM library (CUSTOM.pll) event handler
Argument event name
Lets a personalization hand off to CUSTOM.pll code for logic too complex for rules.
Create Record Group from Query
Builtin
Builds a record group, typically to replace an LOV
Argument SELECT statement and group name
Pair with a Property action setting the LOV RECORD_GROUP.
affrmcus.lct download
Migration
FNDLOAD download of personalizations
FNDLOAD apps/<pwd> 0 Y DOWNLOAD $FND_TOP/patch/115/import/affrmcus.lct XX_POXPOEPO.ldt FND_FORM_CUSTOM_RULES FUNCTION_NAME="PO_POXPOEPO"
Use FORM_NAME="POXPOEPO" to download rules saved at form level.
affrmcus.lct upload
Migration
FNDLOAD upload into the target instance
FNDLOAD apps/<pwd> 0 Y UPLOAD $FND_TOP/patch/115/import/affrmcus.lct XX_POXPOEPO.ldt
Upload replaces all rules for that function or form in the target. Download target first as a backup.

Covers EBS 12.1 and 12.2 Forms (not OA Framework personalization, which is stored in the MDS repository). List personalizations by form: SELECT r.form_name, r.function_name, r.sequence, r.description, r.trigger_event, r.trigger_object, r.condition, r.enabled, a.sequence action_seq, a.action_type, a.target_object, a.property_value, a.message_text, a.builtin_type FROM fnd_form_custom_rules r, fnd_form_custom_actions a WHERE a.rule_id(+) = r.id AND r.form_name = 'POXPOEPO' ORDER BY r.sequence, a.sequence;

Personalization inventory review

Send us the output of the personalization query for your key forms and we will flag rules that are likely to break on the next patch or upgrade.

Optional. The tool and every export work without this. No spam.

Was this tool useful?

Where the screen is and who can open it

Open the form, then Help > Diagnostics > Custom Code > Personalize. The menu entry depends on two profile options: Hide Diagnostics menu entry must be No and Utilities:Diagnostics must be Yes for the user, or the user is asked for the APPS password. In production, set these only for named support users. The Personalization screen has a header (Seq, Description, Level of Function or Form, Enabled), a Condition tab (Trigger Event, Trigger Object, Condition, Processing Mode), the Context lines (Site, Responsibility, User, Industry), and the Actions tab. Every save writes to FND_FORM_CUSTOM_RULES, FND_FORM_CUSTOM_SCOPES and FND_FORM_CUSTOM_ACTIONS immediately, and the rule takes effect the next time the form opens.

  • Function level: rule applies only when the form opens through that function
  • Form level: rule applies to the form under every function
  • Processing Mode: Not in Enter-Query Mode, Only in Enter-Query Mode, or Both

Condition syntax

The Condition is a SQL expression evaluated as if in SELECT ... FROM dual WHERE <condition>. Reference form values with bind syntax :BLOCK.FIELD, global variables with :GLOBAL.NAME, and you can call database functions and FND_PROFILE.VALUE. Use the Validate button to test it against the current record. Keep conditions short and push complex logic into a database function that returns 'Y' or 'N'.

  • :ORDER.ORDER_TYPE_ID = 1430
  • :LINE.ORDERED_QUANTITY > 1000
  • FND_PROFILE.VALUE('USER_ID') <> 0
  • xx_pers_util.is_restricted(:HEADER.VENDOR_ID) = 'Y'

Worked example: make a field required

Requirement: on the Sales Orders form, the Customer PO field must be entered for one responsibility. Find the item name with Help > Diagnostics > Examine (for example ORDER.CUST_PO_NUMBER). Create rule Seq 10, Description 'Customer PO required', Level Function. Condition tab: Trigger Event WHEN-NEW-FORM-INSTANCE, no condition. Context: Responsibility = your responsibility. Actions: Seq 10, Type Property, Object Type Item, Target Object that item, Property Name REQUIRED, Value TRUE. Save, close and reopen the form. For a rule that depends on data, use WHEN-VALIDATE-RECORD with a condition, an Error message action, then a Builtin action RAISE FORM_TRIGGER_FAILURE. Test in Enter-Query mode too, because REQUIRED can block querying if the Processing Mode is wrong.

Migration and gotchas

Move rules with FNDLOAD and affrmcus.lct, keyed by FUNCTION_NAME for function-level rules or FORM_NAME for form-level rules. An upload replaces the target set for that function or form, so a rule created directly in the target is lost. Rules reference items by name, so a patch that renames an item silently breaks a property action: re-validate personalizations after patching, and keep them disabled rather than deleted when troubleshooting. To rule personalizations out quickly, Help > Diagnostics > Custom Code > Off disables custom code for the session.

Frequently Asked Questions

Which tables store form personalizations in Oracle Apps R12?

FND_FORM_CUSTOM_RULES holds the rule header (form or function, sequence, trigger event, condition), FND_FORM_CUSTOM_SCOPES holds the context levels, FND_FORM_CUSTOM_ACTIONS holds the actions, and FND_FORM_CUSTOM_PARAMS holds parameters for builtins such as Launch a Function. Join actions to rules with ACTION.RULE_ID = RULE.ID.

How do I query all personalizations on a form?

Select from FND_FORM_CUSTOM_RULES filtered by FORM_NAME (for example 'OEXOEORD' or 'POXPOEPO') and outer join FND_FORM_CUSTOM_ACTIONS on RULE_ID = ID, ordered by rule SEQUENCE then action SEQUENCE. Also check FUNCTION_NAME, because function-level rules for that form are stored with the function code.

How do I write a condition that checks a field value?

Use bind syntax with block and item names, for example :LINE.ORDERED_QUANTITY > 1000 or :HEADER.ORG_ID = 204. Find the names with Help > Diagnostics > Examine. The condition is evaluated as SQL, so you can call database functions and use NVL, but form-only builtins are not available.

How do I move form personalizations from test to production?

Download with FNDLOAD using affrmcus.lct and the FND_FORM_CUSTOM_RULES entity, filtered by FUNCTION_NAME or FORM_NAME, then upload the .ldt file in the target. The upload replaces all rules for that function or form, so download the target first as a backup.

If you want support teams to ask which forms carry personalizations, and why, in plain English against your own EBS instance, we can set that up on your servers.

ArchRay builder
Design the on-prem AI stack for Oracle E-Business Suite: model, GPUs, RAG pipeline, guardrails
See memory, speed and cost as you swap parts, then export the diagram. Free, in your browser.
Open the builder

Keep exploring

Free tools

ERP fixes and how-tos

Runs with your ERP

AI on your ERP

Integrations

Software