# Oracle EBS Forms Personalization Tables and Trigger Events Reference

> Source: https://netray.co/tools/oracle-ebs-forms-personalization-tables-reference
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: Free Tools

## Short answer

The tables behind Forms Personalization, the trigger events and action types you can use, every common builtin, and the FNDLOAD commands to move rules between instances.

## Category

developer

## Erp

Oracle E-Business Suite

## Audience

- Oracle EBS developer
- Oracle Apps DBA
- Functional consultant
- Release manager

## Tool

**Kind:** worksheet

**Mode:** reference

**Columns:**

#### Item

**Key:** item

**Type:** text

#### Group

**Key:** group

**Type:** text

#### Meaning

**Key:** meaning

**Type:** text

#### Key columns or example

**Key:** example

**Type:** text

#### Notes

**Key:** notes

**Type:** text

**Rows:**

**Item:** FND_FORM_CUSTOM_RULES

**Group:** Table

**Meaning:** One row per personalization rule (header)

**Example:** ID, FUNCTION_NAME, FORM_NAME, SEQUENCE, DESCRIPTION, TRIGGER_EVENT, TRIGGER_OBJECT, CONDITION, ENABLED, FIRE_IN_ENTER_QUERY

**Notes:** 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.

**Item:** FND_FORM_CUSTOM_SCOPES

**Group:** Table

**Meaning:** Context (where the rule applies)

**Example:** RULE_ID, LEVEL_ID, LEVEL_VALUE, LEVEL_VALUE_APPLICATION_ID

**Notes:** One row per context line: Site, Responsibility, User or Industry. RULE_ID = FND_FORM_CUSTOM_RULES.ID.

**Item:** FND_FORM_CUSTOM_ACTIONS

**Group:** Table

**Meaning:** Actions of a rule

**Example:** 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

**Notes:** RULE_ID = FND_FORM_CUSTOM_RULES.ID. Actions fire in SEQUENCE order.

**Item:** FND_FORM_CUSTOM_PARAMS

**Group:** Table

**Meaning:** Parameters passed by Launch a Function and similar builtins

**Example:** ACTION_ID, NAME, VALUE, SEQUENCE

**Notes:** ACTION_ID = FND_FORM_CUSTOM_ACTIONS.ACTION_ID.

**Item:** WHEN-NEW-FORM-INSTANCE

**Group:** Trigger event

**Meaning:** Fires once when the form opens

**Example:** Set default values, hide fields, set block WHERE clauses

**Notes:** Most common event for property changes that should apply all the time.

**Item:** WHEN-NEW-BLOCK-INSTANCE

**Group:** Trigger event

**Meaning:** Fires when the cursor enters a block

**Example:** Trigger Object = block name, e.g. ORDER

**Notes:** Use for block level properties such as INSERT_ALLOWED.

**Item:** WHEN-NEW-RECORD-INSTANCE

**Group:** Trigger event

**Meaning:** Fires when the cursor moves to a record

**Example:** Trigger Object = block name

**Notes:** Use when a property depends on the values of the current record.

**Item:** WHEN-NEW-ITEM-INSTANCE

**Group:** Trigger event

**Meaning:** Fires when the cursor enters an item

**Example:** Trigger Object = BLOCK.ITEM

**Notes:** Good for hints and context messages on one field.

**Item:** WHEN-VALIDATE-RECORD

**Group:** Trigger event

**Meaning:** Fires when the record is validated (leaving it or saving)

**Example:** Trigger Object = block name

**Notes:** The usual place for a validation that raises an error and stops the save.

**Item:** SPECIAL1 to SPECIAL45

**Group:** Trigger event

**Meaning:** Custom menu entries activated with a Menu action

**Example:** Menu action activates SPECIAL7 with label 'Open Supplier'; a second rule on event SPECIAL7 runs the builtin

**Notes:** Some forms already use certain SPECIAL entries. Pick one that is free in that form.

**Item:** Property

**Group:** Action type

**Meaning:** Change a property of an item, block, window, canvas, tab page or the form

**Example:** Target BLOCK.ITEM, property REQUIRED = TRUE; property VALUE = default

**Notes:** Property values can be literals or SQL expressions starting with '='.

**Item:** Message

**Group:** Action type

**Meaning:** Show a message

**Example:** Message Type: Show, Hint, Error, Debug, Warn

**Notes:** Error and Warn behave like FND_MESSAGE.ERROR and WARN. Error stops processing in validation events.

**Item:** Builtin

**Group:** Action type

**Meaning:** Call a builtin or launch something

**Example:** Builtin Type chosen from a list (rows below)

**Notes:** Arguments depend on the builtin type.

**Item:** Menu

**Group:** Action type

**Meaning:** Activate a SPECIAL menu entry and set its label and icon

**Example:** Menu Entry SPECIAL7, Menu Label 'Supplier Details'

**Notes:** Usually on WHEN-NEW-FORM-INSTANCE, then a separate rule handles the event.

**Item:** Launch SRS Form

**Group:** Builtin

**Meaning:** Opens Submit Request for a given concurrent program

**Example:** Program name argument

**Notes:** Saves users searching for a report.

**Item:** Launch a Function

**Group:** Builtin

**Meaning:** Opens another form function with parameters

**Example:** Function code plus parameters (FND_FORM_CUSTOM_PARAMS)

**Notes:** Combine with a SPECIAL menu entry for zoom-like navigation.

**Item:** Launch a URL

**Group:** Builtin

**Meaning:** Opens a URL in a browser window

**Example:** Argument such as ='http://intranet/item?id='||:ITEM.INVENTORY_ITEM_ID

**Notes:** Target can be a new or the same window.

**Item:** DO_KEY

**Group:** Builtin

**Meaning:** Runs a key trigger as if the user pressed it

**Example:** Argument COMMIT_FORM, NEXT_BLOCK, EXECUTE_QUERY

**Notes:** Key names follow Oracle Forms built-in names.

**Item:** EXECUTE_TRIGGER

**Group:** Builtin

**Meaning:** Runs a named trigger in the form

**Example:** Argument trigger name

**Notes:** Only triggers the form actually defines.

**Item:** GO_BLOCK / GO_ITEM

**Group:** Builtin

**Meaning:** Navigate to a block or item

**Example:** Argument block name or BLOCK.ITEM

**Notes:** Navigation builtins are restricted in some trigger events by Forms rules.

**Item:** FORMS_DDL

**Group:** Builtin

**Meaning:** Runs an anonymous PL/SQL block or DDL from the form

**Example:** Argument such as ='begin xx_pkg.log(' || :HEADER.ID || '); end;'

**Notes:** Runs in the form session. Keep logic in a database package and call it.

**Item:** RAISE FORM_TRIGGER_FAILURE

**Group:** Builtin

**Meaning:** Stops the current trigger and the event that fired it

**Example:** Usually after an Error message in WHEN-VALIDATE-RECORD

**Notes:** This is how a personalization blocks a save.

**Item:** Execute a Procedure

**Group:** Builtin

**Meaning:** Calls a database procedure

**Example:** Argument such as ='xx_pkg.do_something('||:BLOCK.FIELD||')'

**Notes:** The procedure runs as APPS. Do not use it for commits outside the form transaction without care.

**Item:** SYNCHRONIZE

**Group:** Builtin

**Meaning:** Refreshes the screen with the current internal state

**Example:** No argument

**Notes:** Useful after a FORMS_DDL that changed values shown on screen.

**Item:** Call Custom Library

**Group:** Builtin

**Meaning:** Calls the CUSTOM library (CUSTOM.pll) event handler

**Example:** Argument event name

**Notes:** Lets a personalization hand off to CUSTOM.pll code for logic too complex for rules.

**Item:** Create Record Group from Query

**Group:** Builtin

**Meaning:** Builds a record group, typically to replace an LOV

**Example:** Argument SELECT statement and group name

**Notes:** Pair with a Property action setting the LOV RECORD_GROUP.

**Item:** affrmcus.lct download

**Group:** Migration

**Meaning:** FNDLOAD download of personalizations

**Example:** FNDLOAD apps/<pwd> 0 Y DOWNLOAD $FND_TOP/patch/115/import/affrmcus.lct XX_POXPOEPO.ldt FND_FORM_CUSTOM_RULES FUNCTION_NAME="PO_POXPOEPO"

**Notes:** Use FORM_NAME="POXPOEPO" to download rules saved at form level.

**Item:** affrmcus.lct upload

**Group:** Migration

**Meaning:** FNDLOAD upload into the target instance

**Example:** FNDLOAD apps/<pwd> 0 Y UPLOAD $FND_TOP/patch/115/import/affrmcus.lct XX_POXPOEPO.ldt

**Notes:** Upload replaces all rules for that function or form in the target. Download target first as a backup.

**Notes:** 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;

## Content

**Intro:** 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.

**Sections:**

#### Where the screen is and who can open it

**Body:** 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.

**Bullets:**

- 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

**Body:** 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'.

**Bullets:**

- :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

**Body:** 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

**Body:** 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.

**Cta:** 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.

**Faq:**

#### Which tables store form personalizations in Oracle Apps R12?

**Answer:** 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?

**Answer:** 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?

**Answer:** 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?

**Answer:** 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.

## Search terms

oracle form personalization tables, form personalization table in oracle apps r12, form personalization query in oracle apps r12, oracle forms personalization condition example, oracle form personalization examples, fnd_form_custom_rules, affrmcus.lct

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
