Sei sulla pagina 1di 191

Free site is hosted by Share This Site Not the site you

Build your own website on Tripod It's fast, easy and economical. More are looking for?

Ads by Google
Premier Oracle VAR Oracle 10g Tuning
Minimize Total Cost of Ownership With Help from Our License Improve Oracle 10g Performance 65%. New Ignite 8, Get a Free
Experts Trial Now!
www.cintra.com www.Confio.com/Ignite8

Post-Block Trigger
Restrictions
All Triggers

Description
Fires during the Leave the Block process when the focus moves off the current block.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Post-Block trigger to validate the block's current record; that is, the record that had input focus when the Leave the Block event
occurred.
Use this trigger to test a condition and prevent the user from leaving a block based on that condition.
On Failure
If the trigger fails while trying to make the form the navigation unit, Form Builder tries to set the target to a particular block, record or
item. Failing that, Form Builder attempts to put the cursor at a target location, but, if the target is outside of the current unit or if the
operator indicates an end to the process, Form Builder aborts the form.
Fires In
Leave the Block
Review Process Flowcharts

Post-Block Trigger restrictions


A Post-Block trigger does not fire when the Validation Unit form document property is set to Form.

Post-Change Trigger
Restrictions Related Topics
All Triggers

Description
Fires when any of the following conditions exist:
The Validate the Item process determines that an item is marked as Changed and is not NULL.

An operator returns a value into an item by making a selection from a list of values, and the item is not NULL.

Form Builder fetches a non-NULL value into an item. In this case, the When-Validate-Item trigger does not fire. If you want to
circumvent this situation and effectively get rid of the Post-Change trigger, you must include a Post-Query trigger in addition to your
When-Validate-Item trigger. See "Usage Notes" below.
Definition Level form, block, or item
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
The Post-Change trigger is included only for compatibility with previous versions of Form Builder. Its use is not recommended in new
applications.
The Post-Query trigger does not have the restrictions of the Post-Change trigger. You can use Post-Query to make changes to the
fetched database values. Given such changes, Form Builder marks the corresponding items and records as changed.
On Failure
If fired as part of validation initiated by navigation, navigation fails, and the focus remains in the original item.
If there are V2-style triggers in the form and Form Builder is populating a record with fetched values, the following restrictions apply:

Form Builder ignores any attempt to change the value of a database item in the record.

Form Builder does not execute any SELECT statement that only affects database items in the record.
Form Builder does not execute a SELECT statement that does not have an INTO clause.

If Form Builder does not execute a SELECT statement in a V2-style trigger step, it treats the trigger step as though the step
succeeded, even when the Reverse Return Code trigger step property is set.
During fetch processing, Post-Change triggers defined as PL/SQL triggers do not operate with these restrictions. Regardless of
trigger style, during a record fetch, Form Builder does not perform validation checks, but marks the record and its items as Valid, after
firing the Post-Change trigger for each item.
Fires In
Validate the Item
Fetch Records
Review Process Flowcharts

Post-Change Trigger restrictions


Note that it is possible to write a Post-Change trigger that changes the value of an item that Form Builder is validating. If validation
succeeds, Form Builder marks the changed item as Valid and does not re-validate it. While this behavior is necessary to avoid
validation loops, it does allow you to commit an invalid value to the database.

Post-Database-Commit Trigger
Examples Related Topics
All Triggers

Description
Fires once during the Post and Commit Transactions process, after the database commit occurs. Note that the Post-Forms-Commit
trigger fires after inserts, updates, and deletes have been posted to the database, but before the transaction has been finalized by
issuing the Commit. The Post-Database-Commit Trigger fires after Form Builder issues the Commit to finalize the transaction.
Definition Level form
Legal Commands
SELECT statements, DML statements (DELETE, INSERT, UPDATE), unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Post-Database-Commit trigger to perform an action anytime a database commit has occurred.
On Failure
There is no rollback, because at the point at which this trigger might fail, Form Builder has already moved past the point at which a
successful rollback operation can be initiated as part of a failure response.
Fires In
Post and Commit Transactions
Review Process Flowcharts

Post-Database-Commit Trigger examples


Example
/*
FUNCTION recs_posted_and_not_committed
** RETURN BOOLEAN IS
** BEGIN
** Default_Value('TRUE','Global.Did_DB_Commit');
** RETURN (:System.Form_Status = 'QUERY'
** AND :Global.Did_DB_Commit = 'FALSE');
** END;
*/
BEGIN
:Global.Did_DB_Commit := 'FALSE';
END;

Post-Delete Trigger

All Triggers

Description
Fires during the Post and Commit Transactions process, after a row is deleted. It fires once for each row that is deleted from the
database during the commit process.
Definition Level form or block
Legal Commands
SELECT statements, DML statements (DELETE, INSERT, UPDATE), unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Post-Delete trigger to audit transactions.
On Failure
Form Builder performs the following steps when the Post-Delete trigger fails:

sets the error location

rolls back to the most recent savepoint


Fires In
Post and Commit Transactions
Review Process Flowcharts

Post-Form Trigger

All Triggers

Description
Fires during the Leave the Form process, when a form is exited.
Definition Level form
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Post-Form trigger for the following tasks:

To clean up the form before exiting. For example, use a Post-Form trigger to erase any global variables that the form no longer
requires.

To display a message to the operator upon form exit.


This trigger does not fire when the form is exited abnormally, for example, if validation fails in the form.
On Failure
processing halts
Fires In
Leave the Form
Review Process Flowcharts

Post-Forms-Commit Trigger
Examples Related Topics
All Triggers

Description
Fires once during the Post and Commit Transactions process. If there are records in the form that have been marked as inserts,
updates, or deletes, the Post-Forms-Commit trigger fires after these changes have been written to the database but before Form
Builder issues the database Commit to finalize the transaction.
If the operator or the application initiates a Commit when there are no records in the form have been marked as inserts, updates, or
deletes, Form Builder fires the Post-Forms-Commit trigger immediately, without posting changes to the database.
Definition Level form
Legal Commands
SELECT statements, DML statements (DELETE, INSERT, UPDATE), unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Post-Forms-Commit trigger to perform an action, such as updating an audit trail, anytime a database commit is about to occur.
On Failure
Aborts post and commit processing: Form Builder issues a ROLLBACK and decrements the internal Savepoint counter.
Fires In
Post and Commit Transactions
Review Process Flowcharts

Post-Forms-Commit Trigger examples


Example
This example can be used in concert with the Post-Database-Commit trigger to detect if records have been posted but not yet
committed.
/*
** FUNCTION recs_posted_and_not_committed
** RETURN BOOLEAN IS
** BEGIN
** Default_Value('TRUE','Global.Did_DB_Commit');
** RETURN (:System.Form_Status = 'QUERY'
** AND :Global.Did_DB_Commit = 'FALSE');
** END;
*/
BEGIN
:Global.Did_DB_Commit := 'FALSE';
END;

Post-Insert Trigger

All Triggers

Description
Fires during the Post and Commit Transactions process, just after a record is inserted. It fires once for each record that is inserted
into the database during the commit process.
Definition Level form or block
Legal Commands
SELECT statements, DML statements (DELETE, INSERT, UPDATE), unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Post-Insert trigger to audit transactions.
On Failure
Form Builder performs the following steps when the Post-Insert trigger fails:
sets the error location

rolls back to the most recent savepoint


Fires In
Post and Commit Transactions
Review Process Flowcharts

Post-Logon Trigger
Examples Related Topics
All Triggers

Description
Fires after either of the following events:

The successful completion of Form Builder default logon processing.

The successful execution of the On-Logon trigger.


Definition Level form
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Post-Logon trigger to provide an event point for a task such as setting up a custom environment with special variables--to
initialize on an application level rather than a form-by-form basis. You might accomplish this by initializing special global variables from
this trigger.
On Failure
Varies based on the following conditions:

If the trigger fails during the first logon process, Form Builder exits the form, and returns to the operating system.

If the trigger fails after a successful logon, Form Builder raises the built-in exception FORM_TRIGGER_FAILURE .
Fires In
LOGON
Review Process Flowcharts

Post-Logon Trigger examples


Example
This example calls a user exit to log the current username and time to an encrypted audit trail file on the file system, which for security
reasons is outside the database.
BEGIN
User_Exit('LogCrypt '||
USER||' ' ||
TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'));
END;

Post-Logout Trigger
Related Topics
All Triggers

Description
Fires after either of the following events:

Form Builder successfully logs out of ORACLE.


The successful execution of the On-Logout trigger.
Definition Level form
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Post-Logout trigger to audit or to perform tasks on an Form Builder application that does not require or affect the RDBMS or
other data source.
If you call certain built-ins from within one of the Logout triggers, the results are undefined. For example, you cannot call COPY from a
Pre-Logout trigger because Pre-Logout fires after the Leave the Form event. Because the form is no longer accessible, a COPY
operation is not possible.
On Failure
If this trigger fails while leaving the form, there is no effect.
If this trigger fails and you have initiated a call to the LOGOUT built-in from within the trigger, FORM_FAILURE is set to TRUE.
Fires In
LOGOUT
Review Process Flowcharts

Post-Query Trigger
Examples Related Topics
All Triggers
Description
When a query is open in the block, the Post-Query trigger fires each time Form Builder fetches a record into a block. The trigger fires
once for each record placed on the block's list of records.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Post-Query trigger to perform the following tasks:

populate control items or items in other blocks


calculate statistics about the records retrieved by a query

calculate a running total


When you use a Post-Query trigger to SELECT non-base table values into control items, Form Builder marks each record as
CHANGED, and so fires the When-Validate-Item trigger by default. You can avoid the execution of the When-Validate-Item trigger by
explicitly setting the Status property of each record to QUERY in the Post-Query trigger. To set record status programmatically, use
SET_RECORD_PROPERTY .
On Failure
Form Builder flushes the record from the block and attempts to fetch the next record from the database. If there are no other records in
the database, Form Builder closes the query and waits for the next operator action.
Fires In
Fetch Records
Review Process Flowcharts

Post-Query Trigger examples


Example
This example retrieves descriptions for code fields, for display in non-database items in the current block.
DECLARE

CURSOR lookup_payplan IS SELECT Payplan_Desc


FROM Payplan
WHERE Payplan_Id =
:Employee.Payplan_Id;

CURSOR lookup_area IS SELECT Area_Name


FROM Zip_Code
WHERE Zip = :Employee.Zip;

BEGIN
/*
** Lookup the Payment Plan Description given the
** Payplan_Id in the Employee Record just fetched.
** Use Explicit Cursor for highest efficiency.
*/
OPEN lookup_payplan;
FETCH lookup_payplan INTO :Employee.Payplan_Desc_Nondb;
CLOSE lookup_payplan;

/*
** Lookup Area Descript given the Zipcode in
** the Employee Record just fetched. Use Explicit
** Cursor for highest efficiency.
*/
OPEN lookup_area;
FETCH lookup_area INTO :Employee.Area_Desc_Nondb;
CLOSE lookup_area;
END;

Post-Record Trigger
Restrictions
All Triggers

Description
Fires during the Leave the Record process. Specifically, the Post-Record trigger fires whenever the operator or the application moves
the input focus from one record to another. The Leave the Record process can occur as a result of numerous operations, including
INSERT_RECORD , DELETE_RECORD , NEXT_RECORD , NEXT_BLOCK , CREATE_RECORD , PREVIOUS_BLOCK , etc.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Post-Record trigger to perform an action whenever the operator or the application moves the input focus from one record to
another. For example, to set a visual attribute for an item as the operator scrolls down through a set of records, put the code within this
trigger.
On Failure
The input focus stays in the current record.
Fires In
Leave the Record
Review Process Flowcharts

Post-Record Trigger restrictions


A Post-Record trigger fires only when the form is run with a validation unit of the item or record, as specified by the Validation Unit
form property.

Post-Select Trigger

All Triggers

Description
The Post-Select trigger fires after the default selection phase of query processing, or after the successful execution of the On-Select
trigger. It fires before any records are actually retrieved through fetch processing.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Note:
Use the Post-Select trigger to perform an action based on the outcome of the Select phase of query processing such as an action
based on the number of records that match the query criteria.
On Failure
no effect
Fires In
Execute the Query
Open the Query
Review Process Flowcharts

Post-Text-Item Trigger
Restrictions Related Topics
All Triggers

Description
Fires during the Leave the Item process for a text item. Specifically, this trigger fires when the input focus moves from a text item to
any other item.
Definition Level form, block, or item
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Post-Text-Item trigger to calculate or change item values.
On Failure
Navigation fails and focus remains in the text item.
Fires In
Leave the Item
Review Process Flowcharts

Post-Text-Item Trigger restrictions


The Post-Text-Item trigger does not fire when the input focus is in a text item and the operator uses the mouse to click on a button,
check box, list item, or radio group item that has the Mouse Navigate property Off. When Mouse Navigate is Off for these items,
clicking them with the mouse is a non-navigational event, and the input focus remains in the current item (in this example, a text item).

Post-Update Trigger

All Triggers

Description
Fires during the Post and Commit Transactions process, after a row is updated. It fires once for each row that is updated in the
database during the commit process.
Definition Level form or block
Legal Commands
SELECT statements, DML statements (DELETE, INSERT, UPDATE), unrestricted function codes, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Post-Update trigger to audit transactions.
On Failure
Form Builder performs the following steps when the Post-Update trigger fails:
sets the error location
rolls back to the most recent savepoint
Fires In
Post and Commit Transactions
Review Process Flowcharts

Pre-Block Trigger
Restrictions
All Triggers

Description
Fires during the Enter the Block process, during navigation from one block to another.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Pre-Block trigger to:

allow or disallow access to a block


set variable values
On Failure
Navigation fails and focus remains in the source item.
Fires In
Enter the Block
Review Process Flowcharts

Pre-Block Trigger restrictions


A Pre-Block trigger fires only when the form is run with a validation unit of the item, record, or block, as specified by the Validation Unit
form property.

Pre-Commit Trigger

All Triggers

Description
Fires once during the Post and Commit Transactions process, before Form Builder processes any records to change. Specifically, it
fires after Form Builder determines that there are inserts, updates, or deletes in the form to post or commit. The trigger does not fire
when there is an attempt to commit, but validation determines that there are no changed records in the form.
Definition Level form
Legal Commands
SELECT statements, DML statements (DELETE, INSERT, UPDATE), unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Pre-Commit trigger to perform an action, such as setting up special locking requirements, at any time a database commit is
going to occur.
On Failure
The Post and Commit process fails: No records are written to the database and focus remains in the current item.
Note: If you perform DML in a Pre-Commit trigger and the trigger fails, you must perform a manual rollback, because Form Builder
does not perform an automatic rollback. To prepare for a possible manual rollback, save the savepoint name in an On-Savepoint
trigger, using GET_APPLICATION_PROPERTY (Savepoint_Name). Then you can roll back using ISSUE_ROLLBACK
(Savepoint_Name).
Fires In
Post and Commit Transactions
Review Process Flowcharts

Pre-Delete Trigger

All Triggers

Description
Fires during the Post and Commit Transactions process, before a row is deleted. It fires once for each record that is marked for
delete.
Note: Form Builder creates a Pre-Delete trigger automatically for any master-detail relation that has the Delete Record Behavior
property set to Cascading
Definition Level form or block
Legal Commands
SELECT statements, Data Manipulation Language (DML) statements (i.e., DELETE, INSERT, UPDATE), unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Pre-Delete trigger to delete the detail record of a master record.
Use a Pre-Delete trigger to prevent the deletion of a record if that record is the master record for detail records that still exist.
On Failure
Form Builder performs the following steps when the Pre-Delete trigger fails:

sets the error location

rolls back to the most recent savepoint


Fires In
Post and Commit Transactions
Review Process Flowcharts

Pre-Form Trigger
Related Topics
All Triggers

Description
Fires during the Enter the Form event, at form startup.
Definition Level form
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Pre-Form trigger to perform the following tasks:

assign unique primary key from sequence

restrict access to a form


initialize global variables
On Failure
Form Builder leaves the current form and fires no other triggers.
Fires In
Enter the Form
Review Process Flowcharts

Pre-Insert Trigger
Examples
All Triggers

Description
Fires during the Post and Commit Transactions process, before a row is inserted. It fires once for each record that is marked for
insert.
Definition Level form or block
Legal Commands
SELECT statements, DML statements (DELETE, INSERT, UPDATE), unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Pre-Insert trigger to perform the following tasks:
change item values

keep track of the date a record is created and store that in the record prior to committing
On Failure
Form Builder performs the following steps when the Pre-Insert trigger fails:

sets the error location

rolls back to the most recent savepoint


Fires In
Post and Commit Transactions
Review Process Flowcharts

Pre-Insert Trigger examples


Example
This example assigns a primary key field based on a sequence number, and then writes a row into an auditing table, flagging creation
of a new order.
DECLARE
CURSOR next_ord IS SELECT orderid_seq.NEXTVAL FROM dual;
BEGIN

/*
** Fetch the next sequence number from the
** explicit cursor directly into the item in
** the Order record. Could use SELECT...INTO,
** but explicit cursor is more efficient.
*/
OPEN next_ord;
FETCH next_ord INTO :Order.OrderId;
CLOSE next_ord;

/*
** Make sure we populated a new order id ok...
*/
IF :Order.OrderId IS NULL THEN
Message('Error Generating Next Order Id');
RAISE Form_Trigger_Failure;
END IF;

/*
** Insert a row into the audit table
*/
INSERT INTO ord_audit( orderid, operation, username, timestamp )
VALUES ( :Order.OrderId,
'New Order',
USER,
SYSDATE );

END;

Pre-Logon Trigger

All Triggers

Description
Fires just before Form Builder initiates a logon procedure to the data source.
Definition Level form
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Pre-Logon trigger to prepare the form for the logon procedure, particularly to a non-ORACLE data source.
On Failure
The results of a failure depend on which of the following conditions applies:
If Form Builder is entering the form for the first time and the trigger fails, the form is exited gracefully, but no other triggers are fired.

If the trigger fails while Form Builder is attempting to execute the LOGON built-in from within the trigger, Form Builder raises the
FORM_TRIGGER_FAILURE exception.
Fires In
LOGON
Review Process Flowcharts

Pre-Logout Trigger

All Triggers

Description
Fires once before Form Builder initiates a logout procedure.
Definition Level form
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Pre-Logout trigger to prepare the form for logging out from the data source, particularly a non-ORACLE data source.
If you call certain built-ins from within one of the Logout triggers, the results are undefined. For example, the COPY built-in cannot be
called from a Pre-Logout trigger because Pre-Logout fires after the Leave the Form event. Because the form is no longer accessible
at this point, the COPY operation is not possible.
On Failure
The results of a failure depend on which of the following conditions applies:

If Form Builder is exiting the form and the trigger fails, the form is exited gracefully, but no other triggers are fired.

If the trigger fails while Form Builder is attempting to execute the LOGOUT built-in from within the trigger, Form Builder raises the
FORM_TRIGGER_FAILURE exception.
If an exception is raised in a Pre-Logout trigger, Form Builder does not fire other triggers, such as On-Logout and Post-Logout .
Fires In
LOGOUT
Review Process Flowcharts

Pre-Popup-Menu Trigger

All Triggers

Description
This trigger is called when a user causes a pop-up menu to be displayed. (In a Microsoft Windows environment, this occurs when a
user presses the right mouse button.) Actions defined for this trigger are performed before the pop-up menu is displayed.
Legal Commands
SELECT statements, restricted built-ins, unrestricted built-ins
Enter Query Mode yes
Usage Notes
Use this trigger to enable or disable menu items on a pop-up menu before it is displayed.
On Failure
No effect

Pre-Query Trigger
Examples Related Topics
All Triggers

Description
Fires during Execute Query or Count Query processing, just before Form Builder constructs and issues the SELECT statement to
identify rows that match the query criteria.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Pre-Query trigger to modify the example record that determines which rows will be identified by the query.
On Failure
The query is canceled. If the operator or the application had placed the form in Enter Query mode, the form remains in Enter Query
mode.
Fires In
COUNT_QUERY
EXECUTE_QUERY
Open the Query
Prepare the Query
Review Process Flowcharts

Pre-Query Trigger examples


Example
This example validates or modifies query criteria for a database block query.
BEGIN
/*
** Set the ORDER BY clause for the current block
** being queried, based on a radio group
** called 'Sort_Column' in a control block named
** 'Switches'. The Radio Group has three buttons
** with character values giving the names of
** three different columns in the table this
** block is based on:
**
** SAL
** MGR,ENAME
** ENAME
*/
Set_Block_Property('EMP',ORDER_BY, :Switches.Sort_Column);
/*
** Make sure the user has given one of the two
** Columns which we have indexed in their search
** criteria, otherwise fail the query with a helpful
** message
*/
IF :Employee.Ename IS NULL AND :Employee.Mgr IS NULL THEN
Message('Supply Employee Name and/or Manager Id '||
'for Query.');
RAISE Form_Trigger_Failure;
END IF;

/*
** Change the default where clause to either show "Current
** Employees Only" or "Terminated Employees" based on the
** setting of a check box named 'Show_Term' in a control
** block named 'Switches'.
*/
IF Check box_Checked('Switches.Show_Term') THEN
Set_Block_Property('EMP',DEFAULT_WHERE,'TERM_DATE IS NOT NULL');
ELSE
Set_Block_Property('EMP',DEFAULT_WHERE,'TERM_DATE IS NULL');
END IF;
END;

Pre-Record Trigger
Examples Restrictions Related Topics
All Triggers
Description
Fires during the Enter the Record process, during navigation to a different record.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Pre-Record trigger to keep a running total.
On Failure
Navigation fails and focus remains in the current item.
Fires In
Enter the Record
Review Process Flowcharts

Pre-Record Trigger restrictions


A Pre-Record trigger fires only when the form is run with a validation unit of the item or record, as specified by the Validation Unit form
property.

Pre-Record Trigger examples


Example
The following trigger prevents the user from entering a new record given some dynamic condition and the status of
SYSTEM.RECORD_STATUS evaluating to NEW.
IF (( dynamic-condition)
AND :System.Record_Status = 'NEW') THEN
RAISE Form_Trigger_Failure;
END IF;

Pre-Select Trigger
Related Topics
All Triggers

Description
Fires during Execute Query and Count Query processing, after Form Builder constructs the SELECT statement to be issued, but
before the statement is actually issued. Note that the SELECT statement can be examined in a Pre-Select trigger by reading the value
of the system variable SYSTEM.LAST_QUERY .
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Pre-Select trigger to prepare a query prior to execution against a non-ORACLE data source.
On Failure
no effect
Fires In
EXECUTE_QUERY
Open the Query
Prepare the Query
Review Process Flowcharts

Pre-Text-Item Trigger
Restrictions
Description
Fires during the Enter the Item process, during navigation from an item to a text item.
Definition Level form, block, or item
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Pre-Text-Item trigger to perform the following types of tasks:

derive a complex default value, based on other items previously entered into the same record.

record the current value of the text item for future reference, and store that value in a global variable or form parameter.
On Failure
Navigation fails and focus remains in the current item.
Fires In
Enter the Item
Review Process Flowcharts

Pre-Text-Item Trigger restrictions


A Pre-Text-Item trigger fires only when the form is run with a validation unit of the item, as specified by the Validation Unit form
property.

Pre-Update Trigger
Examples
All Triggers

Description
Fires during the Post and Commit Transactions process, before a row is updated. It fires once for each record that is marked for
update.
Definition Level form or block
Legal Commands
SELECT statements, DML statements (DELETE, INSERT, UPDATE), unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a Pre-Update trigger to audit transactions.
On Failure
Form Builder performs the following steps when the Pre-Update trigger fails:

sets the error location


rolls back to the most recent savepoint
Fires In
Post and Commit Transactions
Review Process Flowcharts

Pre-Update Trigger examples


Example
The following example writes a row into an Audit Table showing old discount and new discount for a given customer, including
timestamp and username making the change.
DECLARE
old_discount NUMBER;
new_discount NUMBER := :Customer.Discount_Pct;
oper_desc VARCHAR2(80);
CURSOR old_value IS SELECT discount_pct FROM customer
WHERE CustId = :Customer.CustId;
BEGIN
/*
** Fetch the old value of discount percentage from the
** database by CustomerId. We need to do this since the
** value of :Customer.Discount_Pct will be the *new* value
** we're getting ready to commit and we want to record for
** posterity the old and new values. We could use
** SELECT...INTO but choose an explicit cursor for
** efficiency.
*/
OPEN old_value;
FETCH old_value INTO old_discount;
CLOSE old_value;

/*
** If the old and current values are different, then
** we need to write out an audit record
*/
IF old_discount <> new_discount THEN
/*
** Construct a string that shows the operation of
** Changing the old value to the new value. e.g.
**
** 'Changed Discount from 13.5% to 20%'
*/
oper_desc := 'Changed Discount from '||
TO_CHAR(old_discount)||'% to '||
TO_CHAR(new_discount)||'%';

/*
** Insert the audit record with timestamp and user
*/
INSERT INTO cust_audit( custid, operation, username,
timestamp )
VALUES ( :Customer.CustId,
oper_desc,
USER,
SYSDATE );
END IF;
END;

Query-Procedure Trigger

All Triggers
Description
Automatically created by Form Builder when the query data source is a stored procedure. This trigger is called when a query
operation is necessary. Think of this as an On-Query trigger that is called by the system instead of doing default query operations.
Do not modify this trigger.
Enter Query Mode See Usage Notes
Usage Notes
When constructing a query, any of the items may be used, but the Query Data Source Columns property must be set so that those
items can be passed to the query stored procedure. Then, the query stored procedure has to use those values to filter the data. This
means that the enter query mode does not happen automatically unless you specify it.
On Failure
No effect

Update-Procedure Trigger

All Triggers

Description
Automatically created by Form Builder when the update data source is a stored procedure. This trigger is called when a update
operation is necessary. Think of this as an On-Update trigger that is called by the system instead of doing default update operations.
Do not modify this trigger.
Enter Query Mode Not applicable.
On Failure
No effect

User-Named Trigger

All Triggers

Description
A user-named trigger is a trigger defined in a form by the developer. User-Named triggers do not automatically fire in response to a
Form Builder event, and must be called explicitly from other triggers or user-named subprograms. Each user-named trigger defined at
the same definition level must have a unique name.
To execute a user-named trigger, you must call the EXECUTE_TRIGGER built-in procedure, as shown here:
Execute_Trigger('my_user_named_trigger');
Definition Level form, block, or item
Legal Commands
Any commands that are legal in the parent trigger from which the user-named trigger was called.
Enter Query Mode no
Usage Notes
User-named PL/SQL subprograms can be written to perform almost any task for which one might use a user-named trigger.
As with all triggers, the scope of a user-named trigger is the definition level and below. When more than one user-named trigger has
the same name, the trigger defined at the lowest level has precedence.
It is most practical to define user-named triggers at the form level.
Create a user-named trigger to execute user-named subprograms defined in a form document from menu PL/SQL commands and
user-named subprograms. (User-named subprograms defined in a form cannot be called directly from menu PL/SQL, which is
defined in a different document.) In the menu PL/SQL, call the EXECUTE_TRIGGER built-in to execute a user-named trigger, which in
turn calls the user-named subprogram defined in the current form.
On Failure
Sets the FORM_FAILURE built-in to TRUE. Because the user-named trigger is always called by the EXECUTE_TRIGGER built-in,
you can test the outcome of a user-named trigger the same way you test the outcome of a built-in subprogram; that is, by testing for
errors with the built-in functions FORM_FAILURE, FORM_SUCCESS, FORM_FATAL .

When-Button-Pressed Trigger
Examples
All Triggers

Description
Fires when an operator selects a button, by clicking with a mouse, or using the keyboard.
Definition Level form, block, or item
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
Use a When-Button-Pressed trigger to perform navigation, to calculate text item values, or for other item, block, or form level
functionality.
On Failure
no effect

When-Button-Pressed Trigger examples


Example
This example executes a COMMIT_FORM if there are changes in the form.
BEGIN
IF :System.Form_Status = 'CHANGED' THEN
Commit_Form;
/*
** If the Form_Status is not back to 'QUERY'
** following a commit, then the commit was
** not successful.
*/
IF :System.Form_Status <> 'QUERY' THEN
Message('Unable to commit order to database...');
RAISE Form_Trigger_Failure;
END IF;
END IF;
END;

When-Checkbox-Changed Trigger

All Triggers

Description
Fires when an operator changes the state of a check box, either by clicking with the mouse, or using the keyboard.
Definition Level form, block, or item
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
Use a When-Checkbox-Changed trigger to initiate a task dependent upon the state of a check box.
When an operator clicks in a check box, the internal value of that item does not change until navigation is completed successfully.
Thus, the When-Checkbox-Changed trigger is the first trigger to register the changed value of a check box item. So for all navigation
triggers that fire before the When-Checkbox-Changed trigger, the value of the check box item remains as it was before the operator
navigated to it.
On Failure
no effect

When-Clear-Block Trigger
Related Topics
All Triggers

Description
Fires just before Form Builder clears the data from the current block.
Note that the When-Clear-Block trigger does not fire when Form Builder clears the current block during the CLEAR_FORM event.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode yes
Usage Notes
Use a When-Clear-Block trigger to perform an action every time Form Builder flushes the current block. For example, you might
want to perform an automatic commit whenever this condition occurs.

In a When-Clear-Block trigger, the value of SYSTEM.RECORD_STATUS is unreliable because there is no current record. An
alternative is to use GET_RECORD_PROPERTY to obtain the record status. Because GET_RECORD_PROPERTY requires
reference to a specific record, its value is always accurate.
On Failure
no effect on the clearing of the block
Fires In
CLEAR_BLOCK
COUNT_QUERY
ENTER_QUERY
Open the Query
Review Process Flowcharts

When-Create-Record Trigger
Examples Related Topics
All Triggers

Description
Fires when Form Builder creates a new record. For example, when the operator presses the [Insert] key, or navigates to the last
record in a set while scrolling down, Form Builder fires this trigger.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a When-Create-Record trigger to perform an action every time Form Builder attempts to create a new record. This trigger also is
useful for setting complex, calculated, or data-driven default values that must be specified at runtime, rather than at design-time.
On Failure
Prevents the new record from being created. Returns to the previous location, if possible.
Fires In
CREATE_RECORD
Review Process Flowcharts

When-Create-Record Trigger examples


Example
This example assigns data-driven or calculated default values without marking the record as changed.
DECLARE
CURSOR ship_dflt IS SELECT val
FROM cust_pref
WHERE Custid = :Customer.Custid
AND pref = 'SHIP';
BEGIN
/*
** Default Invoice Due Date based on Customer's
** Net Days Allowed value from the Customer block.
*/
:Invoice.Due_Date := SYSDATE + :Customer.Net_Days_Allowed;
/*
** Default the shipping method based on this customers
** preference, stored in a preference table. We could
** use SELECT...INTO, but explicit cursor is more
** efficient.
*/
OPEN ship_dflt;
FETCH ship_dflt INTO :Invoice.Ship_Method;
CLOSE ship_dflt;
END;

When-Custom-Item-Event Trigger
Examples Related Topics
All Triggers

Description
Fires whenever a JavaBean or VBX (on 16-bit Microsoft Windows 3.x) or ActiveX (on 32-bit Windows) custom control in the form
causes the occurrence of an event.
Definition Level:
form, block, item
Legal Commands:
unrestricted built-ins, restricted built-ins
Enter Query Mode:
yes
Usage Notes
Use a When-Custom-Item-Event trigger to respond to a selection or change of value for a custom control. The system variable
SYSTEM.CUSTOM_ITEM_EVENT stores the name of the event that occurred, and the system variable
SYSTEM.CUSTOM_ITEM_EVENT_PARAMETERS stores a parameter name that contains the supplementary arguments for an
event that is fired by a custom control.
Control event names are case sensitive.
On Failure:
no effect

When-Custom-Item-Event Trigger examples


Example
This is an example of a procedure that can be called when Form Builder fires the When-Custom-Item-Event Trigger.
DECLARE
TabEvent varchar2(80);
TabNumber Number;
BEGIN
TabEvent := :system.custom_item_event;
/*
** After detecting a Click event, identify the
** tab selected, and use the user-defined Goto_Tab_Page
** procedure to navigate to the selected page.
*/
IF (UPPER(TabEvent) = 'CLICK') THEN
TabNumber := VBX.Get_Property('TABCONTROL','CurrTab');
Goto_Tab_Page(TabNumber);
END IF;
END;

When-Database-Record Trigger

All Triggers

Description
Fires when Form Builder first marks a record as an insert or an update. That is, the trigger fires as soon as Form Builder determines
through validation that the record should be processed by the next post or commit as an insert or update. This generally occurs only
when the operator modifies the first item in a record, and after the operator attempts to navigate out of the item.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a When-Database-Record trigger to perform an action every time a record is first marked as an insert or an update.
On Failure
no effect

When-Form-Navigate Trigger
Examples
All Triggers

Description
Fires when navigation between forms takes place, such as when the user changes the focus to another loaded form.
Definition Level form
Legal Commands:
unrestricted built-ins, restricted built-ins
Enter Query Mode:
no
Usage Notes
Use a When-Form-Navigate trigger to perform actions when any cross form navigation takes place without relying on window activate
and window deactivate events.
On Failure
no effect

When-Form-Navigate Trigger examples


Example
This is an example of a procedure that can be called when Form Builder fires the When-Form-Navigate Trigger.
DECLARE
win_id WINDOW := FIND_WINDOW('WINDOW12');
BEGIN
if (GET_WINDOW_PROPERTY(win_id,WINDOW_STATE) = 'MAXIMIZE' THEN
SET_WINDOW_PROPERTY(win_id,WINDOW_STATE,MINIMIZE);
else
SET_WINDOW_PROPERTY(win_id,WINDOW_STATE,MAXIMIZE);
end if;
END;

When-Image-Activated Trigger

All Triggers

Description
Fires when an operator uses the mouse to:

single-click on an image item


double-click on an image item
Note that When-Image-Pressed also fires on a double-click.
Definition Level form, block, or item
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
On Failure
no effect

When-Image-Pressed Trigger

All Triggers

Description
Fires when an operator uses the mouse to:

single-click on an image item


double-click on an image item
Note that When-Image-Activated also fires on a double-click.
Definition Level form, block, or item
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
Use a When-Image-Pressed trigger to perform an action when an operator clicks or double-clicks on an image item.
On Failure
no effect

When-List-Activated Trigger
Related Topics
All Triggers

Description
Fires when an operator double-clicks on an element in a list item that is displayed as a T-list.
Definition Level form, block, or item
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
A When-List-Activated trigger fires only for T-list style list items, not for drop-down lists or combo box style list items. The display style
of a list item is determined by the List Style property.
On Failure
no effect

When-List-Changed Trigger
Related Topics
All Triggers

Description
Fires when an end user selects a different element in a list item or de-selects the currently selected element. In addition, if a When-
List-Changed trigger is attached to a combo box style list item, it fires each time the end user enters or modifies entered text.
Definition Level form, block, or item
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
Use a When-List-Changed trigger to initiate an action when the value of the list is changed directly by the end user. The When-List-
Changed trigger is not fired if the value of the list is changed programmatically such as by using the DUPLICATE_ITEM built-in, or if
the end user causes a procedure to be invoked which changes the value. For example, the When-List-Changed trigger will not fire if
an end user duplicates the item using a key mapped to the DUPLICATE_ITEM built-in.
On Failure
no effect

When-Mouse-Click Trigger
All Triggers

Description
Fires after the operator clicks the mouse if one of the following events occurs:
if attached to the form, when the mouse is clicked within any canvas or item in the form

if attached to a block, when the mouse is clicked within any item in the block
if attached to an item, when the mouse is clicked within the item
Three events must occur before a When-Mouse-Click trigger will fire:
Mouse down
Mouse up

Mouse click
Any trigger that is associated with these events will fire before the When-Mouse-Click trigger fires.
Definition Level form, block, or item
Legal Commands
SELECT statements, restricted built-ins, unrestricted built-ins
Enter Query Mode yes
Usage Notes
Use the When-Mouse-Click trigger to perform an action every time the operator clicks the mouse within an item and/or canvas.
On Failure
no effect

When-Mouse-DoubleClick Trigger
Examples
All Triggers

Description
Fires after the operator double-clicks the mouse if one of the following events occurs:

if attached to the form, when the mouse is double-clicked within any canvas or item in the form
if attached to a block, when the mouse is double-clicked within any item in the block
if attached to an item, when the mouse is double-clicked within the item
Six events must occur before a When-Mouse-DoubleClick trigger will fire:
Mouse down

Mouse up
Mouse click

Mouse down
Mouse up
Mouse double-click
Any trigger that is associated with these events will fire before the When-Mouse-DoubleClick trigger fires.
Definition Level form, block, or item
Legal Commands
SELECT statements, restricted built-ins, unrestricted built-ins
Enter Query Mode yes
Usage Notes
Use a When-Mouse-DoubleClick trigger to perform an action every time the operator double-clicks the mouse within an item and/or
canvas.
On Failure
no effect

When-Mouse-DoubleClick Trigger examples


Example
Assume that an application requires Behavior A when the operator clicks the mouse and Behavior B when the operator double-clicks
the mouse. For example, if the operator clicks the mouse, a product information window must appear. If the operator double-clicks the
mouse, an online help window must appear.
Three triggers are used in this example, a When-Mouse-Click trigger, a When-Timer-Expired trigger, and a When-Mouse-DoubleClick
trigger.
/*
** Trigger: When-Mouse-Click
** Example: When the operator clicks the mouse, create a timer
** that will expire within .5 seconds.
*/

DECLARE
timer_id TIMER;
timer_duration NUMBER(5) := 500;
BEGIN
timer_id := Create_Timer('doubleclick_timer', timer_duration,
NO_REPEAT);
END;

/*
** Trigger: When-Timer-Expired
** Example: When the timer expires display the online help
** window if the operator has double-clicked the mouse
** within .5 seconds, otherwise display the product
** information window.
*/
BEGIN
IF :Global.double_click_flag = 'TRUE' THEN
Show_Window('online_help');
:Global.double_click := 'FALSE';
ELSE
Show_Window('product_information');
END IF;
END;

/*
** Trigger: When-Mouse-DoubleClick
** Example: If the operator double-clicks the mouse, set a
** flag that indicates that a double-click event
** occurred.
*/
BEGIN
:Global.double_click_flag := 'TRUE';
END;

When-Mouse-Down Trigger
Restrictions
All Triggers

Description
Fires after the operator presses down the mouse button if one of the following events occurs:
if attached to the form, when the mouse is pressed down within any canvas or item in the form
if attached to a block, when the mouse is pressed down within any item in the block

if attached to an item, when the mouse is pressed within the item


Definition Level form, block, or item
Legal Commands
SELECT statements, restricted built-ins, unrestricted built-ins
Enter Query Mode yes
Usage Notes
Use a When-Mouse-Down trigger to perform an action every time the operator presses down the mouse button within an item and/or
canvas.
Note: The mouse down event is always followed by a mouse up event.
On Failure
no effect

When-Mouse-Down Trigger restrictions


Depending on the window manager, navigational code within a When-Mouse-Down trigger may fail. For example on Microsoft
Windows, if the operator clicks the mouse button within a field (Item_One), a When-Mouse-Down trigger that calls GO_ITEM
('item_two') will fail because Windows will return focus to Item_One, not Item_Two since the When-Mouse-Up event occurred within
Item_Two.

When-Mouse-Enter Trigger

All Triggers

Description
Fires when the mouse enters an item or canvas if one of the following events occurs:

if attached to the form, when the mouse enters any canvas or item in the form
if attached to a block, when the mouse enters any item in the block
if attached to an item, when the mouse enters the item
Definition Level form, block, or item
Legal Commands
SELECT statements, restricted built-ins, unrestricted built-ins
Enter Query Mode yes
Usage Notes
Use a When-Mouse-Enter trigger to perform an action every time the mouse enters an item or canvas.
Do not use the When-Mouse-Enter trigger on a canvas that is larger than the window. Iconic buttons and items on the canvas below
the initial window cannot be selected. The user is able to scroll the canvas to see the items. However, as soon as the mouse enters
that area, the trigger fires and returns focus to the previous target, so the user is never able to click on those items.
Changing a tooltip's property in a When-Mouse-Enter trigger cancels the tooltip before it is ever shown.
Be careful when calling a modal window from a When-Mouse-Enter trigger. Doing so may cause the modal window to appear
unnecessarily.
For example, assume that your When-Mouse-Enter trigger causes Alert_One to appear whenever the mouse enters Canvas_One.
Assume also that your application contains two canvases, Canvas_One and Canvas_Two. Canvas_One and Canvas_Two do not
overlap each other, but appear side by side on the screen. Further, assume that Alert_One displays within Canvas_Two's border.
Finally, assume that the mouse has entered Canvas_One causing the When-Mouse-Enter trigger to fire which in turn causes
Alert_One to appear.
When the operator dismisses the message box, Alert_One will appear again unnecessarily if the operator subsequently enters
Canvas_One with the mouse. In addition, when the operator moves the mouse out of Canvas_Two, any When-Mouse-Leave triggers
associated with this event will fire. This may not be the desired behavior.
On Failure
no effect

When-Mouse-Leave Trigger

All Triggers

Description
Fires after the mouse leaves an item or canvas if one of the following events occurs:
if attached to the form, when the mouse leaves any canvas or item in the form

if attached to a block, when the mouse leaves any item in the block
if attached to an item, when the mouse leaves the item
Definition Level form, block, or item
Legal Commands
SELECT statements, restricted built-ins, unrestricted built-ins
Enter Query Mode yes
Usage Notes
Use a When-Mouse-Leave trigger to perform an action every time the mouse leaves an item and/or canvas.
On Failure
no effect

When-Mouse-Move Trigger

All Triggers

Description
Fires each time the mouse moves if one of the following events occurs:
if attached to the form, when the mouse moves within any canvas or item in the form
if attached to a block, when the mouse moves within any item in the block

if attached to an item, when the mouse moves within the item


Definition Level form, block, or item
Legal Commands
SELECT statements, restricted built-ins, unrestricted built-ins
Enter Query Mode yes
Usage Notes
Use the When-Mouse-Move trigger to perform an action every time the operator moves the mouse.
The When-Mouse-Move trigger may have performance implications because of the number of times this trigger can potentially fire.
On Failure
no effect
When-Mouse-Up Trigger

All Triggers

Description
Fires each time the operator presses down and releases the mouse button if one of the following events occurs:
if attached to the form, when the mouse up event is received within any canvas or item in a form

if attached to a block, when the mouse up event is received within any item in a block
if attached to an item, when the mouse up event is received within an item
Two events must occur before a When-Mouse-Up trigger will fire:
Mouse down

Mouse up
Definition Level form, block, or item
Legal Commands
SELECT statements, restricted built-ins, unrestricted built-ins
Enter Query Mode yes
Usage Notes
Use the When-Mouse-Up trigger to perform an action every time the operator presses and releases the mouse.
The mouse up event is always associated with the item that received the mouse down event. For example, assume that there is a
When-Mouse-Up trigger attached to Item_One. If the operator presses down the mouse on Item_One, but then releases the mouse on
Item_Two, the mouse up trigger will fire for Item_One, rather than for Item_Two.
On Failure
no effect

When-New-Block-Instance Trigger
Related Topics
All Triggers

Description
Fires when the input focus moves to an item in a different block. Specifically, it fires after navigation to an item, when Form Builder is
ready to accept input in a block that is different than the block that previously had the input focus.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode no
Usage Notes
Use a When-New-Block-Instance trigger to perform an action every time Form Builder instantiates a new block.
On Failure
no effect
Fires In
Return for Input
Review Process Flowcharts
When-New-Form-Instance Trigger
Examples Restrictions Related Topics
All Triggers

Description
At form start-up, Form Builder navigates to the first navigable item in the first navigable block. A When-New-Form-Instance trigger
fires after the successful completion of any navigational triggers that fire during the initial navigation sequence.
This trigger does not fire when control returns to a calling form from a called form.
In a multiple-form application, this trigger does not fire when focus changes from one form to another.
Definition Level form
Legal Commands
SELECT statements, restricted built-ins, unrestricted built-ins
Enter Query Mode no
On Failure
no effect
Fires In
Run the Form
Review Process Flowcharts

When-New-Form-Instance Trigger restrictions


1. When you call FORMS_OLE.GET_INTERFACE_POINTER from the When-New-Form-Instance trigger, an exception (ORA-
305500) is raised unless you initialize the OLE item or the ActiveX control with the SYNCHRONIZE built-in.
2. When a new form is called, it will appear in the default x-y position on the screen. If this is not the desired position, you can
change the x-y coordinates. However, they cannot be changed in this When-New-Form-Instance trigger. (This trigger fires too
late in the sequence.) To change the coordinates, use the Pre-Form trigger.

When-New-Form-Instance Trigger examples


Example
This example calls routine to display dynamic images, starts a timer to refresh the on-screen clock, and queries the first block.
BEGIN
Populate_Dynamic_Boilerplate;
Start_OnScreen_Clock_Timer;
Go_Block('Primary_Ord_Info');

/*
** Query the block without showing
** the working message.
*/
:System.Suppress_Working := 'TRUE';
Execute_Query;
:System.Suppress_Working := 'FALSE';
END;

When-New-Item-Instance Trigger
Restrictions Related Topics
All Triggers

Description
Fires when the input focus moves to an item. Specifically, it fires after navigation to an item, when Form Builder is ready to accept
input in an item that is different than the item that previously had input focus.
Definition Level form, block, or item
Legal Commands
SELECT statements, restricted built-ins, unrestricted built-ins.
Enter Query Mode yes
Usage Notes
Use a When-New-Item-Instance trigger to perform an action whenever an item gets input focus. The When-New-Item-Instance trigger
is especially useful for calling restricted (navigational) built-ins.
On Failure
no effect
Fires In
Return for Input
Review Process Flowcharts

When-New-Item-Instance Trigger restrictions


The conditions for firing this trigger are not met under the following circumstances:
Form Builder navigates through an item, without stopping to accept input
the input focus moves to a field in an alert window, or to any part of an Form Builder menu

When-New-Record-Instance Trigger
Related Topics
All Triggers

Description
Fires when the input focus moves to an item in a record that is different than the record that previously had input focus. Specifically, it
fires after navigation to an item in a record, when Form Builder is ready to accept input in a record that is different than the record that
previously had input focus.
Fires whenever Form Builder instantiates a new record.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
Use a When-New-Record-Instance trigger to perform an action every time Form Builder instantiates a new record. For example, when
an operator presses [Down] to scroll through a set of records, Form Builder fires this trigger each time the input focus moves to the
next record, in other words, each time Form Builder instantiates a new record in the block.
On Failure
no effect
Fires In
Return for Input
Review Process Flowcharts

When-Radio-Changed Trigger
All Triggers

Description
Fires when an operator selects a different radio button in a radio group, or de-selects the currently selected radio button, either by
clicking with the mouse, or using the keyboard.
Definition Level form, block, or item
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
Use a When-Radio-Changed trigger to perform an action depending on the state of a radio group. (De-selecting a radio button in a
radio group sets the radio group value to NULL; operators use this technique in Enter Query mode to exclude a radio group from a
query.)
When an operator clicks an item in a radio group, the internal value of that item does not change until navigation is completed
successfully. Thus, the When-Radio-Changed trigger is the first trigger to register the changed value of a radio group. For all
navigation triggers that fire before the When-Radio-Changed trigger, the value of the radio group remains as it was before the
operator navigated to it.
On Failure
no effect

When-Remove-Record Trigger

All Triggers

Description
Fires whenever the operator or the application clears or deletes a record.
Definition Level form, block, or item
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a When-Remove-Record trigger to perform an action every time Form Builder clears or deletes a record.
On Failure
Form Builder navigates to the block level with or without validation depending on the current operation, and puts the cursor at the
target block.
Fires In
CLEAR_RECORD
DELETE_RECORD
Review Process Flowcharts

When-Tab-Page-Changed
Examples Related Topics
All Triggers

Description
Fires whenever there is explicit item or mouse navigation from one tab page to another in a tab canvas.
Definition Level form
Legal Commands
unrestricted built-ins, restricted built-ins
Enter Query Mode no
Usage Notes
Use a When-Tab-Page-Changed trigger to perform actions when any tab page is changed during item or mouse navigation.

When-Tab-Page-Changed fires only when tab page navigation is explicit; it does not respond to implicit navigation. For example,
the trigger will fire when the mouse or keyboard is used to navigate between tab pages, but the trigger will not fire if an end user
presses [Next Item] (Tab) to navigate from one field to another field in the same block, but on different tab pages.
When-Tab-Page-Changed does not fire when the tab page is changed programmatically.
On Failure
no effect

When-Tab-Page-Changed examples
Example
/* Use a When-Tab-Page-Changed trigger to dynamically
change a tab page's label from lower- to upper-case
** (to indicate to end users if they already have
** navigated to the tab page):
*/
DECLARE
tp_nm VARCHAR2(30);
tp_id TAB_PAGE;
tp_lb VARCHAR2(30);

BEGIN
tp_nm := GET_CANVAS_PROPERTY('emp_cvs', topmost_tab_page);
tp_id := FIND_TAB_PAGE(tp_nm);
tp_lb := GET_TAB_PAGE_PROPERTY(tp_id, label);

IF tp_lb LIKE 'Sa%' THEN


SET_TAB_PAGE_PROPERTY(tp_id, label, 'SALARY');
ELSIF tp_lb LIKE 'Va%' THEN
SET_TAB_PAGE_PROPERTY(tp_id, label, 'VACATION');
ELSE null;
END IF;
END;

When-Timer-Expired Trigger
Examples Restrictions Related Topics
All Triggers

Description
Fires when a timer expires.
Definition Level form
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
Timers are created programmatically by calling the CREATE_TIMER built-in procedure.
The When-Timer-Expired trigger can not fire during trigger, navigation, or transaction processing.
Use a When-Timer-Expired trigger to initiate an event, update item values, or perform any task that should occur after a specified
interval.
You can call GET_APPLICATION_PROPERTY(TIMER_NAME) in a When-Timer-Expired trigger to determine the name of the most
recently expired timer.
On Failure
no effect
Fires In
Process Expired Timer
Review Process Flowcharts

When-Timer-Expired Trigger restrictions


A When-Timer-Expired trigger will not fire when the user is currently navigating a menu.

When-Timer-Expired Trigger examples


Example
The following example displays a message box each time a repeating timer expires. The following example is from a telemarketing
application, in which sales calls are timed, and message boxes are displayed to prompt the salesperson through each stage of the
call. The message box is displayed each time a repeating timer expires.
DECLARE
timer_id TIMER;
alert_id ALERT;
call_status NUMBER;
msg_1 VARCHAR2(80) := 'Wrap up the first phase of your
presentation';
msg_2 VARCHAR2(80) := 'Move into your close.';
msg_3 VARCHAR2(80) := 'Ask for the order or
repeat the close.'
two_minutes NUMBER(6) := (120 * 1000);
one_and_half NUMBER(5) := (90 * 1000);
BEGIN
:GLOBAL.timer_count := 1
BEGIN
timer_id := FIND_TIMER('tele_timer');
alert_id := FIND_ALERT('tele_alert');
IF :GLOBAL.timer_count = 1 THEN
Set_Alert_Property(alert_id, ALERT_MESSAGE_TEXT, msg_1);
call_status := Show_Alert(alert_id);
IF call_status = ALERT_BUTTON1 THEN
Delete_Timer(timer_id);
Next_Record;
ELSIF
call_status = ALERT_BUTTON2 THEN
:GLOBAL.timer_count := 0;
ELSE
Set_Timer(timer_id, two_minutes, NO_CHANGE);
END IF;
ELSIF :GLOBAL.timer_count = 2 THEN
Change_Alert_Message(alert_id, msg_2);
call_status := Show_Alert(alert_id);
IF call_status = ALERT_BUTTON1 THEN
Delete_Timer(timer_id);
Next_Record;
ELSIF
call_status = ALERT_BUTTON2 THEN
:GLOBAL.timer_count := 0;
ELSE
Set_Timer(timer_id, one_and_half, NO_CHANGE);
END IF;
ELSE
Change_Alert_Message(alert_id, msg_3);
call_status := Show_Alert(alert_id);
IF call_status = ALERT_BUTTON1 THEN
Delete_Timer(timer_id);
Next_Record;
ELSIF
call_status = ALERT_BUTTON2 THEN
:GLOBAL.timer_count := 0;
ELSE
Set_Timer(timer_id, NO_CHANGE, NO_REPEAT);
END IF;
END IF;
:GLOBAL.timer_count = 2;
END;
END;

When-Tree-Node-Activated Trigger

All Triggers

Description
Fires when an operator double-clicks a node or presses Enter when a node is selected.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
SYSTEM.TRIGGER_NODE is the node the user clicked on. SYSTEM.TRIGGER_NODE returns a value of type NODE.

No programmatic action will cause the When-Tree-Node-Activated trigger to fire. Only end-user action will generate an event.
On Failure
no effect

When-Tree-Node-Expanded Trigger

All Triggers

Description
Fires when a node is expanded or collapsed.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
SYSTEM.TRIGGER_NODE is the node the user clicked on. SYSTEM.TRIGGER_NODE returns a value of type NODE.

No programmatic action will cause the When-Tree-Node-Espanded trigger to fire. Only end-user action will generate an event.
On Failure
no effect

When-Tree-Node-Selected Trigger
All Triggers

Description
Fires when a node is selected or deselected.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
SYSTEM.TRIGGER_NODE is the node the user clicked on. SYSTEM.TRIGGER_NODE returns a value of type NODE.

No programmatic action will cause the When-Tree-Node-Selected trigger to fire. Only end-user action will generate an event.
On Failure
no effect

When-Validate-Item Trigger
Examples Related Topics
All Triggers

Description
Fires during the Validate the Item process. Specifically, it fires as the last part of item validation for items with the New or Changed
validation status.
Definition Level form, block, or item
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a When-Validate-Item trigger to supplement Form Builder default item validation processing.

It is possible to write a When-Validate-Item trigger that changes the value of an item that Form Builder is validating. If validation
succeeds, Form Builder marks the changed item as Valid and does not re-validate it. While this behavior is necessary to avoid
validation loops, it does make it possible for your application to commit an invalid value to the database.

The Defer_Required_Enforcement property postpones enforcement of the Required property from item validation to record
validation. When an item has the Required property set to Yes, by default Form Builder will not allow navigation out of the item until a
valid value is entered. Setting the Defer_Required_Enforcement property to Yes allows the operator to move freely among the items in
the record.
Note: When Defer_Required_Enforcement is On, all other item validation takes place as usual: only checking the Required property
is postponed until the operator leaves the record.
On Failure
If fired as part of validation initiated by navigation, navigation fails, and the focus remains on the original item.
Fires In
Validate the Item
Review Process Flowcharts

When-Validate-Item Trigger examples


Example
The following example finds the commission plan in the COMMPLAN table, based on the current value of the commcode item in the
EMPLOYEE block in the form, to verify that the code is valid. If the code in the COMMPLAN table is located, the description of the
COMMPLAN is obtained and deposited in the non-database Description item. Otherwise, an error is raised.
Method 1: Using a SELECT...INTO statement, the trigger
** looks more readable but can be less efficient
** than Method 2 because for ANSI Standard
** compliance, the SELECT...INTO statement must
** return an error if more than one row is
** retrieved that matches the criteria. This
** implies PL/SQL may attempt to fetch data twice
** from the table in question to insure that there
** aren't two matching rows.
*/
BEGIN
SELECT description
INTO :Employee.Commplan_Desc
FROM commplan
WHERE commcode = :Employee.Commcode;
EXCEPTION
WHEN No.Data_Found THEN
Message('Invalid Commission Plan, Use <List> for help');
RAISE Form_Trigger_Failure;
WHEN Too_Many_Rows THEN
Message('Error. Duplicate entries in COMMPLAN table!');
RAISE Form_Trigger_Failure;
END;

/*
** Method 2: Using an Explicit Cursor looks a bit more
** daunting but is actually quite simple. The
** SELECT statement is declared as a named cursor
** in the DECLARE section and then is OPENed,
** FETCHed, and CLOSEd in the code explicitly
** (hence the name). Here we guarantee that only a
** single FETCH will be performed against the
** database.
*/
DECLARE
noneFound BOOLEAN;
CURSOR cp IS SELECT description
FROM commplan
WHERE commcode = :Employee.Commcode;
BEGIN
OPEN cp;
FETCH cp INTO :Employee.Commplan_Desc;
noneFound := cp%NOTFOUND;
CLOSE cp;
IF noneFound THEN
Message('Invalid Commission Plan, Use <List> for help');
RAISE Form_Trigger_Failure;
END IF;
END;

When-Validate-Record Trigger
Examples Related Topics
All Triggers

Description
Fires during the Validate the Record process. Specifically, it fires as the last part of record validation for records with the New or
Changed validation status.
Definition Level form or block
Legal Commands
SELECT statements, unrestricted built-ins
Enter Query Mode no
Usage Notes
Use a When-Validate-Record trigger to supplement Form Builder default record validation processing.
Note that it is possible to write a When-Validate-Record trigger that changes the value of an item in the record that Form Builder is
validating. If validation succeeds, Form Builder marks the record and all of the fields as Valid and does not re-validate. While this
behavior is necessary to avoid validation loops, it does make it possible for your application to commit an invalid value to the
database.
On Failure
If fired as part of validation initiated by navigation, navigation fails, and the focus remains on the original item.
Fires In
Validate the Record
Review Process Flowcharts

When-Validate-Record Trigger examples


Example
The following example verifies that Start_Date is less than End_Date. Since these two text items have values that are related, it's
more convenient to check the combination of them once at the record level, rather than check each item separately. This code
presumes both date items are mandatory and that neither will be NULL.
/* Method 1: Hardcode the item names into the trigger.
** Structured this way, the chance this code will
** be reusable in other forms we write is pretty
** low because of dependency on block and item
** names.
*/
BEGIN
IF :Experiment.Start_Date > :Experiment.End_Date THEN
Message('Your date range ends before it starts!');
RAISE Form_Trigger_Failure;
END IF;
END;

/* Method 2: Call a generic procedure to check the date


** range. This way our date check can be used in
** any validation trigger where we want to check
** that a starting date in a range comes before
** the ending date. Another bonus is that with the
** error message in one standard place, i.e. the
** procedure, the user will always get a
** consistent failure message, regardless of the
** form they're currently in.
*/
BEGIN
Check_Date_Range(:Experiment.Start_Date,:Experiment.End_Date);
END;

/*
** The procedure looks like this
*/
PROCEDURE Check_Date_Range( d1 DATE, d2 DATE ) IS
BEGIN
IF d1 > d2 THEN
Message('Your date range ends before it starts!');
RAISE Form_Trigger_Failure;
END IF;
END;

When-Window-Activated Trigger
Related Topics
All Triggers
Description
Fires when a window is made the active window. This occurs at form startup and whenever a different window is given focus. Note that
on some window managers, a window can be activated by clicking on its title bar. This operation is independent of navigation to an
item in the window. Thus, navigating to an item in a different window always activates that window, but window activation can also
occur independently of navigation.
Definition Level form
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
Use this trigger to perform the following types of tasks:

Capture initial settings of window properties, by way of the GET_WINDOW_PROPERTY built-in.


Enforce navigation to a particular item whenever a window is activated.
Keep track of the most recently fired window trigger by assigning the value from SYSTEM.EVENT_WINDOW to a variable or global
variable.
On Failure
no effect

When-Window-Closed Trigger
Examples Related Topics
All Triggers

Description
Fires when an operator closes a window using a window-manager specific Close command.
Definition Level form
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
Use this trigger to programmatically close a window when the operator issues the window-manager Close command.
You can hide the window that contains the current item.
On Failure
no effect

When-Window-Closed Trigger examples


Example
The following example of a call to SET_WINDOW_PROPERTY from this trigger closes a window whenever the operator closes it by
way of the window manager operation:
Set_Window_Property('window_name', VISIBLE, PROPERTY_OFF);

When-Window-Deactivated Trigger
Related Topics
All Triggers
Description
Fires when an operator deactivates a window by setting the input focus to another window within the same form.
Definition Level form
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
Use this trigger to audit the state of a window whenever the operator deactivates the window by setting the input focus in another
window.
Note that if this form opens another form, this deactivate trigger does not immediately fire. Instead, it will fire later when control returns
to this form. (Assuming this window also has an activate trigger, then when control returns to this form, first the deactivate trigger fires
followed immediately by the activate trigger.)
On Failure
no effect

When-Window-Resized Trigger
Related Topics
All Triggers

Description
Fires when a window is resized, either by the operator or programmatically through a call to RESIZE_WINDOW or
SET_WINDOW_PROPERTY. (Even if the window is not currently displayed, resizing the window programmatically fires the When-
Window-Resized trigger.) This trigger also fires at form startup, when the root window is first drawn. It does not fire when a window is
iconified.
Definition Level form
Legal Commands
SELECT statements, unrestricted built-ins, restricted built-ins
Enter Query Mode yes
Usage Notes
Use this trigger to perform any one of the following types of tasks:
Capture the changed window properties, such as width, height, x coordinate, or y coordinate.

Audit the actions of an operator.


Set the input focus in an item on the target window.
Maintain certain visual standards by resetting window size if the window was improperly resized.
On Failure
no effect

About error messages


message prefix and number

description of error
possible cause(s) of the error
action(s) you might take to resolve the error
When you encounter an error message, first check the message prefix to determine which component generated the message. Then
look at the message number and description. If you need more information, consult the component's online help system for a full
description of the error message (including cause and action).
Error Message Prefixes
Each component has a unique prefix for its error messages. The following list shows the error message prefixes for Forms Developer:
Prefix Component
FRM Form Builder
OG Graphics Builder
PDE Procedure Builder
In addition to Forms Developer error messages, you may encounter messages from other products. The following list shows other
error message prefixes you may encounter and sources of information for researching the error:
Prefix Source Help
ORA Oracle Server Oracle Server Messages and Codes Manual
PLS PL/SQL Oracle Server Messages and Codes Manual
NET SQL*Net Oracle Network Products Messages Manual

The Oracle Server Messages and Codes Manual contains error message prefixes and descriptions for all database utilities, such as
SQL*DBA, SQL*Loader, SQL*Module, Export, Import, and the Oracle Precompilers.
System-specific error messages are documented in you operating system documentation.

About embedded variables in messages


To help you find and fix errors, Forms Developer embeds object names, numbers, and character strings in some error messages. In
online help, these embedded variables are represented by terms placed in angle brackets (< >).
For example, the error message:
PDE-CCM002: LIB1 is not an open library.
would appear in online help as:
PDE-CCM002: <library name> is not an open library.

Working with Forms Runtime messages


Related Topics
To control the messages that end users see when they use a Form Builder application, you can:

use the SYSTEM.MESSAGE_LEVEL system variable to suppress specific "severity levels" of messages
use On-Error and On-Message triggers to replace the standard processing of messages
use the SYSTEM.SUPPRESS_WORKING system variable to prevent the update of an end user's screen (by suppressing the
"Working..." message)
Message Severity Levels
Forms Runtime messages are ranked by severity. Use the SYSTEM.MESSAGE_LEVEL system variable to can control the minimum
severity level that displays to end users.
There are six levels of message severity that you can affect, listed here in increasing order of severity.

Level Message Description


0 All types of messages from the other levels of severity.
5 Reaffirms an obvious condition.
10 Indicates that the end user has made a procedural mistake.
15 Declares that the end user is attempting to perform a function for which the form is not designed.
20 Indicates a condition where the end user cannot continue an intended action due to a problem with a trigger or another
outstanding condition.
25 Indicates a condition that could result in the form performing incorrectly.
>25 Indicates a message severity level that you cannot suppress via the SYSTEM.MESSAGE_LEVEL system variable.

Severity levels of individual Forms Runtime messages are labelled with "Level" in the Form Builder online help system.
Message Types
To use On-Error and On-Message triggers to replace Forms Runtime messages, you need to be aware of the three types of Forms
Runtime messages:
Informative Informs end users of the present state of processing (e.g., Last value retrieved.) or provides end users with context-
sensitive guidance (e.g., Press [Accept] to enter answer.). Use the On-Message trigger to suppress the appearance of these
messages.
Error Inform end users of error conditions that prevent the end user's actions (e.g., Function key not allowed. Press [Show Function
Keys] for list of valid keys.). Use On-Error triggers to suppress the appearance of these messages. However, you cannot suppress
error messages that appear on the command line (e.g., Too many arguments on command line.).
Working Inform end users that Form Builder currently is processing (e.g., Working...). You cannot use On-Error or On-Message
triggers, or the SYSTEM.MESSAGE_LEVEL system variable to suppress these messages.
Message types of individual Forms Runtime messages are labelled with "Type" in the Form Builder online help system.

Calling Oracle Customer Support


Some errors (e.g., internal errors) will require that you call Oracle Customer Support to report the error. When you call, please provide
the following information:
1. Your name, company, and Oracle Support ID number.
2. The hardware, operating system, and release number of the operating system on which Forms Developer is running.
3. The complete version number of the Forms Developer component you were using when you encountered the error, including
revision number and port release number, if any. (If you are unsure of the component's version number, choose Help About ...
from the menu.)
4. All other products (and their version numbers) in use when you encountered the error (e.g., Oracle 7.1.4).
5. If you encountered one or more error messages, the exact message numbers and descriptions, in the order they appeared.
6. A description of the problem, including any unusual conditions.
7. The problem severity, according to the following codes:

1: Program not usable. Critical impact on operations.


2: Program usable. Operations severely restricted.

3: Program usable with limited functions. Not critical to overall operations.

4: Problem circumvented by customer. Minimal effect-if any-on operations.

About upgrading forms


Related Topics
Forms Developer is upwardly compatible with earlier versions of Oracle Forms, including Versions 3.0, 4.0, 4.5, and 5.0.
Note: Before converting your forms or menus, Oracle Corporation recommends that you first make backup copies of all files. Once
you upgrade a module, you will not be able to open it in an earlier version of Forms.

Upgrading a form
Related Topics
To upgrade a 4.x or 5.x form to Forms Developer 6i:
1. Start Form Builder.
2. Choose File Open to display the file or database dialog.
3. Choose the module you want to upgrade.
4. Click OK.

5. Choose File Save.

6. Choose Program Compile All to compile the newly-upgraded module.


Note: All form modules and libraries must be upgraded and recompiled.
To upgrade a pre-4.0 form to Forms Developer 6i:
Type this statement at the command line, substituting the correct form of the Generate command for your environment:
if60cmp <module_name> <username>/<password> upgrade=yes version=<version_number>

To upgrade from: Use this version number:


Version 3.0 30
Version 2.3 23
Version 2.0 20

Creating a data block


Next Step Related Topics
To create a data block from a table:
Choose Tools-->Data Block Wizard to invoke a wizard that guides you through the process of building a data block.
Or,
1. In the Object Navigator, click the Blocks node.

2. Click the Create button in the toolbar.

3. Double-click the Block object icon to display the Property Palette.


4. Under the Database node:

Set the Query Data Source Type property to Table.


Type the name of a database table in the Query Data Source Name field.
5. Under the Advanced Database node:

Set the DML Data Target Type property to Table.


Type the name of your data source in the DML Data Source Name field.
6. Under the General node, click the Name property, then type a name or accept the default name.
You can use any name that follows ORACLE naming conventions and is unique among blocks in the form. The block name is an
internal descriptor that is not displayed at runtime.

Creating an interface item


Next Step
To create an interface item:
1. In the Object Navigator, click the plus icon beside the desired Blocks node.
Form Builder expands the block node and displays its subnodes.
2. Click the plus icon beside the Items node.

3. Click the Create button in the toolbar.


A new item with a default name is inserted under the Items node.
4. Double-click the object icon beside the newly created item to display the Property Palette.
5. Under the Database node, set the Database Item property to No.

Note: When you create an item in a data block, Forms assumes the item is a data item, and sets its Database Item property to Yes.
Data items are automatically included in any SELECT, UPDATE, and INSERT statements issued to the database. If the item you are
creating is a control item in a data block, you must explicitly set its Database Item property to No.
6. Under the General node, set the Type property to specify the type of item you want.
The default item type is text item. You can change the default by setting the Type property to the item type desired (check box, radio
group, list item, and so on).
7. Under the Physical node, set the Canvas property to the name of the desired canvas.

Note: To display an item at runtime, you must assign each interface item in a form to a canvas.

Modifying the defintion of a data block


Related Topics
To modify the definition of a data block:
In the Object Navigator, click the desired block, and choose Tools Data BlockWizard to invoke a wizard that guides you through the
process of modifying the definition of a data block.

About Forms Runtime Diagnostics


Related Topics
Forms Runtime Diagnostics (FRD) is a runtime event-based logging system designed to help you debug your applications.
When a form is run with FRD enabled, a combination of external user-application interactions and internal Forms processing events
are written in chronological order to a log on the file system. These events can then be analyzed for correctness.
You can collect the following information:
Trigger firing
Built-in execution
Messages
Files opened
Unhandled exceptions
External user events

Using Forms Runtime Diagnostics


Related Topics
To initiate data collection:
Provide the string collect to the runtime argument record as follows:
f60runm module=foo userid=scott/tiger@hockey record=collect
This will create a file in the current working directory with name: collect_<process ID>. In order to choose the name of the file yourself,
provide the string as the value of the log= argument:
f60runm module=foo userid=scott/tiger@hockey record=collect log=myfile

Forms Runtime Diagnostics expected output


Related Topics
The following output for each of the instrumented events can be expected from using Forms Runtime Diagnostics.
Triggers
Place any type of trigger at any level in the object hierarchy. Upon firing, it should be logged as follows:
<trigger_name> Trigger Fired:
Form: <form_name>
Block: <block_name>
Item: <item_name>
The level of the trigger corresponds to the last item in the list. A trigger on Form level, therefore, would have only the form name listed
below the trigger name.
A state delta should be written to the log following a trigger fire. A state delta is a dump of all internal state information that has
changed since the occurrence of the previous state delta. The first state delta will dump the entire forms state to the log.
Built-ins
When a PL/SQL Forms built-in is executed, the diagnostic output should appear as follows:
Executing <built-in name> Built-In:
In Argument 0 -Type: <type> Value: <value>
In Argument 1 -Type: <type> Value: <value>

Out Argument 0 -Type: <type> Value: <value>

Parameter types to be tested include the following: String, Number, Integer, Float, Oracle Number, Date. Out argument 0 generally
represents the function return value.
Messages
Any messages produced by Forms should appear in the log as it was displayed:
Error Message: <message>
File Opens
Files opened are written to the log in the following format:
Opened file: <file_name>
If a file fails to be opened, it should appear in the log as follows:
Failed to open file: <file_name>
Unhandled Exceptions
When an exception is raised that is not caught, it will be logged to the file in the following format:
Unhandled Exception: <exception_name>
If the name is unavailable, FRD will record the exception number for reference:
Unhandled Exception ORA- <exception_number>
Unhandled exceptions should be followed in the log by a state delta.
Runtime External User Events
FRD uses existing runtime mechanisms to log user events. Runtime information written to the log will always be proceeded by a # sign
followed by a number representing the chronological order of the event. For each event, runtime will generally write two information
blocks, the first detailing the event itself and the second representing a state delta.

About the user exit interface


Related Topics
Foreign functions are subprograms written in a 3GL programming language that allow you to customize your Form Builder
applications to meet the unique requirements of your users. Foreign functions are often used to enhance performance or provide
additional functionality to Form Builder.
In Form Builder, you can call a user exit from within a trigger or user-named subprogram using the USER_EXIT built-in. The user exit
must be written to return an integer value status code from the function. The return value of the user exit indicates success, failure, or
fatal error. Following the execution of the USER_EXIT built-in, the values of the error variables in Form Builder—FORM_FAILURE,
FORM_FATAL, and FORM_SUCCESS—are set accordingly.
Special handling is required to make a user exit callable from Forms Runtime. When using a user exits on Microsoft Windows, user
exit functions must be linked into a dynamic link library, and a special configuration library must be updated with information about
each user exit. The configuration file provides information about the user exit interfaces and the entry points that allow Form Builder to
invoke foreign functions from a user exit interface. When using user exits on other platforms, a configuration file must be updated with
information about each user exit, and the compiler version of that file, plus the compiled version of the user exit code, must be linked
into the Forms Runtime executable.
Note: An alternative approach for calling a foreign function is from a PL/SQL interface. The ORA_FFI built-in package provides a
PL/SQL interface for invoking foreign functions from Form Builder.

EXEC SQL statement


Restrictions
An EXEC SQL statement is a SQL command prefixed with "EXEC SQL." EXEC SQL statements allow you to perform any SQL
command in an Oracle Precompiler foreign function. Use EXEC SQL statements to select or manipulate data in the database from a
foreign function.
Syntax
EXEC SQL sql_statement;
where sql_statement is any valid Oracle SQL statement, except for the restricted commands noted in this section.
You need to perform an explicit CONNECT in an Oracle Precompiler foreign function because Form Builder does not establish the
connection automatically, except on UNIX. The Oracle Server does support concurrent connects. For more information, refer to the
Programmer's Guide to the Oracle Precompilers.

EXEC SQL statement restrictions


Using SQL commands in an Oracle Precompiler foreign function has the following restrictions:

Do not issue a SQL COMMIT or ROLLBACK statement from within a foreign function if there are changes in a form that have not
been posted to the database when the foreign function is called.

Do not issue any command that would implicitly cause a database commit, such as a DDL command within a foreign function, if
there are changes in a form that have not been posted to the database when the foreign function is called.

EXEC TOOLS GET statement


Examples Restrictions
An EXEC TOOLS GET statement retrieves a value from Form Builder into an Oracle Precompiler foreign function. Specifically, it
places the value of a Form Builder item or variable into a host language variable. Once the foreign function retrieves a value from
Form Builder, the foreign function can use that value for calculation, manipulation, or updating.
Syntax
EXEC TOOLS GET form_variable_1[, form_variable_2, ...]

INTO :host_variable_1[, :host_variable_2, ...];


where:

form_variable_n Specifies the name of the Form Builder item or variable from which you are reading a value.

host_variable_n Specifies the name of the host language variable into which you are reading a value.
Notes:
The form_variable can be a reference to any of the following items:

a fully-qualified item (block.item)

a form parameter
a Form Builder system variable

a Form Builder global variable

a host language variable (prefixed with a colon) whose value is any of the above choices
Refer to the Programmer's Guide to the Oracle Precompilers for any restrictions on host language variables.

EXEC TOOLS GET statement restrictions


It is not possible to get or set values directly into a record group from a foreign function.

EXEC TOOLS GET statement examples


Example
/*
Example: Read an item name from a block (empblock.empname)

EXEC SQL BEGIN DECLARE SECTION;


char itm_buff[255]; /* buffer for item value */
VARCHAR itm_name[255]; /* Forms item name */
EXEC SQL END DECLARE SECTION;
strcpy(itm_name.arr,"EMBLOCK.EMPNAME");
itm_name.len=strlen("EMBLOCK.EMPNAME");
EXEC TOOLS GET :itm_name
INTO :itm_buff;

EXEC TOOLS SET statement


Examples
An EXEC TOOLS SET statement sends a value from an Oracle Precompiler foreign function to Form Builder. Specifically, it places
the value of a constant or the value of a host language variable into a Form Builder item or variable.
Any value that an EXEC TOOLS SET statement passes to a form item displays after the foreign function returns processing control to
the form that called the foreign function (providing, of course, that the item has the Enabled item property set to Yes).
Syntax
EXEC TOOLS SET form_variable[, ...]

VALUES ({:host_variable | constant}[, ...]);


where:

form_variable Specifies the name of the Form Builder item or variable into which you are reading a value.

host_variable Specifies the name of the host language variable from which you are reading a value.

constant Specifies the constant that you are reading. Do not precede a constant with a colon.
Notes:
The form_variable can be a reference to any of the following items:

a fully-qualified item (block.item)

a form parameter
a Form Builder system variable
a Form Builder global variable

a host language variable (prefixed with a colon) whose value is any of the above choices
Refer to the Programmer's Guide to the Oracle Precompilers for any restrictions on host language variables.
Represent host variables and constants in standard SQL format:

Value Result
:holder1 Inserts the value of the host variable, holder1 (preceded by a semi-colon).
'Summit Sporting Goods' Inserts the constant string value, Summit Sporting Goods (enclosed in single quotes).
413 Inserts the constant numeric value, 413 (no quotes for numeric values).

EXEC TOOLS SET statement examples


Example
/*
Example: Write 'SMITH' into emp.ename

EXEC SQL BEGIN DECLARE SECTION;


char itm_buff[255]; /*buffer for item value */
VARCHAR itm_name[255]; /* Forms item name */
EXEC SQL END DECLARE SECTION;
strcpy(itm_name.arr,"EMP.ENAME");
itm_name.len = strlen("EMP.ENAME");
strcpy(itm_buff,"SMITH");
EXEC TOOLS SET :itm_name
VALUES (:itm_buff);

EXEC TOOLS MESSAGE statement


Examples
An EXEC TOOLS MESSAGE statement displays a message on the Form Builder message line.
Syntax
EXEC TOOLS MESSAGE (message [severity]);
where:

message Specifies the message being passed to Form Builder. The message can be a quoted string or a host language variable.

Severity Specifies the severity level of the message being passed to Form Builder.

EXEC TOOLS MESSAGE statement examples


Example
/*
Example: Error message for text item

EXEC TOOLS MESSAGE


'Incorrect argument: Expecting item name. Please re-enter.';
EXEC TOOLS GET CONTEXT statement
Examples
An EXEC TOOLS GET CONTEXT statement obtains context information (a pointer name) previously saved using EXEC TOOLS
SET CONTEXT and reads it into a foreign function.
Syntax
EXEC TOOLS GET CONTEXT context_name [, ...]

INTO :host_variable_1[, :host_variable_2, ...];


where:

context_name Specifies the name of the context you are saving.

host_variable_n Specifies the name of the host language variable into which you are reading the context value.

Notes:
The context_name can be a reference to one of the following items:
a host language variable (prefixed with a colon)

a constant

EXEC TOOLS GET CONTEXT statement examples


Example
/*
Example: Get previously saved context information

EXEC SQL BEGIN DECLARE SECTION;


char *pctx;
EXEC SQL END DECLARE SECTION;
EXEC TOOLS GET CONTEXT appl_1 INTO :pctx;

EXEC TOOLS SET CONTEXT statement


Examples
An EXEC TOOLS SET CONTEXT statement saves context information from one foreign function for use in subsequent foreign
function invocations. Use EXEC TOOLS SET CONTEXT instead of creating a global variable to hold information. EXEC TOOLS SET
CONTEXT allows you to assign a meaningful text name to a pointer representing a location in memory. You can retrieve the pointer
using EXEC TOOLS GET CONTEXT.
Syntax
EXEC TOOLS SET CONTEXT host_name[, ...]
BY context_name [, ...];
where:

host_name Specifies the host language variable containing the information to be saved.

context_name Specifies the name of the saved context.

Notes:
The context_name can be a reference to one of the following items:

a host language variable (prefixed with a colon)


a constant

EXEC TOOLS SET CONTEXT statement examples


Example
/*
Example: Save context information for later use

EXEC SQL BEGIN DECLARE SECTION;


char my_context[20];
EXEC SQL END DECLARE SECTION;
strcpy(my_context, "context_1");
EXEC TOOLS SET CONTEXT :my_context BY appl_1;

EXEC ORACLE statement


An EXEC ORACLE statement is a statement that is not standard SQL and is used to execute Oracle Precompiler options. For more
information, refer to the Programmer's Guide to the Oracle Precompilers.

Creating a user exit


Example Related Topics
To create a user exit:
1. Write the user exit using one of the host programming languages.
2. Recommendation: Create an Oracle Precompiler foreign function using the C programming language.
3. Create an IAPXTB control structure that registers each user exit
4. Integrate a user exit with Form Builder

About IAPXTB control structures


Related Topics
The IAPXTB control structure is a data structure that contains information regarding all foreign functions that can be invoked from a
user exit. The IAPXTB control structure designates the entry points necessary for linking foreign functions to Form Builder. The
following table describes each column in the IAPXTB control structure:

Column Content
NAME This column specifies a user exit name for a foreign function that can be invoked from a user exit. (This is not necessarily
the name of the file that contains the foreign function or the name of the foreign function that is called.) Note that some
host languages are case sensitive.

FUNCTION This column specifies the name of the foreign function.

TYPE This column specifies the language in which the foreign function is written. Valid values include:XITCC for C, XITCOB for
COBOL, XITFOR for FORTRAN, XITPLI for PL/I, XITPAS for PASCAL, and XITAda for Ada

You must enter one entry in the IAPXTB control structure for every foreign function that can be invoked from a user exit. This is true for
all foreign functions that can be invoked from a user exit, whether a foreign function is in a file that is precompiled and compiled by
itself, or precompiled and compiled with several other foreign functions. You should maintain all foreign functions that can be invoked
from a user exit for a production system in one IAPXTB control structure. It’s a good idea to keep test versions of your foreign
functions in a separate IAPXTB control structure.

Creating an IAPXTB control structure


Examples Related Topics
To create the IAPXTB control structure:
1. Define the IAPXTB data structure.
Make sure you define the data structure with three fields representing the name of the user exit, the name of the foreign function, and
the language used to develop the foreign function.
2. Enter the data for each foreign function.
3. Compile the IAPXTB source file to generate an object code file. Retain the IAPXTB object code file for integrating the user exit
with Form Builder.

About integrating a user exit with Form Builder


Related Topics
Integration of a user exit to Form Builder depends on the operating system and the language used to write the foreign function.
On Microsoft Windows, you create a dynamic link library with foreign function object code files and IAPXTB control structure object
code files. When a foreign function is invoked from a user exit, a dynamic link library loads into memory.
For other environments, you must rebuild the Forms Runtime executable by linking the object code files from the foreign function and
IAPXTB control structure to Form Builder object code files.

Integrating a user exit with Form Builder


Examples Related Topics
To integrate a user exit with Form Builder:
1. Identify the foreign function object code file.
2. Identify the IAPXTB control structure object code file.
3. Link the foreign function object code file and the IAPXTB control structure object code file with either a dynamic link library or
Forms Runtime.

Invoking a foreign function from a user exit


Restrictions Related Topics
After creating a user exit to a foreign function, invoke the foreign function using a user exit interface from Form Builder. To invoke a
foreign function from a user exit, call the USER_EXIT built-in subprogram from a trigger or from a user-named subprogram.
When you invoke a foreign function from a user exit, Form Builder temporarily passes processing control to the foreign function. When
execution of the foreign function is complete, Form Builder regains processing control.
Syntax
USER_EXIT(user_exit_string);

USER_EXIT(user_exit_string, error_string);
The USER_EXIT built-in calls the foreign function named in the user_exit_string.
Parameters

user_exit_string Specifies a user exit name for a foreign function to call from a user exit, including any parameters. Maximum length
of the user_exit_string is 255 characters.

error_string Specifies a user-defined error message that Form Builder displays if the call to the foreign function fails. Maximum length
of the error_string is 255 characters.

Invoking a foreign function from a user exit restrictions


The user exit name that represents a foreign function (in the user_exit_string of the USER_EXIT built-in subprogram) must follow the
rules of your operating system and host language. Be aware that these rules might include case sensitivity. Also note that only one
foreign function can be invoked per USER_EXIT built-in call.

Passing parameter values to a foreign function using USER_EXIT


Related Topics
You can pass parameters to a foreign function that is invoked from a user exit by defining user_exit_string and error_string in the
USER_EXIT built-in subprogram.
When you define user_exit_string and error_string in Form Builder, the foreign function recognizes the values as corresponding to a
command line value and an error message value. For instance, Form Builder treats the value of user_exit_string as a string variable.
The value of user_exit_string is the command line to a foreign function.
The following are foreign function parameters and their corresponding Form Builder definitions for each foreign function invoked from
a user exit:

Foreign Function Form Builder Definition


Parameter
Command Line user_exit_string.
Command Line Length length (in characters) of user_exit_string.
Error Message error_string.
Error Message Length length (in characters) of error_string.
In-Query a boolean value that reflects whether the foreign function was invoked from a user exit when the form was
in Enter Query mode.

Although Form Builder automatically invokes the foreign function from the user_exit_string, Form Builder does not automatically parse
the user_exit_string. It is the responsibility of the foreign function to parse the user_exit_string.
You can pass any number of parameters to a foreign function from the user_exit_string of the USER_EXIT built-in. Use this feature to
pass information such as item names. For example, to pass two parameters, PARAM1 and PARAM2, to the CALCULATE_VALUES
foreign function, you specify the following statement:
User_Exit('CALCULATE_VALUES PARAM1 PARAM2');

Returning a value from a foreign function using USER_EXIT


Related Topics
When the execution of the Form Builder USER_EXIT built-in subprogram is complete, an integer value is returned to Form Builder.
This integer value indicates whether the USER_EXIT built-in subprogram executed with success, failure, or a fatal error. (For example,
if you are creating a foreign function in C, Form Builder provides the constants in a ".h" file.)
Error variables in Form Builder—FORM_FAILURE, FORM_FATAL, and FORM_SUCCESS—are set according to the value that is
returned from the USER_EXIT built-in subprogram. You can query the error variables to determine the success or failure of the
execution of the USER_EXIT built-in subprogram just as you would for any built-in subprogram. The trigger that calls the USER_EXIT
built-in subprogram determines how to handle the return condition.
For example, you might want to check the value of FORM_SUCCESS after executing a foreign function from a user exit:
User_Exit('my_exit');
IF NOT Form_Success THEN
/* handle the error */
END IF;

About writing a user exit on Microsoft Windows


Related Topics
On Microsoft Windows, a foreign function that can be invoked from a user exit is contained in a dynamic link library(DLL). A DLL is a
library that loads into memory only when the contained code is invoked, and a DLL can be shared by multiple applications. Before
proceeding, you should be familiar with the procedure for building DLLs, as described in your compiler manual.
Note: Some C runtime functions are not available in .DLL files. For more information, refer to your compiler documentation.
The following is an example of creating and invoking a foreign function from a user exit. This example uses the UE_SAMP.MAK
project file.

Writing a user exit on Microsoft Windows


Related Topics
To create a foreign function that can be invoked from a user exit on Microsoft Windows:
1. Write a foreign function using Pro*C and Oracle precompiler statements to access the database.
For example, create a text file called UEXIT.PC, then add the following text:
/* UEXIT.PC file */
/* This foreign function adds an ID column to the EMP table. */
#ifndef UE
#include "ue.h"
#endif
#ifndef _WINDLL
#define SQLCA_STORAGE_CLASS extern
#endif
EXEC SQL INCLUDE sqlca.h
oid AddColumn() {
EXEC SQL alter table EMP add ID varchar(9);
}
2. Precompile the foreign function with an Oracle precompiler (Pro*C precompiler).
For example, use Pro*C to precompile the UEXIT.PC file. When you precompile UEXIT.PC, Pro*C creates a C file called UEXIT.C.
3. Create your header files.
Your header file must define your foreign function. For example, modify the sample header file, UE.H, by adding the following text:
extern void AddColumn();
4. Compile UEXIT.C to generate a foreign function object code file. Be sure to specify the large memory model on your compiler.
5. Create the IAPXTB control structure.
Modify the file UE_XTB.C file by including the UEXIT.H file and adding the user exit name, foreign function name, and language type.
Follow the example in the UE_XTB.C file. In this case, the following entry is added to the file:
Add_ID_Column, AddColumn, XITCC
6. Modify any required foreign function integration files.
Modify the UE_SAMP.DEF file by adding export statements to include the AddColumn foreign function. Follow the examples in the
UE_SAMP.DEF file.
7. Build a DLL for use with Forms Runtime.
With the exception of UEXIT.C, the following files should already be included in the UE_SAMP.MAK project file:
\orawin95\forms\userexit\uez.obj
\orawin95\forms\userexit\osswep.obj
\orawin95\forms\userexit\ue_samp.def
\orawin95\forms\userexit\ue_xtb.c
\orawin95\forms\userexit\uexit.c
The UE_SAMP.MAK project is set up to link the following files:
LIBC.LIB
OLDNAMES
\orawin95\forms60\userexit\f60r.LIB
\orawin95\pro20\userexit\sqllib18.lib
\orawin95\pro20\userexit\sqxlib18.lib
After building the UE_SAMP.MAK project, the result is a DLL named UE_SAMP.DLL. Add the UE_SAMP.DLL entry to the list of
DLLs defined by the FORMS60_USEREXITS parameter in the registry.
Alternatively, you can rename UE_SAMP.DLL to F60XTB32.DLL, backup the F60XTB32.DLL in the c:\orawin95\bin directory, and
copy the new F60XTB32.DLL to the c:\orawin95\bin directory.
8. Make sure you include the name of the DLL in the FORMS60_USEREXITS variable in the registry, or rename the DLL to
F60XTB32.DLL. If you rename the DLL to F60XTB32.DLL, replace the existing F60XTB32.DLL in the \ORAWIN95\BIN directory with
the new F60XTB32.DLL.
9. Invoke the foreign function from a user exit in Form Builder.
In this case, a When-Button-Pressed Trigger calls the foreign function from a user exit. The following statement demonstrates how to
invoke the AddColumn foreign function by specifying the user exit name Add_ID_Column in the USER_EXIT built-in subprogram:
/* Trigger: When-Button-Pressed */
USER_EXIT('Add_ID_Column');

Microsoft Windows user exit interface files


Related Topics
During the installation of Form Builder for Windows, a group of files related to the user exit interface (with the exception of
F60XTB32.DLL) are copied to the \ORAWIN95\FORMS60\USEREXIT directory. You may not require all of the files contained in this
directory. All foreign functions that can be invoked from a user exit interface from Form Builder for Windows must be contained in a
DLL.

F60XTB32.DLL is the default file containing foreign functions that can be invoked from a user exit interface. This file is a DLL that
ships with Form Builder, and does not initially contain user-defined foreign functions. This file is placed in the
\ORAWIN95\BIN directory during installation. When you create new foreign functions, replace the existing
F60XTB32.DLL file with a new F60XTB32.DLL.

To assist you in creating the IAPXTB control structure, Form Builder provides you with two IAPXTB control structure source files,
UE_XTB.C and UE_XTBN.C. Each file serves as a template for creating an IAPXTB control structure. Modify a IAPXTB control
structure source file to include the foreign functions you define. Include the appropriate file in your project. You only need one of the two
source files to create the IAPXTB control structure.

UE_XTB.C is a file that contains an example of an entry for the IAPXTB control structure. Modify this file and add your foreign
function entries. This is the file that is in the UE_SAMP.MAK project file.
UE_XTBN.C is a file that contains an empty IAPXTB control structure. Add your foreign function entries to create an IAPXTB control
structure. This is the file that is in the UE_XTBN.MAK project file.

The following files are project files that contain all the required files to create a DLL containing foreign functions that you can invoke
from a user exit interface in Form Builder.

UE_SAMP.MAK is a project file that includes the IAPXTB control structure from the UE_XTB.C file. Building this project generates
UE_SAMP.DLL. You can rename the DLL from UE_SAMP.DLL to F60XTB32.DLL and replace the existing
F60XTB32.DLL in the \ORAWIN95\BIN directory, or you can add UE_SAMP.DLL to the list of DLLs defined by the
FORMS60_USEREXITS parameter in the registry.
UE_XTBN.MAK is a project file that includes the IAPXTB control structure from the UE_XTBN.C file. Building this project generates
UE_XTBN.DLL. This is the project file that is used to generate the initial F60XTB32.DLL that resides in the
\ORAWIN95\BIN directory. You can rename the DLL from UE_XTBN.DLL to F60XTB32.DLL and replace the
existing F60XTB32.DLL in the \ORAWIN95\BIN directory, or you can add UE_XTBN.DLL to the list of DLLs defined
by the FORMS60_USEREXITS parameter in the registry.

In addition to your foreign function object code files and an IAPXTB control structure object code file, you need the following files in
your project file to generate a user exit interface DLL (These files are included in UE_SAMP.MAK and UE_XTBN.MAK):

UE_SAMP.DEF contains definitions you need to build your own DLL.


OSSWEP.OBJ is the Dynamic Link Library Windows Entry Point .OBJ file you need to build your own DLL. (You may replace
OSSWEP.OBJ with an .OBJ file of your own.)
UEZ.OBJ is an .OBJ file that you link to your own .OBJ files.

Compiling Microsoft Windows foreign functions


Related Topics
When compiling your foreign functions, be sure to specify the large memory model. Refer to your Microsoft Windows compiler
documentation for additional information, such as restrictions on building a Microsoft Windows DLL, and the use of #define
statements. (Your foreign function code may need to include the UE.H file to access typedefs and #define statements.)

Creating the IAPXTB control structure for Microsoft Windows


Related Topics
Create the IAPXTB control structure by using the UE_XTB.C or the UE_XTBN.C file as a template. Alternatively, create your own
IAPXTB control structure in a self-defined file.
Note: On Microsoft Windows, an IAPXTB control structure is required for building each DLL that contains foreign functions that can be
invoked from a user exit. Include only those entries in the IAPXTB control structure used for corresponding foreign functions that are
contained in a DLL.
The following is an excerpt from a slightly modified UE_XTB.C file:
extern exitr iapxtb[] = { /* Holds exit routine pointers */
"UE_Name", UE_Funct, XITCC,
"USEREXECSQL", uxsql, XITCC,
(char *)0, 0, 0 /* zero entry marks the end */
} /* end iapxtb */
The file includes the user exit name UE_Name. In this example, the following line was added to the original UE_XTB.C file:
"UE_Name", UE_Funct, XITCC,

UE_Name is the user exit name for use by the USER_EXIT built-in subprogram to invoke the foreign function from Form Builder.
UE_Funct is the name of the foreign function that temporarily takes over processing control from Form Builder.
XITCC specifies the C programming language that is used to develop the foreign function.

About building a Microsoft Windows dynamic link library


Related Topics
Two project files, UE_SAMP.MAK and UE_XTBN.MAK, are guides to help you create a DLL containing foreign functions that can be
invoked from a user exit.
You also have the option of defining your own project file. When creating your own project file, remember to include a IAPXTB control
structure object code file, the foreign function object code files, and the required files for integrating foreign functions that can be
invoked from a user exit in Form Builder.
One of the required files for integrating foreign functions with Form Builder is the UE_SAMP.DEF file. Use the UE_SAMP.DEF file to
export foreign functions. Some export statements for Form Builder already exist. Do not modify the existing export statements,
because the functions are used by Form Builder to access user exits.
The UE_SAMP.MAK project file is used here as an example. In addition to the object code files containing your foreign functions,
UE_SAMP.MAK includes the following files:
\orawin95\forms60\userexit\uez.obj
\orawin95\forms60\userexit\osswep.obj
\orawin95\forms50\userexit\f60xtb.def
\orawin95\forms60\userexit\ue_xtb.c
You must also link the following files:
LDLLCEW.LIB
LIBW.LIB
OLDNAMES
\orawin95\forms60\userexit\F60R.LIB
If you are creating an Oracle Precompiler foreign function, you must link the following libraries:
\orawin95\forms60\userexit\sql18win.lib
\orawin95\forms60\userexit\sqx18win.lib
You create UE_SAMP.DLL after building the UE_SAMP.MAK project file. You can rename UE_SAMP.DLL to F60XTB32.DLL, make
a backup copy of F60XTB32.DLL located in \ORAWIN95\BIN, and replace the existing F60XTB32.DLL with the new F60XTB32.DLL.
Alternatively, you can add UE_SAMP.DLL to the list of DLLs defined by the FORMS60_USEREXITS parameter in the registry.

Defining foreign functions in multiple dynamic link libraries


Foreign functions developed for use in Form Builder for Windows are contained in DLLs. Form Builder establishes a single DLL,
F60XTB32.DLL, for containing foreign functions. F60XTB32.DLL is the default DLL for containing foreign functions. Multiple foreign
functions can be contained in a single DLL.
Using a single DLL that contains all foreign functions can cause conflicts, especially when two programs try to access the same DLL.
To alleviate dynamic library conflicts, Form Builder supports multiple user exit DLLs; foreign functions can be contained in multiple
DLLs without restrictions on the name of the DLL.
FORMS60_USEREXITS parameter The FORMS60_USEREXITS parameter in the registry allows you to define multiple DLLs to
contain foreign functions that can be invoked from a user exit. The FORMS60_USEREXITS parameter includes a semicolon
delimited list of user exit DLLs.
This is an example of defining multiple user exit DLLs
FORMS60_USEREXITS = C:\mathlib\add.dll;C:\mathlib\mult.dll;
A DLL loads into memory when any one of the foreign functions it contains is invoked from the user exit. Although the
FORMS60_USEREXITS parameter can list many DLLs that each contain multiple user exit foreign functions, only one such DLL is in
memory at any time.
Form Builder determines the foreign function to invoke from a user exit using the following criteria:
If the FORMS60_USEREXITS parameter does not exist in the registry, foreign functions must be contained in a single user exit DLL
named F60XTB32.DLL and located in the \ORAWIN95\BIN directory.
If the FORMS60_USEREXITS parameter exists in the registry and there are multiple user exit DLLs define, the first occurrence of
the foreign function in the list of DLLs is invoked.
If there are multiple user exit DLLs that contain non-unique foreign function names, the non-unique function name that is invoked is
the first occurrence of function that follows the content in the user exit cache memory.
NOTE: To avoid calling an unexpected foreign function, do not use the same foreign function name more than once in any of your user
exit DLLs. An example of a non-unique function name is when two different functions have the same name, but are contained in
different user exit DLLs.
User Exit Cache Memory Form Builder deals with non-unique function names by maintaining a user exit cache memory. Exiting a
form clears the user exit cache memory, otherwise the user exit cache memory retains the last called foreign function in memory until
you call another foreign function.
Invoking a foreign function that has a non-unique function name depends on what is in the user exit cache memory. The first
occurrence of a foreign function with a non-unique function name that follows the foreign function in the user exit cache memory is
invoked.
If the user exit cache memory is empty, the first occurrence of a function with the non-unique function name in the list of DLLs is
invoked. Because the cache memory is not cleared until you exit a form, subsequent calls to a non-unique function name may result in
an unexpected foreign function call. For instance, you may accidentally call a function that follows a function with a unique name as
opposed to calling a function that appears earlier in the sequence of user exit DLLs. Although in many cases, the user exit cache
memory correctly identifies foreign functions with non-unique names, you should use unique foreign function names in the list of DLLs
that are members of the FORMS60_USEREXITS variable whenever possible.

Accessing the Microsoft Windows SDK from a User Exit


Related Topics
You can invoke Microsoft Windows SDK functions from a user exit. Invoking Microsoft Windows SDK functions is similar to invoking
user-defined foreign functions from a user exit on Microsoft Windows. Instead of including the object code files of your user-defined
foreign function when building a dynamic link library, you must include the source files of the Microsoft Windows SDK function.
Parameter values for Microsoft Windows SDK functions can be passed to or received from Form Builder like other foreign functions.
For Microsoft Windows SDK functions that require a window handle parameter, you can obtain the window handle from Form Builder
using the GET_ITEM_PROPERTY function to examine the Window_Handle property. A window handle is a unique internal character
constant that is used to refer to objects.
There are many reasons for accessing the Microsoft Windows SDK. For example, by obtaining a window handle from Form Builder,
you can invoke Microsoft Windows SDK functions to externally modify the properties of objects in your Form Builder applications. The
following is an example of calling the Microsoft Windows SDK function GetWindowRect from a Form Builder trigger or user-defined
subprogram:
:block1.item_handle := get_item_property('block1.item1',Window_Handle);
USER_EXIT(GetWinRec || :block1.item_handle,'error_message');

VBX Controls
Form Builder for Microsoft Windows provides support for VBX controls. This chapter includes the following topics:
About VBX Controls 13 - 569
VBX Controls in Form Builder 13 - 570

VBX Controls in the Form Builder 13 - 572

VBX Controls in Form Builder at Runtime 13 - 574


Creating a VBX Control in Form Builder 13 - 582

About VBX Controls


VBX controls provide a simple method of building and enhancing user interfaces. VBX controls are only supported on Microsoft
Windows 3.x (16-bit). The controls can be used to obtain user input and display program output. VBX controls were originally
developed as extensions for the Microsoft Visual Basic environment, and include such items as sliders, grids, and knobs.
VBX controls are a special type of dynamic link library distributed on files with the .VBX extension. A single VBX file can contain many
different VBX controls, and each VBX control is defined by a set of properties, events, methods, and error messages. Refer to the
documentation that accompanies your VBX control for more information on properties, events, methods, and error messages.
Although you can develop your own VBX controls for use in Form Builder, developing VBX controls requires a significant amount of
effort. The procedure for developing VBX controls is documented in the Microsoft Visual Basic Professional Edition Manuals.
However, it is recommended that you use VBX controls developed by third party vendors.

VBX Controls in Form Builder


Related Topics
A VBX control is an item in Form Builder. Like other Form Builder items, VBX controls serve as a way to represent and manipulate
data that displays on a form. VBX controls can be datasource items or control items.
You can interchange a VBX control with other Form Builder items without affecting the intended use for the item. A text item in Form
Builder displays data from the database on a form. A VBX control can accomplish the same task. For example, a text item displaying
the number 10 can be depicted by a VBX control that is a knob. Both items can reflect changes in the data from the database. When
the number 10 changes to the number 5, the number 5 appears in the text item on the form, and the knob control redirects its position
to represent the number 5.
A VBX control, like some Form Builder items, can also be used to input data. An item on a form can require the entry of a number in
the range from 1 to 10. Using a drop-down list, you can display the choices on a list for selection. Similarly, a VBX control that is a
knob can be used to provide choices by turning the knob. Instead of the choices appearing in the drop-down list, the choices are
depicted by the position of the knob.
VBX controls can be used in place of Form Builder items when any of the following conditions are met:
A VBX control is the best representation for your data in Form Builder.

A VBX control is the best method of data input into Form Builder.

You want a simple method of enhancing the user interface to build professional Form Builder applications.
The Value of a VBX Control
Like other items in Form Builder, a VBX control can store values such as the number 10 or the character string 'BLUE'. The value of a
VBX control is derived from the item property, VBX Control Value Property. Form Builder uses the setting of the VBX Control Value
Property for database querying and setting. Use standard PL/SQL bind variable syntax to set the value of a VBX control.
The value of the VBX Control Value Property can be any one of the control's scalar-valued properties. Many scalar-valued properties
can exist for any single VBX control, but not all the properties make sense as the VBX Control Value Property for a control's intended
use.
Form Builder sets the VBX Control Value Property after a VBX control name is specified. In many cases, a VBX control has a default
property that denotes the value of the control. If there exists a default property that denotes the value of the control, the default property
is set to the VBX Control Value Property.
For example, the knob VBX control has a property called Value Current which is the default property that denotes the value of the
knob control. After selecting to use the knob control, the VBX Control Value Property is set to the knob control property, Value Current.
Other properties of the knob control, such as Value Initial, Value Maximum, and Value Minimum, are valid values to assign to the
VBX Control Value Property. However, these VBX control properties may not provide meaningful data as the VBX Control Value
Property.
As previously illustrated, the VBX control that is a knob can be used to represent a number in a range of values. If you expect the knob
control to represent the current value, Value Current is the appropriate setting for the VBX Control Value Property. In this scenario, if
the VBX Control Value Property is set to the knob control property Value Minimum, the knob always represents the minimum value in
the range. Although the Value Minimum knob control property is a valid setting for the VBX Control Value Property, it is not meaningful
in this particular instance.
You can set the VBX Control Value Property from Form Builder. In addition, you can programmatically get and set the VBX Control
Value Property by using the VBX.GET_VALUE_PROPERTY and VBX.SET_VALUE_PROPERTY built-in subprograms from the VBX
package in Form Builder.

About VBX control properties


Related Topics
VBX control properties are the properties that are part of a VBX control definition. VBX control properties vary with each VBX control,
although some properties are common to several VBX controls. For information about the properties of a particular VBX control, refer
to the documentation for the specific VBX control.
Use the Form Builder to create a VBX control for use with Form Builder. From the Form Builder, you can see both the Form Builder
VBX control properties and VBX control properties.
Form Builder VBX control properties are listed in the Functional section of the Property Palette. Form Builder VBX control properties
include VBX Control File, VBX Control Name, and VBX Control Value Property.

VBX Controls in Form Builder at Runtime


Examples Related Topics
VBX controls raise events in response to runtime interaction. VBX events can also be raised explicitly in PL/SQL to cause a particular
course of action. For example, you can explicitly raise the VBX ClickIn event of the knob VBX control.
Because VBX controls are defined with a set of properties, events, and methods, you can determine the behavior of a VBX control in
a Form Builder application. Interact with a VBX control in Form Builder by doing any of the following:
respond to VBX control events

fire VBX control events

get VBX control properties


set VBX control properties

invoke VBX control methods


You can define the course of action that takes place following any VBX control event, for instance, to increase a value in a field on a
form when the spin button VBX control spins upward. Similarly, you can decrease a value in a field on a form when the spin button
spins downward. You respond to the events raised by the spin button VBX control to detect whether a spin button spins upward or
downward and perform the appropriate action. In this case, the spin button VBX control raises a SpinUp event when a button spins
upward and a SpinDown event when a button spins downward. Events vary among VBX controls. For information about the events of
a particular VBX control, refer to the documentation for the specific VBX control.

Capturing a VBX control event


Examples Related Topics
To capture a VBX control event:
1. Create a VBX control.
2. Create a When-Custom-Item-Event trigger attached to the VBX control item.
3. In the When-Custom-Item-Event trigger, read the value of the system variable SYSTEM.CUSTOM_ITEM_EVENT to determine
the case-sensitive name of the event that fires the trigger.

Capturing a VBX control event example


Example
/*
TRIGGER: When-Custom-Item-Event
** ITEM: SpinButton VBX Control
** EXAMPLE: Capture events and determine course of action
*/
IF :System.Custom_Item_Event = 'SpinDown' THEN
:QTY := :QTY - 1;
ELSE
IF :System.Custom_Item_Event = 'SpinUp' THEN
:QTY := :QTY + 1;
END IF;
END IF:

Creating a VBX Control


Related Topics
To create a VBX control:
1. In the Form Editor tool palette, click the VBX control tool.
2. Locate and size the VBX control container on the canvas.
3. Double-click on the VBX control container to open the Property Palette
4. Specify the VBX control file name in the VBX Control File property or double-click on the VBX Control File property to browse
the file system for .VBX files.
5. Specify the VBX control name in the VBX Control Name field of the Property Palette. Double-click on the VBX Control Name
field for a listing of valid VBX controls. You must explicitly select a VBX control name even if the VBX control file contains a
single VBX control.
6. Once you have defined the VBX control, associate a trigger to the VBX control by creating a VBX control item-level When-
Custom-Item-Event trigger. Provide the appropriate built-in or user-defined program code in the trigger to suit your needs.

Deploying Forms on the Web


Deploying Forms Applications to the Web with Forms Server Release 6i provides both conceptual and reference
information to help you deploy your new and existing Forms applications on the Web. Documentation specific to
deploying Forms applications on the Web is found here.

Introducing windows and canvases


When you build a form, you use windows and canvases to present the visual elements of a form (i.e., interface items and
boilerplate objects) to end users. A single form can include any number of windows and canvases.
The Relationship Between Windows and Canvases For each window you create, you also must create at least one
canvas; similarly, each canvas you create must be assigned to a window. At runtime, windows and canvases are
displayed and closed in response to navigation events and programmatic control.
To define the relationships between interface items, canvases, and windows, you must set a variety of their properties.
For example, each interface item (text item, check box, etc.) has a Canvas property that specifies the canvas on which the
item is displayed. (Note that when you create an item in the Layout Editor, Form Builder sets this property for you
automatically, depending on the current canvas.) Similarly, each canvas has a Window property that specifies the window
in which it is displayed.

What is a window?
Related Topics
A window is a container for all visual objects that make up a Form Builder application, including canvases. A single form
can include any number of windows. While every new form automatically includes a default window named WINDOW1,
you can create additional windows as needed by inserting them under the Windows node in the Object Navigator.
By itself, the window object is an empty frame. The frame provides a title bar and handles for interacting with the window,
making it possible for end users to scroll, move, and resize the window.
A windows typically contains a canvas with navigable items, and thus is invoked at runtime in response to navigation to
items on that canvas. Windows also can be displayed and closed programmatically, independent of any item navigation
events. At runtime, when a window is displayed programmatically, or when navigation occurs to an item on a canvas
assigned to that window, Form Builder displays the window with the appropriate canvas background.
To define the appearance and functionality of the windows you create, you can specify numerous window properties,
including size, display position, and title. You also can get (examine) and set most properties programmatically at runtime.
Finally, you can dynamically show and hide windows as required.

About window types


Related Topics
When you create a window, you specify its type by setting the Window Style property.
There are two window styles:

Document

Dialog
Document Windows Document windows typically display the main canvases and work areas of your application where
most data entry, and data retrieval is performed.
Dialog Windows Dialog windows are free-floating, containers typically used for modal dialogs that require immediate user
interaction.

What is a canvas?
A canvas is a surface--inside a window container--on which you place the interface items and boilerplate objects that end
users interact with when they run the form. By default, any canvas you create at runtime is assigned to the window
named WINDOW1. To explicitly associate a canvas to a specfic window, set the canvas' Window property accordingly.

About canvas types


Related Topics
Form Builder provides four types of canvases, all of which can be displayed in the same window at runtime. A canvas'
type defines how Form Builder will display it in the window to which it is assigned. When you create a canvas, you specify
its type by setting the Canvas Type property. The four canvas types are:

Content
Stacked

Tab

Toolbar
Content Canvas The most common canvas type is the content canvas (the default type). A content canvas is the "base"
view that occupies the entire content pane of the window in which it is displayed. You must define at least one content
canvas for each window you create.
Stacked Canvas A stacked canvas is displayed atop—or stacked on—the content canvas assigned to the current window.
Stacked canvases obscure some part of the underlying content canvas, and often are shown and hidden
programmatically. You can display more than one stacked canvas in a window at the same time.
Tab Canvas A tab canvas—made up of one or more tab pages—allows you to group and display a large amount of related
information on a single dynamic Form Builder canvas object. Like stacked canvases, tab canvases are displayed on top of
a content canvas, partly obscuring it. Tab pages (that collectively comprise the tab canvas) each display a subset of the
information displayed on the entire tab canvas.
Toolbar Canvas A toolbar canvas often is used to create toolbars for individual windows. You can create two types of
toolbar canvases: horizontal or vertical. Horizontal toolbar canvases are displayed at the top of a window, just under its
menu bar, while vertical toolbars are displayed along the far left edge of a window.

About views
Related Topics
When you work with canvases in Form Builder, the relationship between a canvas and its view is a fundamental concept.
Think of the view as a rectangle positioned over the canvas; the area of the canvas visible within the view is what end
users see when the canvas is displayed at runtime.
Modifying the View Size and Position For a stacked canvas, you can specify the size of the view at design time by setting
the View Width and View Height properties. For a content, tab or toolbar canvas, these properties are ignored because the
view size is determined by the size of the window itself. Changing the size of the window at runtime (e.g., resizing it with
the mouse) effectively changes the size of the view for that window's content canvas.
For any type of canvas, you can set properties that specify the view's point of origin on the canvas; that is, to position the
view rectangle at a specific location on its canvas. Moving the view, like resizing the view, changes the part of the canvas
that end users see in the window at runtime. When a content canvas is larger than its view (that is, larger than its
window), the window can be scrolled to change the position of the view on the canvas, thus making a different part of the
canvas visible.

About MDI and SDI windows


Related Topics
Form Builder fully supports both the Microsoft Windows MDI (Multiple Document Interface) and SDI (Single Document
Interface) systems of window management.
Multiple Document Interface
MDI applications display a default parent window, called the application window. All other windows in the application are
either document windows or dialog windows.
Document windows always are displayed within the MDI application window frame. If the end user resizes the MDI
window so it is smaller than a document window, the document window is clipped. end users can maximize a document
window so that it occupies the entire content area of the application window. Dialog windows are free-floating, and the
end user can move them outside the application window if they are defined as movable. If the end user resizes the MDI
window to make it smaller than a dialog window, the dialog window is not clipped.
The MDI application window is created by the window manager at runtime, and does not appear in a form's list of
windows. However, you can use the SET_WINDOW_PROPERTY built-in to resize, minimize, and maximize the MDI
window programmatically.
Single Document Interface
Although MDI is the default system of window management during Forms Runtime, Form Builder also provides support
for an SDI root window on Microsoft Windows.
You can set the system of window management to SDI by specifying the USESDI command line option. When SDI is
enabled, calls to the FORMS_MDI_WINDOW constant returns NULL for the MDI window handle. There is no multiple
interface root window, MDI toolbars exist in parent windows, and MDI menus are attached to each window.

About the root window


Note: the concept of a root window is no longer used in Form Builder Release 5 and later. However, for purposes of
forward compatibility, the name ROOT_WINDOW, the associated properties and built-ins, and the root window behavior
are still supported.
A root window displays the console for the currently-active form in your application. Creating a root window in a form is
optional, and is used most often in multiple-form applications (which are designed to run several form modules
simultaneously).
A root window has special characteristics. In a multiple-form application, using a root window allows you to have a single
window that always displays the console for the currently-active form. This is an advantage only on platforms other than
Microsoft Windows, since on Microsoft Windows the console always appears on the MDI application window.
At runtime, only one root window can be displayed at a time. When several forms, each of which has a root window, are
running at the same time, the result is a single root window that displays the console for whichever form is currently the
active form in the application.
In addition to displaying the active form's console, the root window in a multiple-form application also displays the current
form's current content canvas. As the end user navigates between open forms, the background area of the root window
updates to display the canvas that is assigned to the root window in the currently active form.
In a multiple-form application, the fact that there can be only one root window displayed at a time also affects the behavior
of forms that invoke other forms by executing the OPEN_FORM or CALL_FORM built-ins. If both the called form and the
calling form have a root window, and the first navigable item in the called form is on a canvas assigned to the root
window, then executing OPEN_FORM or CALL_FORM causes the called form to take over the root window from the
calling form.
Creating a Root Window You create a root window by creating a default window and giving it the name ROOT_WINDOW.
For non-Microsoft Windows forms, you indicate the window on which you want the console to display by setting the
Console Window form property. In a multiple-form application, you can create a root window in each form, and assign the
console to it by setting the Console Window property to ROOT_WINDOW.
Due to the root window's unique characteristics, some of its properties have fixed settings. Overriding these settings in
the Form Builder has no effect on the window's runtime behavior. The properties (and their default settings) are as
follows:

Closeable (Yes)

Fixed Size (No)


Iconifiable (Yes)

Inherit Menu (Yes)

Movable (Yes)
Name

Remove on Exit (No)

Style (Document)
Vertical/Horizontal Scroll Bar (No)

Zoomable (Yes)
Displaying the Root Window Form Builder displays the root window at form startup, and it remains displayed throughout
the session. This is true even if the root window does not contain navigable items or even any canvases. For example, an
application might use the root window only as a menu bar that displays the Form Builder status and message lines, and
then use secondary windows to display the main application canvases.

About the console


Related Topics
The console includes the status line and message line, and is displayed at the bottom of the window to which it is
assigned.
On Microsoft Windows, the console is displayed on the MDI application window by default; you cannot display it on
individual document or dialog windows in the form. To hide the console, set the form-level property Console Window to
NULL.
On non-Windows platforms, you can display the console in one window only, and you cannot change the console
assignment at runtime. To display the console in a window, set the form-level property Console Window to the appropriate
window. To hide the console, set the form property Console Window to NULL.

About window modality


Related Topics
A window can be either modeless or modal. A modal window (often a dialog) requires the end user to respond before
continuing to work in the current application. A modeless window requires no such response. When you create a window,
you specify its modality by setting the Modal property to Yes or No. The default is No (modeless).
Modeless Windows You can display multiple modeless windows at the same time, and end users can navigate freely
among them (provided your application logic allows it). On most GUI platforms, you can layer modeless windows so that
they appear either in front of or behind other windows.
Modeless windows remain displayed until they are dismissed by the end user or hidden programmatically. You can set the
Hide on Exit property for a modeless window to specify whether it should remain displayed when the end user navigates
to another window. You also can set the properties of a modeless window to specify its border and title, and whether end
users should be allowed to scroll, resize, move, close, iconify, and zoom the window.
Modal Windows Modal windows are usually used as dialogs, and have restricted functionality compared to modeless
windows. On some platforms, for example, end users cannot resize, scroll, or iconify a modal window. Modal windows are
often displayed with a platform-specific border unique to modal windows. On some platforms, modal windows are
"always-on-top" windows that cannot be layered behind modeless windows.
In addition to platform-specific restrictions, modal windows have the following characteristics:
The Hide on Exit property does not apply to modal windows. By default, Form Builder prevents end users from
navigating out of modal windows with the mouse, but does allow them to navigate to another window with keyboard
commands. When such navigation occurs, Form Builder always closes the modal window, unless the target window is
itself a modal window.

Modal dialog windows cannot have scroll bars, thus setting the Scroll Bar properties has no effect. (Modal non-dialog
windows, however, can have scroll bars.)
System-level vs. Application-level Modality On some platforms, modal windows are modal only with respect to other
windows in the same application. That is, when Form Builder displays a modal window, the end user is still allowed to
work in windows owned by other applications.
On other platforms, modal windows are modal with respect to the entire system, and must be dismissed before end users
can send input to windows that belong to other applications.

About scrolling windows


A scrolling window allows an end user to use scroll bars to scroll the content canvas currently displayed in that window.
Conceptually, think of scrolling as moving the content canvas to change the X,Y coordinates of the view's point of origin,
thereby revealing a different part of that canvas. Note that scrolling does not change the size of the view, merely its
location on the canvas.
A window can be scrolled horizontally only when its display width is less than the width of the content canvas currently
displayed in the window. Similarly, it can be scrolled vertically only when its height is less than the height of its current
content canvas. (Remember that end users can change the size of a window at runtime.)
When a window is the same size as or larger than its current content canvas, scrolling has no effect since no portion of
the canvas is outside the current view (that is, outside the window itself).
The scroll bars on a window scroll only the window's content canvas; however, any stacked canvases displayed in the
window will move up/down and left/right as if they were part of the content canvas. (You can also define scroll bars on
stacked canvases, but these are independent of the window's scroll bars.)

Creating a window
Related Topics
To create a window:
1. In the Object Navigator, click the Windows node.

2. Click the Create button in the toolbar.


Form Builder creates a window, and gives it a default name, such as WINDOW3.
3. Double-click the window's object icon.
4. In the Property Palette, set the window properties as desired.
The properties under the Functional and Physical nodes control the window's appearance and functionality at runtime.
Some window managers may not support all of these properties.
Note: You must assign at least one content canvas to every window you create. To assign a canvas to a window, set the
canvas' Window property to the appropriate window.

Creating a scrolling window


To create a scrolling window:
1. Create a window and set its properties as follows:
Width/Height The initial display size. (Remember that end users can resize a window at runtime if you allow them to.)
Modal No. (A modal window cannot be scrollable.)
H/V Scroll Bar Yes, for one or both. (Controls the direction in which end users should be able to scroll the window.)
2. Create a canvas for the window and set its properties as follows:
Canvas Type Content.
Width/Height Set so the canvas is larger than its window.
Window The name of the window you created in Step 1.
View H/V Scroll Bar Ignore. (These properties apply only to a stacked canvas.)

Associating an icon with a window


Related Topics
On GUI platforms, end users can iconify, or minimize, a modeless window so that it is represented on the screen by only a
bitmap icon. Once iconified, the end user can redisplay the window by double-clicking the icon.
To create an iconifiable window, you must associate the window with an icon resource file that exists in your runtime
operating system. To do so, set the following window properties:
Minimize Allowed Yes.
Icon Filename Name of the bitmap icon file. (Form Builder searches for this file in your system's default resource path.)
Minimized Title Text that displays with the icon at runtime. (If you do not specify a title, some window managers use a
default title for the icon.)
To prevent end users from iconifying a window, set the Minimize Allowed property to No. (The Icon Filename and
Minimized Title properties are ignored if the Minimize Allowed property is set to No.)
Note: On Microsoft Windows, the lookup path for icon files is defined by the TK21_ICON environment variable in the
ORACLE.INI file. When you enter the name of the icon file in the Icon Fileame property, do not include the path or .ICO file
extension.

About modal dialog windows


Modal dialog windows often are used as interactive dialog boxes. When an application needs information from the end
user before it can continue, you can display a modal dialog window to allow the end user to enter the required
information. Most dialogs require the end user to either provide the necessary information or dismiss the dialog and
cancel the operation.
File and Print dialogs are examples of interactive windows that—on most GUI platforms—are implemented as modal
dialogs. Alerts and lists of values (LOVs) are examples of specialized modal dialog windows that are native objects in
Form Builder.

Displaying a modal dialog window


Related Topics
When you create a modal dialog, decide how the dialog will be displayed and closed. Since a modal dialog requires input
from the end user, its content canvas always should contain navigable items. For this reason, the simplest way to display
a modal dialog is through navigation from an item in the current window to the first navigable item in the dialog window.
When such navigation occurs, Form Builder automatically displays the window (in this case, the modal dialog) that
contains the target item.
The navigation event might be the end user pressing the Tab [Next Item] key, or, more likely, a button trigger or menu
command that navigates programmatically. For example, you might call the NEXT_BLOCK, GO_BLOCK, or GO_ITEM built-
ins from a When-Button-Pressed trigger to navigate to a target item in the dialog.
You can also execute the SHOW_WINDOW built-in to display the modal window. When you use SHOW_WINDOW to
display a modal window, it implicitly navigates to the first navigable item on the canvas for that window.
Invoking a Modal Window from a Modal Window You can invoke a modal window from another modal window. For
example, the standard Microsoft Windows Printer Setup modal dialog has an Options button that invokes a second modal
dialog. When a modal window has been invoked from another modal window, navigation to any modeless window in the
same form automatically closes both the parent and child modal windows.
Closing a modal dialog window
Most application designs call for modal dialogs to remain displayed until the end user either accepts or cancels them.
When you create such a window, you must ensure that the end user is only allowed to close it in response to the desired
events.
By default, setting the Modal property to Yes prevents end users from navigating out of the window with the mouse, but
does not prevent them from navigating to another window by pressing keys such as [Next Item] (Tab) or [Next Block].
When end users are allowed to use keys to navigate to another window, Form Builder always closes the modal window,
unless the target window is itself a modal window. (Note that the Hide on Exit property is ignored for a modal window.)
If you navigate to a new modal window, the old modal window stays up. However, trying to navigate from a modal
window to a different modal window which was already up causes the current window to be hidden.
Defeating Keyboard Navigation When you implement a modal dialog, usually you want to prevent the end user from
navigating out of the window with navigation keys; you want the dialog to be closed only in response to specific events,
such as the end user pressing an OK or Cancel button.
You can defeat keyboard navigation out of a modal dialog in several ways:

Set the Previous Navigation Block and Next Navigation Block properties for the blocks in the dialog to prevent end
users from navigating with the [Next Block] and [Previous Block] keys. For example, for a block named DIALOG, you
could set both properties to DIALOG to make navigation circular, thus preventing end users from using keys to navigate
to any other block.

Write appropriate block-level triggers for each block in the modal window. For example, you might define a block-level
Key-Others trigger that would disable all keys except those keys for which you had also defined a key-trigger (such as
Key-Nxt-Item) to enable tabbing between items in the modal window.
Once you have prevented end users from closing a dialog through keyboard navigation, you must write the commands to
close the dialog in response to the desired events. You can close a modal dialog programmatically by navigating to an item
or block in a modeless window with built-ins such as GO_ITEM and GO_BLOCK. For example, a modal window might
contain an OK button with a When-Button-Pressed trigger that executes a GO_BLOCK statement to navigate out of the
modal window.

Creating a modal dialog window


To create a modal dialog window:
1. Create a new window and set its properties as follows:
Window Style Dialog. (Valid only on Microsoft Windows.)
Modal Yes.
Width/Height Optional. (A dialog typically is smaller than the modeless window from which the end user invokes it.)
2. Create a content canvas and set its Window property to the modal window you created in Step 1.
3. Create the items that will appear in the window.
4. Decide on the events that will display and close the modal dialog at runtime.

About working with canvases


While you can create and delete canvases in the Object Navigator, you will use the Layout Editor to accomplish most of
your canvas-related tasks.
Editing Canvases In the Layout Editor, you edit one canvas at a time. By default, the canvas itself is an object that can be
selected and formatted. You can hide the canvas object by toggling the View Show Canvas menu option. Many canvas
properties can be set graphically in the Layout Editor, as well as in the Property Palette.
Note: You cannot clear, cut, copy, export, or duplicate the canvas or view objects in the Layout Editor.

Creating a canvas
Related Topics
To create a canvas in the Object Navigator:

1. In the Object Navigator, click the Canvases node, and Click the Create button in the toolbar.
Form Builder creates a new canvas, and gives it a default name, such as CANVAS4.
2. Click the canvas' object icon, and choose Tools Property Palette.
3. In the Property Palette, under the General node, set the Canvas Type property to the desired type.
Note: The default canvas type is Content. For a content canvas, the properties that appear under the Stacked View
heading do not apply.
4. Set the Window property to the window in which you want to display the canvas.
By default, new canvases are assigned to the first window listed under the Windows node in the Object Navigator.
Note: To display the new canvas in the Layout Editor, double-click the canvas' object icon in the Object Navigator.

Defining a primary canvas


Related Topics
To define the primary canvas for a window, set its Primary Canvas property to the desired canvas. Form Builder displays a
window with its primary canvas when the window is being displayed programmatically, rather than in response to a
navigation event.
When to Set the Primary Canvas Property Setting the Primary Canvas property is optional. Most windows are displayed
in response to navigation to an item on a specific canvas. In such cases, setting the Primary Canvas property is not
required, since the canvas to be displayed is never ambiguous.
The first time you display a window during a session by using the SHOW_WINDOW built-in, Form Builder displays the
window with its primary canvas. If the Primary Canvas property is left unspecified, the window is displayed without a
view, and appears empty.
You also might want to set the Primary Canvas property in the situation when a window is displayed due to navigation to
an item on a stacked canvas. If you want the window's content canvas to be displayed behind the stacked canvas, you
must set the Primary Canvas property accordingly.
Form Builder always displays the target item and canvas during a navigation event. So even if you have set the Primary
Canvas property to specify a primary canvas, Form Builder will display a different canvas if necessary to make the target
item visible.

Deleting a canvas
Related Topics
To delete a canvas:
1. In the Object Navigator, click the object icon of the canvas you want to delete.
2. Click the Delete icon in the toolbar.
Note: When you delete a canvas, Form Builder also deletes any boilerplate items that are part of the canvas. However,
interface items assigned to the canvas are not deleted; rather, they become NULL-canvas items (items that are not
assigned to any canvas). Note that NULL-canvas items are not displayed at runtime.

Working with stacked and tab canvases in the Layout Editor


You can create and edit both stacked and tab canvases directly in the Layout Editor.
Creating To create stacked or tab canvases, you can use the Stacked Canvas or Tab Canvas buttons on the Layout
Editor toolbar. To create a tab canvas, for example, first display the Layout Editor. Next, click in the toolbar, then click-
drag a rectangular region where you want the tab canvas to appear on the underlying content canvas. Once you have
created the tab canvas in this manner, you can immediately resize or move it while still in the Layout Editor.
Editing You can use the Layout Editor to edit items on a stacked or tab canvas in two ways: (1) directly, or (2) on the
stacked view of a content canvas. To directly edit a stacked or tab canvas, invoke the Layout Editor, select the appropriate
canvas from the Canvas combination box at the top of the window, then move, resize or manipulate the items of the
canvas. To edit a stacked or tab canvas on the stacked view of a content canvas, invoke the Layout Editor, display the
appropriate content canvas, choose Show Stacked Views, select the appropriate canvas from the Stacked Canvases
dialog, then move, resize, or manipulate the items of the canvas.
Automatic Synchronization Form Builder automatically synchronizes items on the stacked view of the content canvas
and the corresponding item on the actual stacked canvas. For example, any movement, resizing or changes in visual
attributes to an item on a stacked canvas from the stacked view on the content canvas is reflected in the stacked canvas
when invoked from a Layout Editor. Similarly, when changes are made to items on a stacked canvas from a Layout Editor,
the changes are reflected in the stacked view on the content canvas.

Resizing a canvas in the Layout Editor


To resize a canvas in the Layout Editor:
1. In the Layout Editor, make sure the canvas object is displayed by choosing View and checking the Show Canvas
option (the default).
2. Scroll the Layout Editor window until the lower right corner of the canvas is visible, then click on the right edge or
bottom edge of the canvas to select it.
When the canvas is selected, a black selection handle is displayed at its lower-right corner.
3. Click and drag the selection handle to resize the canvas as desired.

Setting a canvas' visual attributes in the Layout Editor


To set a canvas' visual attributes in the Layout Editor:
1. In the Layout Editor, make sure the canvas is displayed in the Canvas combination box (i.e., it is the current canvas
in the Layout Editor).
2. Choose the desired colors from the color palettes.

Adjusting the view in the Layout Editor


Related Topics
Displaying the View To display the view for the current canvas as a 1 point black rectangle in the Layout Editor, enable the
View Show View menu option.
Resizing the View For a content or toolbar canvas, the view rectangle represents the window to which the canvas is
assigned. Resizing the view in the Layout Editor changes the Width and Height properties of the window. Conversely,
changing the Width or Height properties of the window resizes the view rectangle in the Layout Editor. For a stacked
canvas, the view is independent of the window in which the canvas is displayed, and its size is controlled by the Viewport
Width and Viewport Height properties.
Moving the View To move the view, drag it to the desired location. Moving the view changes the Viewport X/Y Position on
Canvas properties. To resize the view, click on it to select it, then drag one of the selection handles.

About content canvases


When building an application, one of the first steps is to create content canvases that will be displayed in the windows of
your form(s). While you can assign more than one content canvas to the same window at design time, at runtime only one
content canvas is displayed at one time in the window.
Creating a content canvas
There are three ways to create a content canvas in Form Builder:

Layout Wizard When you use the Layout Wizard to arrange data block items on a canvas, the Layout Wizard allows you
to place data block items on a new content canvas (which the Layout Wizard will create for you and give a default name,
such as CANVAS3).
Layout Editor In the Layout Editor, you can create items and boilerplate objects on a specific canvas. (If there are no
canvases in a form when you invoke the Layout Editor, Form Builder automatically creates a default content canvas for
you to work on.)
Object Navigator To create a content canvas in the Object Navigator, first you create the canvas, then you specify its
type by setting the Canvas Type property in the Property Palette.

Assigning multiple content canvases to a window


Related Topics
If you decide to assign more than one content canvas to the same window at design time, you are designating potential
content canvases for that window. At runtime, you can display only one content canvas in a single window at a time. In
other words, when more than one content canvas is assigned to the same window, runtime events determine which is the
current content canvas displayed in that window.
Consider a form with one window and two content canvases (both assigned to the window). At form startup, Form
Builder must determine which canvas initially should be displayed in the window. By default, Form Builder sets the input
focus to the first navigable item in the first block in the form. In this example, the content canvas that contains the first
navigable item in the form (as defined by navigation sequence) becomes the current content canvas for the window.
Now consider an online Help window to which two content canvases are assigned. Each content canvas displays
boilerplate Help text, and neither contains navigable items. End users can invoke the Help window by pressing a button
that executes the SHOW_WINDOW built-in procedure. Again, Form Builder must determine which canvas initially should
be shown when the window is invoked. Since navigation is not occurring, the content canvas designated as the window's
primary canvas is displayed in the window. (To designate a primary canvas for a window, set the optional Primary Canvas
property.)

About stacked canvases


Related Topics
Stacked canvases are displayed in a window along with the window's content canvas(es) and any number of other
stacked canvases. You can set the bevel, color, and pattern attributes of a stacked canvas to make it look different than
the underlying content canvas. Contrarily, you can make the stacked canvas look like the content canvas, and then show
and hide the stacked canvas programmatically so end users are unaware that a separate canvas is being displayed. This
technique can be used to make items or boilerplate appear to change dynamically.
Creating a stacked canvas is similar to creating a content canvas. To define a stacked canvas, you need to set certain
canvas properties that apply only to stacked canvases, and create items and boilerplate text and graphics as you would
for a content canvas.
Note: To convert an existing content canvas to a stacked canvas, simply change its Canvas Type property from Content
to Stacked.
At runtime, stacked canvases are displayed automatically in response to navigation in the same manner as content
canvases. To show and hide stacked canvases programmatically, use the SHOW_VIEW, HIDE_VIEW, and
SET_VIEW_PROPERTY built-ins.
Uses for Stacked Canvases
You can use stacked canvases to do the following:
Display items or boilerplate graphics that end users need to see only in certain situations. (Define a stacked canvas that
displays help text or images that remain hidden until they are explicitly invoked by the end user.)
Display headers that display constant information such as company names, dates, and status information. (Define a
stacked canvas that always appears in front of the current content canvas. When the current content canvas is replaced
by another, the stacked canvas remains visible in the window. Use this technique to avoid duplicating interface elements
on multiple content canvases in the same window.)

Create a block with items that scroll dynamically in the window where they are displayed, much like a spreadsheet. (If a
block contains more items than fit in a window, Form Builder automatically scrolls the window as the end user tabs to
items outside the window's frame. This can cause important fields—such as primary key values—to be scrolled out of the
window and thus out of the end user's view. For example, for a block that displays information about orders, the Order ID
always should be visible, regardless of navigation by the end user. By placing the Order ID item on the underlying content
canvas, and placing items that can be scrolled out of sight on a stacked canvas, the stacked canvas becomes the
scrolling region, rather than the window itself. Note that stacked canvases can have their own scroll bars, independent of
the window's scroll bars.)

Creating a stacked canvas


Related Topics
To create a stacked canvas:
1. In the Object Navigator, under the Canvases node, double-click the object icon of the content canvas on which you
wish to create a stacked canvas.
2. In the Layout Editor, click the Stacked Canvas button in the toolbar.
3. Click-drag the region where you want to place the stacked canvas.
Form Builder creates a stacked canvas, and gives it a default name, such as CANVAS6.
4. In the Object Navigator, under the Canvases node, click the stacked canvas' object icon, then choose Tools
Property Palette.
5. In the Property Palette, under the Physical, Viewport and Miscellaneous nodes, set properties as follows:
Visible Yes (stacked canvas will be visible when window is invoked), or No (stacked canvas remains hidden until
displayed in response to navigation or programmatic events).
Width/Height Canvas dimensions. Stacked canvases typically are smaller than the content canvas(es) in the same
window.
Bevel Canvas border type. Use a border to visually separate a stacked canvas from other canvases in the same window.
Viewport Width/Height Dimensions of the stacked canvas' view. If the view is smaller than the canvas, end users can
scroll the canvas at runtime.
Viewport X/Y Position on Canvas X,Y display coordinates of the view's upper-left corner (relative to the upper-left corner
of the content canvas currently displayed in the window). 0,0 (the default) displays the stacked canvas at the upper-left
corner of the content canvas.
View H/V Scroll Bar Will the stacked canvas have a scroll bar (horizontal, vertical, both, none)? End users can scroll the
stacked canvas independently of the underlying content canvas.
6. Define the stacked canvas' position in the stacking order.
If the stacked canvas is not displayed programmatically or in response to navigation, make sure that its position in the
stacking order places it in front of the content canvas assigned to the same window. If not, it will be shown behind the
content canvas, and will not be visible at runtime. Recall that the stacking order of canvases in a window is defined by
the sequence in which they are listed under the Canvases node in the Object Navigator.

Editing a stacked canvas in the Layout Editor


To edit a stacked canvas in the Layout Editor:
1. In the Object Navigator, open the Canvases node and click the object icon of the desired stacked canvas.
2. Double-click the object icon for the stacked canvas.
You now can create items and boilerplate graphics as you would for a content canvas. You can also graphically change
the size of the canvas or of the view itself.

Displaying a content canvas' stacked views in the Layout Editor


Related Topics
To display stacked views assigned to a content canvas' window:
1. In the Object Navigator, under the Canvases node, double-click the content canvas' object icon.
2. In the Layout Editor, choose View Stacked Views.
Form Builder displays the Stacked Canvases dialog, which shows all stacked canvases assigned to the same window as
the content canvas currently displayed in the Layout Editor.
3. Select the stacked canvas(es) that you want to display in the Layout Editor. (Deselect those you do not want to
display).
To select a stacked canvas, click it in the Stacked Canvases dialog. Control-click multiple stacked canvases to display
them on the same content canvas.
To deselect a stacked canvas already displayed on the content canvas, Control-click the selected stacked canvas in the
Stacked Canvases dialog.
When you display a stacked canvas this way, you see exactly what the end user will see at runtime. That is, you see only
the portion of the stacked canvas that is within its view, as defined by the Viewport Width and Viewport Height properties.
Once the stacked canvas is displayed, you can change its properties in the Layout Editor by manipulating it graphically, as
follows:
Move the stacked canvas to change its Viewport X Position and Viewport Y Position properties.

Resize the stacked canvas to change its Viewport Width and Viewport Height properties. Resizing the view this way
does not change the size of the canvas, only the size of the view. To resize the canvas, set the Width and Height canvas
properties in the Property Palette. Only items and boilerplate that are completely on the canvas will display at runtime,
even if the view is larger than the canvas.
For a stacked canvas with scroll bars, scroll the canvas to change the initial runtime settings for the Viewport X Position
on Canvas and Viewport Y Position on Canvas properties.

About tab canvases


Related Topics
A tab canvas, made up of one or more tab pages, allows you to group and display a large amount of related information
on a single, dynamic canvas object. Like stacked canvases, tab canvases are displayed on top of a content canvas, partly
obscuring it. Tab pages each display a subset of the information displayed on the entire tab canvas.

About tab pages


Related Topics
A tab canvas can have many tab pages, and must have at least one. Think of tab pages as the folders in a filing system.
Each individual tab page (folder) has a labelled tab that developers and end users click to access the page. At design time
or runtime, you click the labelled tab to display the page at the front of the tab canvas, thereby obscuring any other
page(s).
Each tab page occupies an equal amount of space on the tab canvas, roughly equal to the size of the canvas itself. This
layering of related canvas sections enables you to display more information on a single canvas.
Tab pages are sub-objects of a tab canvas. Like the canvas to which it is attached, each tab page has properties; similarly,
any item you place on a tab canvas has a canvas property as well as tab page properties. The ordering of tab pages in the
Object Navigator determines the left-to-right (or top-to-bottom) order of the tabs at runtime.

Creating a tab canvas


Related Topics
To create a tab canvas:
1. In the Object Navigator, under the Canvases node, double-click the object icon of the content canvas on which you
wish to create a tab canvas.

2. In the Layout Editor, click in the toolbar.


3. Click-drag the region where you want to place the tab canvas.
Form Builder creates a tab canvas (with two tab pages), and gives it a default name, such as CANVAS6.
4. In the Object Navigator, under the Canvases node, click the tab canvas' object icon, then choose Tools Property
Palette to display the Property Palette.
5. Under the Viewport node:

Set the Viewport X/Y Position on Canvas properties. (Enter X,Y display coordinates of the view's upper-left corner,
relative to the upper-left corner of the content canvas currently displayed in the window. 0,0 (the default) displays the tab
canvas at the upper-left corner of the content canvas.)

Set the Viewport Width/Height properties. (Enter dimensions of the tab canvas' view. If the view is smaller than the
canvas, end users can scroll the canvas at runtime.)
6. Under the Physical node:
Set the Visible property to Yes (tab canvas will be visible when window is invoked), or No (tab canvas remains hidden
until displayed in response to navigation or programmatic events).
Set the Width/Height properties. (Enter dimensions of the canvas. Tab canvases typically are smaller than the content
canvas(es) in the same window.)
7. Define the tab canvas' position in the stacking order.
If the tab canvas is not displayed programmatically or in response to navigation, make sure that its position in the
stacking order places it in front of the content canvas assigned to the same window. If not, it will be shown behind the
content canvas, and will not be visible at runtime. Recall that the stacking order of canvases in a window is defined by
the sequence in which they are listed under the Canvases node in the Object Navigator.

Creating a tab page


Related Topics
To create a tab page:
1. In the Object Navigator, under the Canvases node, click the Tab Pages node of the tab canvas.

2. Click the Create button in the toolbar once for each tab page you wish to create.
Form Builder creates the tab page(s) and provides a default name for each, such as PAGE3.
3. Choose Tools Property Palette.
4. In the Property Palette, under the Functional node, set the Label property to the text you want to appear on the tab
page's tab area at runtime. (End users will click the tab area to navigate between the pages of a tab canvas.)

Placing an item on a tab page


To place an item on a tab page:
1. In the Object Navigator, double-click the item's object icon.
2. In the Property Palette, under the Physical node, set the item's Canvas and Tab Page properties to the correct values
to make sure the item appears on the desired tab canvas and tab page.
Note: When you add an item to a tab page, be sure the entire item (and any associated boilerplate graphics) is completely
within the tab page region.

Moving an item to another tab page


To move an item to another tab page:
1. In the Object Navigator, click the item's object icon, and choose Tools Layout Editor.
2. In the Layout Editor, click the item(s) and click the Cut or Copy buttons in the toolbar.
Form Builder cuts or copies the item to the clipboard.
3. Click the tab of the tab page on which you wish to paste the item(s), then click the tab page itself once Form Builder
displays it.
4. Click the Paste tool in the toolbar.
Form Builder pastes the item to the selected tab page, in the same X,Y position where the item was located on its previous
tab page.
Note: You also can move an item to another tab page by changing the item's Tab Page property in the Property Palette.

Reordering tab pages


To reorder tab pages:
1. In the Object Navigator, under the Canvases node, click the Tab Pages node of the tab canvas.
2. Click-drag the object icon of a tab page, and reposition it in the hierarchy to change its place in the order
Note: The ordering of tab pages in the Object Navigator determines the left-to-right (or top-to-bottom) order of the tabs at
runtime. The highest tab in the Object Navigator will be displayed either at the top or far left of the tab stack at runtime,
depending on the orientation of the tabs.

Deleting a tab page


To delete a tab page:
1. In the Object Navigator, under the Canvases node, click the Tab Pages node of the tab canvas.
2. Click the tab page's object icon, and click the Delete button in the toolbar.
Form Builder displays a confirmation alert.
3. Click Yes to delete the tab page.
Form Builder deletes the tab page.
Note: Deleting the last page of a tab canvas does not delete the canvas itself.

Displaying a tab canvas


To display a tab canvas in the Layout Editor:
1. In the Object Navigator, double-click the tab canvas' object icon,
or
Double-click the object icon of a content canvas that is assigned to the same window as the tab canvas, then choose
View Stacked Views and select the tab canvas(es) you want to view on the content canvas,
or
Double-click the object icon of a content canvas that is assigned to the same window as the tab canvas, then select the
tab canvas from the Canvas combination box at the top of the Layout Editor.

Switching tab pages at design time


Once you display a tab canvas at runtime, you can display a tab page by clicking its labelled tab. You also can use the
right- and left-arrow keys to switch between the tab pages of a tab canvas, but only if focus already is in a labelled tab
itself (as opposed to focus being in an item or the tab canvas itself).

Resizing a tab canvas


To resize a tab canvas in the Layout Editor:
1. In the Object Navigator, under the Canvases node, double-click the tab canvas' object icon.
The Layout Editor appears.
2. Choose View Show View .
3. Select the tab canvas view.
4. Select a point and click-drag the tab canvas to the desired size.
Note: Keep in mind that when you resize a tab canvas, Form Builder resizes each of its tab pages automatically. Objects
previously within the borders of a tab page may therefore fall outside the tab page border if you resize the tab canvas.

Moving a tab canvas


To move a tab canvas on the content canvas:
1. In the Object Navigator, under the Canvases node, double-click the content canvas' object icon.
The Layout Editor appears.
2. Choose View Show View .
3. Select the tab canvas view.
4. In the Layout Editor, click and drag the tab canvas view to the desired position on the content canvas.
Note: By moving the tab canvas, you are changing the Viewport X Position and the Viewport Y Position of its view.

Displaying Canvases
Displaying a stacked canvas' views
Displaying a tab canvas

About toolbar canvases


You can create toolbar canvases, both horizontal and vertical, for any window in a form. Form Builder displays horizontal
toolbar canvases across the top of a window, and vertical toolbar canvases on the left edge of a window. (The Form
Builder has several toolbars: for example, the Object Navigator window has both horizontal and vertical toolbars; the
Property Palette has a horizontal toolbar only.)
When you create a toolbar canvas, you assign it to a window by setting the canvas Window property, and then register it
with the window by setting the window's Vertical Toolbar Canvas or Horizontal Toolbar Canvas properties as appropriate.
You can change the appearance of a toolbar at runtime by dynamically showing and hiding different items on the toolbar.
You also can create more than one toolbar for the same window, and display them in response to navigation events and
programmatic control, much like stacked canvases assigned to the same window.
MDI Window Toolbar Canvas On Microsoft Windows, you can create toolbars for the MDI application window as well as
for any document windows in the form. The MDI application window is created and managed by the window manager,
and does not appear in the list of window objects in a form module.
Note: In multiple-form applications, each form can potentially have its own MDI toolbar. As the end user navigates among
forms, the MDI window is updated to display the MDI toolbar defined in the current form. If an MDI toolbar is not defined
in the current form, the MDI window is displayed without a toolbar whenever that form has focus.

Creating a toolbar canvas


Related Topics
To create a toolbar canvas:

1. In the Object Navigator, click the Canvases node, and Click the Create button in the toolbar.
2. Choose Tools Property Palette.
3. In the Property Palette, under the General and Physical nodes, set properties as follows:
Canvas Type—Horizontal Toolbar or Vertical Toolbar.
Window—the name of the window in which you will display the toolbar canvas.
Width/Height—the dimensions of the toolbar canvas. A toolbar canvas generally is as wide (or tall) as the window to
which it is assigned, and as deep (or wide) enough to display a single row (or column) of items. (Note that Form Builder
accepts any dimensions you specify, even if the resulting toolbar completely obscures the window's content canvas.)
4. In the Object Navigator, under the Windows node, click the window to which you assigned the toolbar canvas in Step
3.
5. Double-click the window's object icon to display the Property Palette.
6. In the Property Palette, under the Functional node, set the Horizontal Toolbar Canvas and/or Vertical Toolbar
Canvas properties to the name of the toolbar you created in Step 1.
7. Add items and boilerplate graphics to the toolbar canvas as you would for any other canvas.
Note: Use of navigable and mouse-navigable items in a toolbar canvas is not supported.

Creating a toolbar canvas for the MDI window


Related Topics
To create an MDI toolbar canvas:

1. In the Object Navigator, click the Canvases node, and Click the Create button in the toolbar.
2. Choose Tools Property Palette.
3. In the Property Palette, under the General node, set the Canvas Type property to Horizontal Toolbar or Vertical
Toolbar.
4. In the Object Navigator, under the Forms node, double-click the current form module's object icon to display the
Property Palette.
5. In the Property Palette, under the Physical node, set the Form Horizontal Toolbar Canvas and/or Form Vertical
Toolbar Canvas properties to the name of the toolbar you created in Step 1.
Note: When you create a canvas toolbar to display on the MDI window, Form Builder will ignore the window assignment
for that canvas (specified by its Window property setting) at runtime, and will automatically map the toolbar canvas to the
MDI window instead.
6. Add items and boilerplate to the new toolbar canvas as you would to a content or stacked canvas.
Note: Use of navigable and mouse-navigable items in an MDI toolbar canvas is not supported.
Creating multiple toolbar canvases for the same window
Related Topics
It is possible to create two or more toolbar canvases of the same type (horizontal or vertical) and assign them to the same
form window by setting the canvas Window property.
When two or more toolbars are assigned to the same form window, Form Builder will attempt to display the primary
toolbar canvas on the window at runtime. You specify the primary toolbar canvas for a window by setting the window's
Horizontal Toolbar Canvas or Vertical Toolbar Canvas property.
However, Form Builder may display a toolbar canvas other than the primary toolbar canvas if navigation occurs to an
item on another toolbar, or if the application programmatically shows or raises a different toolbar canvas by executing
SHOW_VIEW or SET_VIEW_PROPERTY.
Defining MDI toolbars also can result in a situation where more than one toolbar canvas is being mapped to the same
form window. For example, you might create a form with two toolbar canvases of the same type (horizontal or vertical)
that are assigned to the same form window, one of which is designated as the MDI toolbar (by setting the form module
Form Horizontal/Vertical Toolbar Canvas properties). On Microsoft Windows, the MDI toolbar is always mapped to the MDI
window, and is not displayed on the window to which it is assigned (as indicated by its Window property setting).
However, on non-Windows platforms that support toolbars, such as Motif, the MDI toolbar is mapped to the window to
which it is assigned, and becomes one of that window's potential toolbar canvases. In this case, Form Builder will attempt
to display the window with the toolbar that you designated as the primary toolbar, but may display a different toolbar in
response to navigation or programmatic events.

About stacking order


When you work with canvases, you must define each canvas' position in the stacking order, with respect to other
canvases assigned to the same window. The stacking order determines which canvases are displayed in front of (or "on
top of") other canvases in the same window. The stacking order of canvases can change at runtime in response to
navigation and programmatic events.
Stacking order is important, particularly when you have multiple content and stacked canvases assigned to the same
window. You always should position a stacked canvas in front of any content canvas(es) assigned to the same window; if
not, the content canvas(es) will completely obscure the stacked canvas(es) at runtime.
Initial Stacking Order The initial stacking order of canvases is determined by the order they are listed under the Canvases
node in the Object Navigator: the first canvas listed under the Canvases node is displayed behind all other canvases
assigned to the same window. The last canvas in the list is displayed in front of all other canvases.
Changing the Stacking Order To change the stacking order, drag canvases in the Object Navigator to position them in the
desired sequence. To re-sequence canvases this way, make sure the Object Navigator is in Ownership View (the default).

About content canvases in the stacking order


Related Topics
When you assign multiple content canvases and at least one stacked canvas to the same window, be aware of how Form
Builder manages content canvases in the stacking order. Since Form Builder can display only one content canvas at a
time in a single window, it treats all content canvases assigned to the same window as if each one had the same position
in the stacking order, relative to the stacked canvases assigned to that window.
Consider a window with four canvases: CNT_A and CNT_C are content canvases; STK_B is a stacked canvas; TAB_D is
a tab canvas.
At runtime, Form Builder displays one content canvas at a time in the window. If, at form startup, the application navigates
to an item on CNT_A, it becomes the current content canvas displayed in the window. If the end user then navigates to an
item on CNT_C, it replaces CNT_A, but at the same position in the stacking order, rather than at its design-time position as
specified in the Object Navigator.
This functionality allows the current content canvas to be replaced without hiding stacked canvases currently displayed
in the same window. When CNT_C replaces CNT_A, the stacked and tab canvases, which are positioned above CNT_A at
design time, remain visible.
When you use this technique, make sure that the stacked and tab canvases are sequenced in front of (above) the first
content canvas that will be displayed in the window.

How stacking order changes at runtime


At runtime, the stacking order you established at design time changes as canvases are raised in response to navigation
and programmatic control.
When an end user or the application navigates to an item on a canvas that is hidden behind another canvas, Form Builder
automatically raises the target canvas to the front of the window, thus changing the current stacking order. (Therefore, if
you design your form such that stacked or tab canvases always are invoked in response to navigation, the design-time
stacking order is unimportant.)
Similarly, if you execute the SHOW_VIEW or SET_VIEW_PROPERTY built-in procedures to display a canvas
programmatically, Form Builder displays the indicated canvas in front of all other canvases displayed in that same
window.

Displaying and closing a window in response to navigation


Related Topics
Displaying a Window in Response to Navigation At runtime, Form Builder always keeps the item that currently has focus
visible to the end user. To make the target item visible when a navigation event occurs, Form Builder will invoke, raise or
show windows that are currently hidden or are currently behind other windows.
When a navigation event occurs, Form Builder first determines which canvas the target item is on, and then displays the
window to which that canvas is assigned. For example, at form startup, Form Builder identifies the item that is the first
navigable item in the first navigable block in the form, and then displays the canvas and window to which that item is
assigned.
You can take advantage of this behavior by using navigation events to invoke windows, without having to write code to
display them explicitly.
Examples of navigation events include Next Item, Previous Item, Next Block, and Previous Block. The end user can issue
these commands by pressing keys or selecting commands on the Default menu. You can also initiate navigation
programmatically by calling the appropriate built-ins, including GO_ITEM and GO_BLOCK.
Closing a Window in Response to Navigation When an end user or the application navigates out of a modeless window,
the window's Hide on Exit property determines whether the window remains displayed or is closed automatically.
If Hide on Exit is set to Yes, Form Builder closes the window automatically when the end user or the application navigates
to an item in another window. If Hide on Exit is set to No (the default), Form Builder does not close the window when
navigation to an item in another window occurs.
Note that the Hide on Exit property is ignored for modal windows (windows with the Modal property set to Yes).

Displaying and closing a window programmatically


Examples Related Topics
Displaying a Window To display a window that does not contain navigable items, you must display it programmatically.
For such windows, you also must set the Primary Canvas property to specify the content canvas that you want displayed
in the window.
To display a window at runtime, use either the SHOW_WINDOW or SET_WINDOW_PROPERTY built-in procedures.
(When you use SHOW_WINDOW, you have the option to specify X,Y display coordinates. If you do not, Form Builder uses
the window's current display coordinates.)
When you display a window programmatically, Form Builder displays the following canvases in the window:

the window's current content canvas

any stacked canvases assigned to the window that have the Visible property set to Yes
Note: If you programmatically display a window that is already displayed, but is layered behind other windows, Form
Builder raises the window in front of the other windows.
Closing a Window To close a window, you can use either the HIDE_WINDOW or SET_WINDOW_PROPERTY built-in
procedures.
The Current Item When you display and hide windows programmatically, keep in mind that Form Builder always keeps the
item that currently has focus visible to the end user. If you attempt to programmatically close the window that contains
the current item, Form Builder ignores the call. If you display a window that obscures the current item, Form Builder
executes the call, but then immediately raises windows or canvases as necessary to keep the current item visible.

Displaying and closing a window programmatically examples


/*
Example 1: These 2 procedure calls display a window named
** MY_WIN, with equivalent results:

SHOW_WINDOW('my_win');
SET_WINDOW_PROPERTY('my_win', visible, property_true);

** Example 2: This procedure call displays the same window at


** screen coordinates 5 and 10:

SHOW_WINDOW('my_win', 5, 10);

** Example 3: The SET_WINDOW_PROPERTY built-in sets only one


** window property at a time; you must call it twice to achieve
** the same result as the previous example:

SET_WINDOW_PROPERTY('my_win', visible, property_true);


SET_WINDOW_PROPERTY('my_win', window_position, 5, 10);

** Example 4: These 2 procedure calls close a window named MY_WIN,


** with equivalent results:

HIDE_WINDOW('my_win');
SET_WINDOW_PROPERTY('my_win', visible, property_false);

*/

Moving and resizing a window programmatically


Examples Related Topics
Moving a Window To move a window, use the built-in procedures MOVE_WINDOW or SET_WINDOW_PROPERTY.
Resizing a Window To resize a window, use the built-in procedures RESIZE_WINDOW or SET_WINDOW_PROPERTY.
Minimizing/Maximizing a Window To programmatically minimize (iconify) or maximize (enlarge to full-screen) a window,
use the SET_WINDOW_PROPERTY built-in to set the Window State property to Minimize or Maximize.
Manipulating the MDI Application Window On Microsoft Windows, you can manipulate the MDI application window
programmatically. To do so, refer to the window name as FORMS_MDI_WINDOW. You can programmatically set selected
MDI windows properties. For details, refer to the online help for the SET_WINDOW_PROPERTY built-in.
Manipulating Windows at Application Startup To set the size, position, and display state of a window at application start-up
(i.e., before the end user sees the form), call the appropriate built-ins from a When-New-Form-Instance trigger. If you are
developing an application to run on different operating systems and display devices, you can use the
GET_APPLICATION_PROPERTY built-in to examine the following properties, and then size your windows accordingly:

DISPLAY_HEIGHT
DISPLAY_WIDTH

OPERATING_SYSTEM

USER_INTERFACE
Note: The built-in subprograms that change the size and position of objects require arguments for X,Y display coordinates
and width/height dimensions. At runtime, Form Builder interprets these arguments in the units specified by the form
module Coordinate System property: either in character cells, centimeters, inches, pixels, or points.

Moving and resizing a window programmatically examples


/*
Example 1: These 2 procedure calls move the window MY_WIN to
** X,Y coordinates 6 and 8:

MOVE_WINDOW('my_win', 6, 8);
SET_WINDOW_PROPERTY('my_win', position, 6, 8);

** Example 2: These 2 procedure calls resize MY_WIN to a width


** of 80 and a height of 20:
RESIZE_WINDOW('my_win', 80, 20);
SET_WINDOW_PROPERTY('my_win', window_size, 80, 20);

** Example 3: This procedure call minimizes the document window


** MY_WIN:

SET_WINDOW_PROPERTY('my_win', window_state, minimize);

** Example 4: This procedure call uses the Form Builder constant


** FORMS_MDI_WINDOW to maximize the MDI window (applies only to
** Microsoft Windows):

SET_WINDOW_PROPERTY(forms_mdi_window, window_state, maximize);

*/

Scrolling a window programmatically


Examples Related Topics
When you scroll a window programmatically, you actually change the position of the view on the window's canvas (i.e.,
changing the Viewport X Position on Canvas and Viewport Y Position on Canvas property settings).
To scroll a window programmatically, use one of two built-in procedures:
SCROLL_VIEW scrolls the window to X,Y coordinates you specify.

SET_VIEW_PROPERTY allows to set either the X or Y coordinates of the view by setting the Viewport X Position on
Canvas or Viewport Y Position on Canvas properties. (Note that to set both X and Y coordinates of the view, you must
call this built-in twice.)
Dynamic Scrolling When end users or the application navigate among items, Form Builder always keeps the target item
visible to the end user. If necessary, Form Builder will automatically scroll a canvas to bring the target item within the
view. For example, when an end user presses [Next Item] (Tab) to move to an item that is on the same canvas but
currently outside the window, Form Builder dynamically scrolls the canvas to make the target item visible.
The only exception to this rule is if the end user or the application scrolls the window explicitly, rather than in response to
navigation. In this case, Form Builder does allow the item that currently has input focus to be scrolled out of the view.
However, the next navigational event will again cause the target item to be scrolled within the view.

Scrolling a window programmatically examples


/*
Example 1: This procedure call scrolls a window's content
** canvas horizontally to X,Y coordinates 14 and 10:

SCROLL_VIEW('my_con_view', 14, 10);

** Example 2: These 2 procedure calls also reposition the content


** canvas' view to X,Y coordinates 14 and 10:

SET_VIEW_PROPERTY('my_con_view', x_pos_on_canvas, 14);


SET_VIEW_PROPERTY('my_con_view', y_pos_on_canvas, 10);

*/

Using triggers to respond to window events at runtime


You can use the following triggers to respond to window events:
When-Window-Activated

When-Window-Closed

When-Window-Deactivated
When-Window-Resized
When working with these triggers, you can examine the built-in system variable SYSTEM.EVENT_WINDOW to determine
the name of the window for which the trigger fired.
Showing and hiding a canvas programmatically
Examples Related Topics
Showing a Canvas To programmatically display a canvas in the window to which it is assigned, use either the built-in
procedures SHOW_VIEW or SET_VIEW_PROPERTY.
Note: With one exception, when you display a canvas programmatically, Form Builder raises it in front of any other
canvases in the same window, regardless of the stacking order you specified at design time, of whether the canvas was
already displayed (but hidden behind another canvas) when the built-in was called. The exception is when you try to
programmatically display a canvas that would obscure the current item's canvas; in this case Form Builder will display the
canvas, but behind the current item's canvas.
If you use the SHOW_VIEW or SET_VIEW_PROPERTY built-ins to display a content canvas, it replaces the window's
current content canvas.
Hiding a Canvas To programmatically hide a canvas, use the built-in procedures HIDE_VIEW or SET_VIEW_PROPERTY.

Showing and hiding a canvas programmatically examples


/*
Example 1: These 2 procedure calls both display a content
** canvas named A_STACK:

SHOW_VIEW('a_stack');
SET_VIEW_PROPERTY('a_stack', visible, property_true);

** Example 2: These 2 procedure calls both hide a content canvas


** named A_STACK:

HIDE_VIEW('a_stack');
SET_VIEW_PROPERTY('a_stack', visible, property_false);

*/

Working with the Raise on Entry canvas property


Related Topics
The canvas property Raise on Entry determines how stacking order is affected by navigation (by the end user or the
application) to an item on the canvas. If you set Raise on Entry to:

No, Form Builder raises the canvas to the front of the window only if the target item is hidden behind another canvas in
that same window (when the end user or application navigates to an item on that canvas.

Yes, Form Builder raises the canvas to the front of the window whenever the end user or the application navigates to
an item on that canvas. (Be careful about setting Raise on Entry to Yes for a content canvas; since a content canvas
occupies the entire content area of its window, it always will obscure any stacked canvases when Form Builder raises it
to the front of the canvas stack.)
Stacked Canvases
Setting the Raise on Entry property for a stacked canvas can be tricky. To get it right, you may have to consider window
interaction, default navigation, stacking order, and programmatic manipulation of windows and canvases.
A stacked canvas with Raise on Entry property set to No can be displayed only through navigation or programmatic
control.
Recall that when an end user (or your application) navigates to an item on the stacked canvas, Form Builder displays the
canvas in its assigned window. But a window also can be shown programmatically, or in response to navigation to an item
on the window's content canvas. In these situations, you must set Raise on Entry to Yes so Form Builder will display the
stacked canvas when the window is first displayed.
Note that a stacked canvas with its Raise on Entry property set to Yes might still be hidden in the following situations:

If the stacked canvas' position in the stacking order places it behind a content canvas or other stacked canvas in the
same window.

If the window is displayed because of navigation to an item on another of its canvases, Form Builder will hide the
stacked canvas if it overlaps the target item. (Form Builder at first displays the stacked canvas, then immediately raises
the target canvas in front of the stacked canvas so that the target item visible.)

If the window is displayed because of navigation to an item on another of its canvases, and the target canvas has
Raise on Entry set to Yes, Form Builder will raise the target canvas in front of the stacked canvas, even if the stacked
canvas does not overlap the target item.

Events that change the current content canvas


Related Topics
When a content canvas is displayed in a window—in response to navigation or programmatic control—it becomes the
window's current content canvas. Unless it is replaced by another content canvas, it remains the current content canvas
for the duration of the runtime session (even if the end user closes or iconifies the window).
When multiple content canvases are assigned to the same window, the current content canvas can be replaced by
another content canvas under the following circumstances:

the end user or the application navigates to an item on another content canvas assigned to the same window
a trigger or user-named subprogram executes the REPLACE_CONTENT_VIEW built-in procedure.
For example, the end user might press [Next Item] (Tab) to navigate to an item on a different content canvas. Since a
window can display only one content canvas at a time, Form Builder replaces the window's current content canvas with
the new content canvas that contains the target item.

Replacing the current content canvas programmatically


Examples Related Topics
To replace a window's current content canvas programmatically, use the built-in procedure REPLACE_CONTENT_VIEW.
The canvas specified must be a content canvas, and it must be assigned to the window indicated. (You cannot replace a
window's current content canvas with a canvas assigned to a different window.)
You also can use the SHOW_VIEW and SET_VIEW_PROPERTY built-ins to replace a window's content canvas. If the
window contains stacked canvases, however, there is an important functional difference between these built-ins and the
REPLACE_CONTENT_VIEW built-in:

SHOW_VIEW and SET_VIEW_PROPERTY display the indicated content canvas in front of any stacked canvases in the
window, thereby hiding those stacked canvases.

In contrast, REPLACE_CONTENT_VIEW displays the indicated content canvas at the same position in the stacking
order as the content canvas it replaces.
Remember that Form Builder always keeps the current item visible to the end user. If you programmatically replace the
content canvas that contains the current item, Form Builder will automatically redisplay the original canvas.

Replacing the current content canvas programmatically examples


/*
Example 1: This procedure call replaces the WIN_5 window's
** current content canvas with a content canvas named CVS_1:

REPLACE_CONTENT_VIEW('win_5', 'cvs_1');

*/

Manipulating a stacked canvas programmatically


Examples
Displaying a Stacked Canvas To programmatically display a stacked canvas in the window to which it is assigned, you can
use the SHOW_VIEW built-in procedure. (Note that a stacked canvas' Visible property is set to No by default.)
Scrolling a Stacked Canvas To scroll a stacked canvas so that a different region of the canvas is visible, use the built-in
procedure SCROLL_VIEW (which moves the view relative to its canvas).
Moving a Stacked Canvas To move the stacked canvas to a different location on the underlying content canvas, use the
built-in procedure SET_VIEW_PROPERTY (which changes the canvas' Viewport Position property). Note that this will not
change the region of the canvas that is visible in the view.
Increasing the Dimensions of the View To increase the dimensions of a stacked canvas' view (so that more of the canvas
is visible), use the built-in procedure SET_VIEW_PROPERTY. Note that increasing the of the view does not change the
X,Y coordinates of its upper-left corner on the stacked canvas, nor does it change the position of the view itself relative to
the underlying content canvas.

Manipulating a stacked canvas programmatically examples


/* Example 1: These 2 procedure calls both display the stacked
canvas STACK_IT:
*/
SHOW_VIEW('stack_it');
SET_VIEW_PROPERTY('stack_it', visible, property_true);

/* Example 2: This procedure call scrolls the view of the stacked


** canvas STACK_IT to X,Y coordinates 12 and 0:
*/
SCROLL_VIEW('stack_it', 12, 0);

/* Example 3: This procedure call changes the position of the


** stacked canvas STACK_IT to X,Y coordinates 12 and 20 on the
** underlying content canvas:
*/
SET_VIEW_PROPERTY('stack_it', display_position, 12, 20);

/* Example 4: This procedure call increases the width of the view,


** thereby making more of the canvas visible:
*/
SET_VIEW_PROPERTY('stack_it', width, 22);

Manipulating a tab canvas programmatically


Examples Related Topics
Like stacked canvases, use the SHOW_VIEW, HIDE_VIEW, and SET_VIEW_PROPERTY built-ins to show and hide a tab
canvas programmatically.
To show or hide a tab page, use the SET_TAB_PAGE_PROPERTY built-in. To make a tab page the topmost page on a
canvas, use the SET_CANVAS_PROPERTY built-in. To change the tab page on which an item is displayed, use the
SET_ITEM_PROPERTY built-in.
Showing/Hiding a Tab Page To show or hide a tab page, use the built-in procedure SET_TAB_PAGE_PROPERTY to set
the tab page property VISIBLE.
Enabling/Disabling a Tab Page To enable or disable a tab page, use the built-in procedure SET_TAB_PAGE_PROPERTY to
set the tab page property ENABLED. (A disabled tab page is displayed at runtime with its tab label greyed out.)
Setting the Topmost Tab Page To make a tab page the top-most on its underlying tab canvas, use the built-in procedure
SET_CANVAS_PROPERTY to set the canvas property TOPMOST_TAB_PAGE.

Manipulating a tab canvas programmatically examples


/*
Example 1: This procedure call shows the tab page TAB1 on the
** tab canvas CAN5:
*/
SET_TAB_PAGE_PROPERTY('can5.tab1', visible, property_true);

/* Example 2: This procedure call disables tab page TAB1, but


** leaves it visible on its underlying tab canvas CAN5:
*/
SET_TAB_PAGE_PROPERTY('can5.tab1', enabled, property_false);

/* Example 3: This procedure call makes tab page TAB1 the


** top-most page on its underlying tab canvas CAN5:
*/
SET_CANVAS_PROPERTY('can5', topmost_tab_page, 'tab1');
Manipulating a tab canvas at runtime
Related Topics
Runtime navigation to and from a tab canvas—and between the canvas' tab pages—is subject to a few rules and
restrictions.
Tab Canvas Navigation At runtime, tab canvases are displayed automatically in response to navigation in the same
manner as content and stacked canvases.
SYSTEM.CURRENT_ITEM and SYSTEM.TRIGGER_ITEM can legitimately not have focus, and may even be invisible,
when a tab canvas has focus. Clicking on a tab canvas gives it focus but does not change SYSTEM.CURRENT_ITEM.
Tab Page Navigation There are a number of ways to switch between tab pages at runtime. The most direct method is to
click the labelled tab at the edge of a tab page. End users also can use the right- and left-arrow keys to switch between tab
pages, but only if the labelled tab has focus (i.e., focus is not in an item or the tab canvas). Switching tab pages in
response to navigation is similar to displaying a hidden stacked canvas in response to navigation: if navigation occurs
between an item on tab page TP1 and and item on tab page TP2, Form Builder automatically displays TP2. If navigation to
an item on another tab page fails (due to validation), Form Builder returns focus to the previous item—not to the tab on
which the previous item is located.

Select Data Tables dialog box


Description The Select Data Tables dialog box enables you to include datasource objects from the connected database
into your query.
This dialog box contains:

Show Specifies whether or not to display tables, views, queries, snapshots, and/or synonyms in the list box.
Drop-down box Specifies from which datasource to display the objects. You can also select a table from a separate account or
database .
Select Data Lists the available datasource objects you can include in your query. Tip
Tables
Info Displays information on the selected object: the kind, name, owner, date it was created, and comments.
Include Includes the selected item into the Query Builder workspace.
Close Closes the dialog box without including a datasource object.

Accessing other accounts in the current database


To access tables in other accounts in the current database:
1. Click the current database name. The Include button becomes an Open button, and the list box displays a list of
accounts in the current database.
2. Click the name of the account you want to open.
3. Click Open, or simply double-click the account name. Query Builder displays a list of tables in that account, and the
Open button again becomes the Include button, enabling you to include tables in the usual manner.

Opening other accounts


If the table you want is not listed in the current database, you can navigate to other accounts and databases and select
tables from those accounts.
To navigate to other accounts and databases:
1. Click the box above the list of tables. You will see two selections: the name of the current database and the word
Databases.
2. To access tables in other accounts in the current database, click here.
If you are unable to connect to a listed database, it may be due to an invalid link caused by a network problem or a
changed remote password. Contact your database administrator for assistance.

Including a table more than once


If you include the same table more than once in a query, duplicate tables are automatically assigned system-generated
alias names composed of the name for the base table, followed by an underscore and an alphanumeric sequence.
Select Related Tables dialog box
Description The Select Related Tables dialog box enables you to include tables that are related to the selected table in the
Query window.
This dialog box contains:

Show This option is not available.


Drop-down box Specifies whether or not to display all related tables.
Select Data Tables Lists the available related tables. Tip
Info Displays information on the selected table: the kind, name, owner, date it was created, and comments.
Include Includes the selected table.
Close Closes the dialog box without including a related table.

Rename Table dialog box


Description The Rename Table dialog box enables you to rename the currently active table.
This dialog box contains:

Default Table Name Specifies the current name of the table.


List box Lists the tables you have open to rename.
New Name Specifies the new table name.
Define Updates the table name while keeping the dialog box open.

Identifying a renamed table


In a stored query, it is not immediately apparent whether a particular table has a user-defined name or its original name.
To find out if a particular table has been renamed:

1. Click in the Icon bar.


2. Click the table in question in the list of Available Tables.
If the table has been renamed, the alias name appears in the New Name: field and a different name (the original table
name) in the Default Table Name: field.

SQL users can also identify renamed tables by clicking in the Icon bar. This brings up the Show SQL dialog box, where
any name changes appear in the SELECT statement in standard SQL syntax for table aliases.

Set Relationship dialog box


Description The Set Relationship dialog box enables you to create simple, self, composite, unmatched, and non-equal
relationships between two tables.
This dialog box contains:

Relationship Specifies the origin (in A->) and target (in B->) column names.
Operator Specifies the type of relationship between the columns.
Use Relationship in Query Specifies if your relationship will be used in the query. Default is checked.
A not found in B radio button Specifies that the data retrieved is all data common to both tables, in addition to data that is in table A,
but not in table B.
B not found in A radio button Specifies that the data retrieved is all data common to both tables, in addition to data that is in table B,
but not in table A.
Suppress Mismatches radio Default. Specifies that the data retrieved is common for both tables.
button

About relationships
A relational database consists of a number of related tables. Each table is made up of columns (sometimes called fields)
which are arranged vertically. Each column has a name, and contains a unique type of data.
Relationships, or joins, define how a column in one table relates to a column in another table. In many cases, the
relationships you need are already defined in the database. Relationships also reduce data redundancy. Whenever there is
a relationship between columns in different tables, you can use the tables together in a query. Note
Related columns do not always share the same names. You can always relate columns that share the same datatype, and
in some instances you can relate columns of different datatypes, if the relationship makes sense. For example, you can
always relate a Number datatype column with a Character column, since a number can also be interpreted as a character.
In fact, almost any column (except long text columns) can be related to Character columns.
Relationships can be user-defined (temporary) or established in the underlying data dictionary Relationships in the data
dictionary automatically appear when you include related tables (tables that have a primary/foreign key relationship). You
do not have to do anything to use these relationships, since they are always valid. These can be created or modified using
the Schema Builder.
User-defined relationships are valid only for the query in which you create them. Creating a user-defined relationship does
not establish a corresponding permanent relationship in the underlying table. The main difference between the two is that
in the case of a user-defined relationship, you must draw the relationship line; in a relationship stored in the database,
Query Builder draws it for you.
Note (Report Builder only): Report Builder data links are not the same as Query Builder relationships. Data links are
created between two or more queries, where Query Builder relationships (or joins) are created within a single query. For
more information, see the Report Builder online help.

Activating and deactivating a relationship


Relationships that you create using the mouse are automatically activated and deactivated as they are needed in a query.
Active relationships are displayed with a heavy black line; inactive relationships are shown as grey lines.
To manually activate a relationship using the mouse:
Double-click an inactive relationship line.
To deactivate a relationship:
Double-click the active relationship line.

Define Column dialog box


Description The Define Column dialog box enables you to create a new column in your query based on values in another
column. Defined columns appear in both the Datasource panel and the Results window.
This dialog box contains:

Defined Columns Specifies the name of the column you want to create.
List box Lists existing defined columns.
Defined as Specifies the expression of the selected column.
Define Applies the definition to the column.
Remove Deletes the selected column.
Paste Column Displays the Paste Column dialog box.
Paste Func Displays the Paste Function dialog box.
Note: The defined column is only a part of your query and will not modify the table definition saved in the database.

Sort dialog box


Description The Sort dialog box enables you to sort the data in your query according to columns in your table.
This dialog box contains:

Available Columns Lists the table columns you can sort in the Results window.
Sorted Columns Lists the table columns that are currently sorted in the Results window.
Copy Copies the selected column from the Available Columns list to the Sorted Columns list.
Remove Removes the selected column from the Sorted Columns list.
Sorting Order Sorts the selected column in Ascending or Descending order. Default is Ascending.

Query Builder Help


Building a new query
Adding conditions to a query
Creating a simple relationship
Defining a column
Sorting query data

About Query Builder


Query Builder is an easy-to-use data access tool designed for analysts, managers, and other business professionals. It
provides a logical and intuitive means to access information from your organization's databases for analysis and
reporting.
Query Builder is designed for professionals who do not have a computer programming or database background. Because
of its powerful query features and its support of Structured Query Language (SQL) statements, experienced database
users and programmers will find that Query Builder serves many of their needs as well.
In Query Builder's graphical Query window , you can specify a request for data from your organization's database(s). The
request for data is called a query.
You can use Query Builder to define almost any query that you would build using a SQL SELECT statement. Query
Builder automatically generates the appropriate SELECT FROM [table.column] clause based on columns displayed in the
Query Builder workspace.

Column Sequence dialog box


Description The Column Sequence dialog box enables you to adjust your query results in the Query Builder workspace.
This dialog box contains:

Available Columns Lists the table columns you can display in the Query Builder workspace. Tip
Displayed Columns Lists the table columns that are currently displayed in the Query Builder workspace.
Copy Copies the selected column from the Available Columns list to the Displayed Columns list.
Remove Removes the selected column from the Displayed Columns list.
Format Displays the Format dialog box.
Totals Displays the Totals dialog box.
Execute Runs the query.

Paste Column dialog box


Description The Paste Column dialog box enables you to paste an existing column from a selected table into your query.
This dialog box contains:

List box Lists the columns you can paste. Tip

Paste Function dialog box


Description The Paste Function dialog box enables you to paste a function into your condition or query.
This dialog box contains:

Show Specifies the types of functions that display in the list box: number, character, date, conversion, group, other.
Categories
List box Lists the available functions under the selected category.
Paste Specifies whether or not to include the argument (the expression within the parentheses of a function that supplies
Arguments information for the function to use).

Show SQL dialog box


The Show SQL dialog box displays the SQL statements for your query thus far. You cannot edit or copy the SQL
statements in the Show SQL dialog box.

The column or columns that uniquely identify each row of a table. Primary keys appear in bold.

A column that refers to the primary key values in another table. Foreign keys appear in italics.

The sources from which a query retrieves data, including tables, views, queries, synonyms, and snapshots.
A datasource made up of columns from one or more database tables combined into one logical table.

A string consisting of a function or operation and the database column(s) to be operated on (for example,
SALARY+COMMISSION).

To conform to naming conventions, each query name must begin with a letter and can contain up to 30 letters and
numbers. If you don't use naming conventions when naming database queries, Query Builder will convert the name to a
"literal" value (enclosed in double quotes).

About the Conditions panel


The Conditions panel is a section of the Query window that contains the Condition field, where you enter expressions
and conditions. Query Builder conditions automatically generate WHERE or HAVING clauses, as appropriate.
The table and column names indicate which columns will be filtered in the condition. You may omit the table name if the
column name is unique. Tip
Note: When you activate the Condition field, the cursor will have a (+) sign, indicating that any item you click on will be
added to your condition. To deactivate this, you can click in the Icon Bar.

About the Query window


When you open a query, Query Builder displays it in the Query window, split into two panels:

the Conditions panel, where the Condition field is located. It is used to refine the query.

the Datasource panel, which displays the tables (views, snapshots, and so forth) used in the query.
Depending on your preferences, the panels may be split vertically or horizontally.
Each table is displayed in a box containing the name of the table and the names of columns in that table. There are a
number of icons that help identify the current database object. The icons indicate whether descriptive comments are
attached, the type of datasource, the column's datatype, and whether indexes have been defined for tables in the query.
Lines are drawn to indicate the relationships between columns. Relationships are set up between tables to identify how a
column in one table relates to a column in another table.
A check mark to the left of the column name indicates the column has been included in the query. This means that Query
Builder will search for data corresponding to the column name when you run the query. No check mark indicates that
column's data will not be included.

About the Datasource panel


The Datasource panel is the section of the Query window where items, such as tables and relationships, display.

About the Icon Bar


The Icon Bar displays at the top of the Query Builder window. Click on each icon to view a description.
frm00052.gif

QBICON1.gif

Save icon
Saves your query to the specified file.

Cut icon
Cuts the selected text and places it on your operating system's clipboard.

Copy icon
Copies the selected text onto your operating system's clipboard while the original text remains intact.
Paste icon
Pastes the current clipboard items into the active location. If there is nothing on the clipboard, nothing will be pasted. You
can paste any text that you have cut or copied.

Clear icon
Removes the selected item (i.e., text, table). Unlike the Cut command, Clear does not place the removed item(s) on your
operating system's clipboard.

Select All icon


Selects every item in the active window. For example, if the Conditions panel is active, all conditions in the panel will be
selected.

Select Data Tables icon


Displays the Select Data Tables dialog box.

Select Related Tables icon


Displays the Select Related Tables dialog box. This icon is available only when the table you have selected has a related
table in the connected database.

Rename Table icon


Displays the Rename Table dialog box. This icon is available only when there is at least one table in the Query Builder
workspace.

Get Info icon


Displays the Info dialog box and information on the selected database object. This icon is available only if a datasource
object is active.

Set Table Relationship icon


Displays the Set Relationship dialog box. This icon is available only when there is more than one table in the Datsource
panel to relate.

Show SQL icon


Displays the Show SQL dialog box and the SQL for the active query.

Column Sequence icon


Displays the Display dialog box.

Define Column icon


Displays the Define Column dialog box.

Sort icon
Displays the Sort dialog box.

And icon
Inserts the AND operator into your condition. This icon is available only when the Condition field is active. You can also
type AND directly into the Condition field.

Or icon
Inserts the OR operator into your condition. This icon is available only when the Condition field is active. You can also
type OR directly into the Condition field.

Not icon
Inserts the NOT operator into your condition to negate your condition. This icon is available only when the Condition field
is active. You can also type NOT directly into the Condition field.

Ungroup Conditions icon


Ungroups conditions that are combined with logical operators, such as AND, OR, NOT. This icon is available only when
you have selected a logical operator in the Conditions panel.

Accept icon
Validates and accepts the active condition. This icon is available only when the Condition field is active. You can also press
the Enter or Return key when the Condition field is active to accept and validate your condition.

Cancel icon
Cancels the current condition. This icon is available only when the Condition field is active.

Paste Column icon


Displays the Paste Column dialog box. This icon is available only when the Condition field is active.

Paste Function icon


Displays the Paste Function dialog box. This icon is available only when the Condition field is active.

About datatypes
The most common datatypes in Query Builder are:

CHAR or CHAR is used for fixed length character data, to a maximum size of 255 bytes and a default size of 1 byte.
VARCHAR2 VARCHAR2 is for variable length character strings to a maximum size of 2000 bytes. You must specify size for
VARCHAR2.
NUMBER NUMBER indicates that the database column contains numbers (integers, decimals, or any other type of numeric
values). You can perform calculations on numbers represented in the NUMBER datatype, but not on numbers
represented by the CHAR datatype.
DATE DATE indicates that the database column contains date values. Valid dates ranging from January 1, 4712 BC to
December 31, 4712 AD. Default format is DD-MON-YY as in '01-JAN-92'.
NUMBER(p,s) The range of p (decimal precision) is 1 to 38. The range of s (scale) is -84 to 127. Decimal precision is the number of
digits to store. The scale is the number of digits to the right of the decimal point. If the scale is negative, the actual data
is rounded to the specified number of places to the left of the decimal point. For example, a specification of (10, -2)
means round to the hundreds.
Additionally, Query Builder provides limited support for the following Oracle datatypes:

LONG A LONG column contains alphanumeric data of variable length up to 2 gigabytes (or 231-1). When you include a LONG
column in a Query Builder query, the first 2000 characters are displayed.
RAW Raw binary data. Maximum size is 255 bytes. Values must be inserted as character strings in hexadecimal notation. Values
are displayed in hexadecimal. You must specify size for RAW datatypes.
LONG LONG RAW displays raw binary data up to 2 gigabytes (this appears in hexadecimal in the Results window). LONG RAW
RAW datatypes are subject to the same limits as RAW datatype.
Note: Query Builder supports datatype conversions in cases where conditions and expressions reference different
datatypes in their comparison. Refer to the Oracle8 Server SQL Language Reference Manual for additional information.

Datatype icons
The following supported datatypes for all the columns in a datasource object are represented by icons located in the right
hand column of the object in the Query Builder workspace.

Datatype Icon Description


Character Use the Character datatype for fixed length character data, to a maximum size of 255 bytes and a default size of 1
byte.
Note: You can represent numbers using the Character datatype, but you can only perform calculations with numeric
datatypes.
Varchar2 Use the Varchar2 datatype for variable length character strings, to a maximum size of 2000 bytes. You must specify
a size for the Varchar2 datatype.
Number Use the Number datatype for integer or floating data. You must enter a precision length (number of digits) for
integer data. Floating datatype is for decimal numbers. When you assign this datatype to a column, you must
specify both the precision and the scale.
The precision (total number of digits in the number) can range from 1 to 38.
The scale (number of digits to the right of the decimal point) can range from -84 to 127. If the scale is negative, the
actual data is rounded to the specified number of places to the left of the decimal point.
For example, a specification of (10,2) means 10 digits with 2 to the right of the decimal point. A specification of
(10,-2) effectively means a 10-digit integer, rounded to the nearest hundred.
Date Use the Date datatype for any type of date. Valid dates range from January 1, 4712 BC to December 31,4712 AD.
The default date format is DD-MON-YY, as in ‘01-JAN-97.’
Long Use the Long datatype for long text fields of alphanumeric data of variable length, up to 2 gigabytes.
Raw Use the Raw datatype for raw binary data. The maximum size is 255 bytes. Values must be inserted as character
strings in hexadecimal notation, and values are displayed in hexadecimal. You must specify a size for raw data.
Long Raw The Long Raw datatype is for storing up to 2 gigabytes of raw binary data (which is entered and displayed in
hexidecimal form). Long Raw datatypes do not require a specified size.
MLSLABEL Use the MLSLABEL datatype for storing the binary format of a label used on a secure operating system. Labels
are used by Trusted ORACLE to mediate access to information. You can also define columns with this datatype if
you are using the standard ORACLE Server. For more information on Trusted ORACLE, including this datatype
and labels, see the Trusted ORACLE8 Server Administrator's Guide .

Datasource object notation


Shown below is an example of two datasource objects, linked by a relationship.
Click any icon, indicator, or part of these objects to display a description.

Object type indicator


The icon in the upper left corner of any datasource object indicates its type:
Table
View
Query
Snapshot
Synonym

Object title
This is the name of the datasource object. You can change the name by clicking on the object title.

Comment indicator
This icon indicates that this object (or column) has a comment associated with it. Double-click this icon to open the Info
dialog box, where you can view the comments.

Column Name
This is the name of one of the columns in this object. If you double-click a column name, the column will be included in
your query.

Datatype indicators
These icons indicate the datatypes of their respective columns. vartypes.gif
If you click and hold on one of these icons, a pop-up menu appears, and you can choose a different datatype.

Relationship line
A gray line drawn between two columns indicates that a relationship has been created between the columns at either end
of the line. The line is drawn from the foreign key to the primary key .

Self-relationship indicator
This icon indicates that a self-relationship has been created between this column (foreign key) and another column
(primary key) in the same table.

Primary key
A column name displayed in boldface indicates that this column has been defined as a primary key for the object.

Foreign key
A column name displayed in italics indicates that this column is a foreign key, related to a primary key in another column.
Setting up a relationship between two columns is the only way to define a foreign key.

Instead of selecting a table and clicking Include, you can double-click each target table to move it into the Query Builder
work area. To include a range of tables, hold down the SHIFT key while clicking the first and last tables in the range.

Although you can set relationships using this dialog box, you should use the mouse method to create relationships
wherever possible. For relationships created this way, Query Builder automatically activates and deactivates the
relationship lines for you.

If a column has a highlighted check beside it, that means the column appears in the SELECT statement and will be
displayed in the query results. If the column has an gray check beside it, the column is used as sort or group criteria.

In general Query Builder allows you to relate any columns that can be interpreted using the implicit conversion feature of
the Oracle database. For technical information on implicit conversions, refer to the Oracle8 Server SQL Language
Reference Manual.

The expression in the Defined As field typically consists of a function or operation and the database column(s) to be
operated on. If the column name occurs in more than one table, remember to reference the table name as well, and
separate it from the column name with a period. If the column name is unique, you can specify just the column name.

Renaming a table does not result in any corresponding change in its underlying name in the database. The new name is
valid only for the active query; it remains in the query if you save it.

To display the Set Relationship dialog box, click in the Icon Bar.

To display the Select Tables dialog box, click in the Icon Bar.

To display the Rename Table dialog box, click in the Icon Bar.

When you select a column object from a table, Query Builder automatically uses the table alias in your query. Likewise, if
you include a column object in the Condition field and accept the condition, Query Builder automatically inserts the
appropriate table aliases into your condition.
You can select (or deselect) a column in either of the following ways:

Check (or uncheck) the check box next to the column.


OR
Double-click on the column name.

About Query Builder functions


A function is similar to an operator in that it manipulates data items and returns a result. Functions differ from operators in
the format in which they appear with their arguments. This format allows them to operate on any number of arguments,
including none. Every time you associate a column with a function name, Query Builder performs the defined operation on
the value(s) in that column.
Functions that you can use with queries in Query Builder are:

number functions

character functions

character functions returning numeric values


conversion functions

date functions

group functions

other functions
Additional Information: For information about any of the other functions, refer to the Oracle8 Server SQL Language
Reference Manual.

Functions and arguments


A function is used to manipulate data in a particular column. Each function can take one or more arguments. An argument
is an expression within the parentheses of a function supplying information for the function to use.
An example is the function ROUND, which rounds a number to the degree you specify. If you enter the expression
ROUND (CREDIT_LIMIT, -2), Query Builder would round each value for CREDIT_LIMIT to the nearest hundred. If you
enter ROUND(CREDIT_LIMIT, 1), Query Builder would round the values for CREDIT_LIMIT to the nearest 10th.
The values used within arguments are:

Argument Description
Value
char, set, Character constant surrounded by single quotation
search,
replace marks or an expression returning character data.
d, e Date constant surrounded by single quotation marks, or an expression returning date data.
m, n Any number constant or expression returning numeric data.
x Argument type depends on the context of the function.
expr An expression of any type.
fmt A format used to change the display of data or to enter data into a Query Builder field or condition in a format other
than the default format.

Number functions
Number functions accept numeric data and return numeric data. You can use number functions when defining columns
and conditions.

Function Description
(arguments)
ABS(n) Absolute value of n.
CEIL(n) Smallest integer greater than or equal to n.
COS(n) Returns the cosine of n (an angle expressed in radians).
COSH(n) Returns the hyperbolic cosine of n.
EXP(n) Exponential notation. Returns e (2.71828183...) raised to the nth power.
FLOOR(n) Largest integer equal to or less than n.
LN(n) Returns the natural log of n, where n is greater than 0.
LOG(m,n) Returns the logarithm, base m, of n. The base m can be any positive number other than 0 or 1, and n can be any
positive number.
MOD(m,n) Remainder of m divided by n.
POWER(m,n) m raised to the nth power. If n is not an integer, it will be truncated
ROUND(n[,m]) n rounded to m decimal places; if m is omitted, to 0 places. m may be negative to round digits left of the
decimal point.
SIGN(n) If n<0, -1; if n=0, 0; if n>0, 1.
SIN(n) Returns the SINE of n (an angle expressed in radians).
SINH(n) Returns the hyperbolic sine of n.
SQRT(n) Square root of n; if n<0, NULL.
TAN(n) Returns the tangent of n (an angle expressed in radians).
TANH(n) Returns the hyperbolic tangent of n.
TRUNC(n[,m]) n truncated to m decimal places; if m is omitted, to 0 places. m may be negative to truncate (make zero) digits
left of the decimal point.

Character functions
You can use character functions that accept character data and return character data when defining columns and
conditions.

Function (arguments) Description


CHR(n) The character with having the binary equivalent to n in the database character set.
CONCAT(char1,char2) Returns char1 concatenated with char2. This function is equivalent to the concatenation operator
(||).
INITCAP(char) char, with first letter of each word capitalized. Words are delimited by white space or characters
that are not alphanumeric.
LOWER(char) char, with all letters forced to lowercase.
LPAD(char1,n[,char2]) char1, left-padded to length n with the sequence of characters in char2, replicated as many times
as necessary; if char2 is omitted, with blanks.
LTRIM(char[,set]) char, with initial characters removed up to the first character not in set. set defaults to ` ' (a single
blank).
NLS_INITCAP(char [,nlsparams]) Returns char, with the first letter of each word capitalized. Words are delimited by white space or
characters that are not alphanumeric. The parameters specified in nlsparams can have the form
NLS_SORT=sort where sort is a linguistic sort sequence for your session or BINARY. If you specify
BINARY, this function returns char. For information on sort sequences, refer to the Oracle8 Server
Concepts Manual.
NLS_LOWER(char[,nlsparams]) Returns char, with all letters forced to lowercase.
See NLS_INITCAP for the nlspa-rams argument.
NLS_UPPER(char[,nlsparams]) Returns char, with all letters forced to uppercase. See NLS_INITCAP for the nlspa-rams
argument.
REPLACE(char,search[,replace]) char, with every occurrence of search replaced with replace. If replace is not supplied, all
occurrences of search are removed.
RPAD(char1,n[,char2]) char1, right-padded to length n with the characters in char2, replicated as many times as
necessary; if char2 is omitted, with blanks.
RTRIM(char[,set]) char, with final characters removed after the last character not in set. set defaults to ` ' (a single
blank).
SOUNDEX(char) A char value representing the sound of the word(s) in char.
SUBSTR(char,m[,n]) A substring of char, beginning at character m, n characters long if n is omitted.
SUBSTRB(char,m[,n]) Same as SUBSTR, except that the arguments m and n are expressed in bytes, rather than
characters. For a single byte database character set, SUBSTRB is the same as SUBSTR.
UPPER(char) char, with all letters forced to uppercase.

Character functions returning numeric data


You can use character functions to return numeric data when defining columns and conditions.

Abbreviation Description
ASCII (char) ASCII value of first character of char.
INSTR(char1,char2[,n[,m]]) The position of the nth occurrence of char2 in char1, beginning search at position n. If m is omitted, 1
is assumed. If n is omitted, 1 is assumed. Position is given relative to the first character of char1, even
when n>1.
INSTRB(char1,char2[,n[,m]]) Same as INSTR, except that n and the returned value are expressed in bytes, rather than characters.
For a single-byte database character set, INSTRB is the same as INSTR.
LENGTH(char) The length, in characters, of char.
LENGTHB(char) Same as LENGTH, except that char is expressed in bytes, rather than characters. If char is NULL, this
function returns NULL. For a single-byte database character set, LENGTHB is the same as LENGTH.
NLSSORT(char[,nlsparams]) Returns the string of bytes used to sort char. The parameters specified in nlsparams can have the
form NLS_SORT=sort where sort is a linguistic sort sequence for your session or BINARY. If you
specify BINARY, this function returns char. For information on sort sequences, refer to the Oracle8
Server Concepts Manual.

Conversion functions
You can use conversion functions to convert data from one datatype to another when defining columns and conditions.

Abbreviation Description
TO_CHAR (d[,fmt]) Converts d to a char value in the format specified by the char value fmt. If fmt is omitted, d is converted to a
char value in Query Builder's default date format, DD-MON-YY.
TO_CHAR(n[,fmt]) Converts n to a char value in the format specified by the char value fmt. If fmt is omitted, n is converted to a
char value exactly long enough to hold the significant digits.
TO_DATE(char[,fmt]) Converts a date from a char value to a date value. fmt is a char value specifying the format of char. If fmt is
omitted, char must have the Query Builder default date format, DD-MON-YY.
TO_DATE(n,[fmt]) Converts a number into a date. fmt must be a format that, when used with TO_CHAR, produces a DATE (e.g.,
J or MM).
TO_LABEL(char[,fmt]) Converts char, a value of datatype CHAR or VARCHAR2 containing a label in the format fmt, to a value of
MLSLABEL datatype. If you omit fmt, char must be in the default label format.
TO_MULTI_BYTE Returns char with all of its single-byte characters converted to their corresponding multi-byte characters. Any
(char) single-byte characters that have no multi-byte equivalents appear in the output string as single-byte. (This
function is only useful if your database character set contains both types.)
TO_NUMBER (char) Converts char, character data containing a number, to numeric data.
TO_SINGLE_BYTE Returns char with all of its multi-byte characters converted to their corresponding single-byte characters. Any
(char) multi-byte characters that have no single-byte equivalents appear in the output string as multi-byte. (This
function is only useful if your database character set contains both types.)

Date functions
All date functions return date data except MONTHS_BETWEEN, which returns numeric data. You can use these functions
when defining columns and conditions.

Abbreviation Description
ADD_MONTHS (d,n) Date d plus n months.
LAST_DAY(d) Date of last day of month containing d.
MONTHS_BETWEEN(d,e) Number of months between dates d and e. If d is later than e, result is positive; if earlier, negative.
NEW_TIME(d,a,b) Date and time in time zone b when date and time in time zone a are d. a and b are char expressions with
the following meaning:
AST, ADT: Atlantic Standard or Daylight Time
BST, BDT: Bering Standard or Daylight Time
CST, CDT: Central Standard or Daylight Time
EST, EDT: Eastern Standard or Daylight Time
GMT: Greenwich Mean Time
HST, HDT: Alaska-Hawaii Standard or Daylight Time
MST, MDT: Mountain Standard or Daylight Time
NST: Newfoundland Standard Time
PST, PDT: Pacific Standard or Daylight Time
YST, YDT: Yukon Standard or Daylight Time
NEXT_DAY(d,char) Date of first day of week named by char that is equal to or later than d.
ROUND(d[,fmt]) d rounded as specified by the rounding unit fmt; if fmt omitted, the nearest day.
SYSDATE Current date and time. Requires no arguments.
TRUNC(d[,fmt]) d with time of day truncated up to the specified truncation unit, fmt; if fmt omitted, the time of day is
removed.
Additional Information: Refer to the Oracle8 Server SQL Language Reference Manual for a table of format models to be
used with the ROUND and TRUNC date functions.

Group functions
Group functions retrieve data based on groups of rows rather than one result per row. Group functions perform
operations such as average, count, sum, and standard deviation.
You can also use group functions to define a new column, and the entire result is treated as one group when you display
no other columns. Displaying other columns will divide the result into smaller groups. You can use group functions in
conditions, but only with a comparison operator, so the entire result is treated as one group. For example, the condition
SALARY > AVG(SALARY) is true when the value of SALARY in the current row is greater than the average of SALARY in
all of the rows.
Group functions can be used with the DISTINCT or ALL options. DISTINCT makes a group function consider only distinct
functions of an expression. For example, the average of 1, 1, 1, and 3 is 1.5; the DISTINCT average is 2. ALL causes a
group function to consider all values, including duplicates.
All of the following group functions skip null values except COUNT(*). The datatype of the arguments may be character,
number, or date where expr is listed.

Function (argument) Description


AVG([DISTINCT|ALL]n) Average value of n, ignoring null values.
COUNT([DISTINCT|ALL] expr) Number of rows where expr is not null.
COUNT(*) Number of rows in the table, including duplicates and those with nulls.
GLB([DISTINCT|ALL] label) Returns the greatest lower bound of label.
LUB([DISTINCT|ALL] label) Returns the least upper bound of label.
Additional Information: GLB and LUB return values of the MLSLABEL datatype. For more information about the GLB and
LUB functions, refer to the Trusted Oracle8 Server Administrator's Guide .

Function (argument) Description


MAX([DISTINCT|ALL] expr) Maximum value of expr.
MIN([DISTINCT|ALL] expr) Minimum value of expr.
STDDEV([DISTINCT|ALL]n) Standard deviation of n, ignoring null values, based on an n-1 (sample) calculation.
SUM([DISTINCT|ALL] n) Sum of values of n.
VARIANCE([DISTINCT|ALL] n) Variance of n, ignoring null values.

Other functions
Query Builder also accepts these functions:

Function (argument) Description


USER Returns the name of the current Oracle user. Requires no arguments.
DECODE(expr,search1, If expr equals any search, returns the following replace; if not, returns default. If default is omitted and
replace1[,search2, there is no match, NULL is returned. expr may be any datatype; search must be the same type. The
replace2,] ... [default]) value returned is forced to the same datatype as the first return.
GREATEST(expr1,expr2,...) Returns the greatest of a list of values. All expr after the expr1 are converted to the type of the expr1
before the comparison is done.
GREATEST_LB(label[,label] Returns the greatest lower bound of the list of labels. Each label must either have datatype MLSLABEL
...) or RAW MLSLABEL or be a quoted literal in the default label format. The return value has the datatype
RAW MLSLABEL.
LEAST(expr1,expr2,...) Returns the least of a list of values. All expr after the expr1 are converted to the type of the expr1 before
the comparison is done.
LEAST_UB(label[,label] ...) Returns the least upper bound of the list of labels. Each label must have datatype MLSLABEL or be a
quoted literal in the default label format. The return value has the datatype RAW MLSLABEL.
NVL(x,expr) If x is null, returns expr; if x is not null, returns x. x and expr may be of any type. The type of the returned
value is the same as the type of x.
Additional Information: For more information about the GREATEST_LB and LEAST_UB functions, refer to the Trusted
Oracle8 Server Administrator's Guide.

Query Builder messages Builder messages


Click a message range, then page using the browse buttons to find the message you are looking for.
BRW-15000 through BRW-15092
BRW-15093 through BRW-15146
BRW-15147 through BRW-15196
BRW-15197 through BRW-15390
BRW-15391 through BRW-15424
BRW-15430 through BRW-15520
BRW-15521 through BRW-15569
BRW-15570 through BRW-15912
BRW-15913 through BRW-16551
BRW-16552 through BRW-16660

BRW-15000: Internal error in Oracle Query Builder error handler


Cause: Error handler couldn't be started.
Action: Contact Oracle Customer Support .

BRW-15001: <message number>


Cause: The message file could not be found or is incompatible with this version of Query Builder.
Action: Check the Query Builder directory in Oracle Home for the proper message file.

BRW-15002: Out of memory!


Cause: Out of memory.
Action: Save documents and restart Oracle Query Builder.

BRW-15003: Invalid file name: <name>


Cause: User entered an invalid file name (for example, too many characters).
Action: Enter a new, valid file name.

BRW-15004: Internal error (<value1>:<value2>)


Cause: Internal Error Occurred--Oracle Query Builder is in an unreliable state.
Action: Contact Oracle Customer Support .

BRW-15005: No file name specified


Cause: User did not enter a filename in the Export Data dialog box.
Action: Enter a filename.

BRW-15006: Unable to DESCRIBE data table


Cause: Internal message.
Action: Contact Oracle Customer Support .

BRW-15007: SQL statement is too complex to display


Cause: Exceeded the edit buffer size on MSWINDOWS.
Action: Exclude some columns from the query to reduce the SQL statement size.

BRW-15009: Insufficient privileges to log in through Oracle Query Builder


Cause: Connect privileges are disabled in the SYSTEM.BROWSER_PROFILE table.
Action: Contact your DBA.

BRW-15065: Syntax error


Cause: User typed a formula incorrectly.
Action: Re-type the expression.

BRW-15066: Expression is too complex


Cause: Expression is too complex.
Action: Simplify the expression.

BRW-15068: Invalid function: <name>


Cause: User entered an invalid function name.
Action: Specify a valid function.

BRW-15069: Invalid column: <name>


Cause: User entered an invalid column name.
Action: Enter a valid column name.

BRW-15070: Invalid table: <name>


Cause: User entered an invalid table name.
Action: Enter a valid table name.

BRW-15071: Invalid owner: <name>


Cause: User entered an invalid user or business area name.
Action: Enter a valid user or business area name.

BRW-15072: Invalid condition


Cause: User entered an invalid condition.
Action: Delete the condition and enter a valid condition.

BRW-15073: Invalid expression


Cause: User entered an invalid expression (usually blank).
Action: Enter a valid expression.

BRW-15074: Invalid use of reserved word <name>


Cause: User used a reserved word as an identifier.
Action: Identifiers cannot be reserved words. Refer to the help or documentation for details.

BRW-15075: Invalid number of arguments to function <name>


Cause: User entered too few or too many arguments for the given function.
Action: Enter the appropriate arguments. Refer to the help or documentation for details.

BRW-15077: Ambiguous name: <name>


Cause: User entered an ambiguous column name.
Action: Enter a specific column name. You may have to include qualifiers.

BRW-15078: Redefinition of name: <name>


Cause: User redefined a column or data table using a name that already exists.
Action: Define the column or table using a new name.

BRW-15079: No columns selected in query


Cause: Query was either built or entered with no displayed columns.
Action: Select columns before re-executing the query.

BRW-15080: No tables specified in query


Cause: User entered a query without specifying any tables.
Action: Select tables before re-executing the query.

BRW-15081: START WITH requires CONNECT BY


Cause: SQL statement contained a START WITH clause without a CONNECT BY clause.
Action: Specify a CONNECT BY clause if you intend to use START WITH.

BRW-15082: PRIOR requires CONNECT BY


Cause: SQL statement contained a PRIOR clause without a CONNECT BY clause.
Action: Specify a CONNECT BY clause if you intend to use PRIOR.

BRW-15083: Bad argument type to function <name>


Cause: User entered the wrong argument type for the function.
Action: Enter the correct argument type.

BRW-15084: Unterminated comment


Cause: Buffer being read in has an unterminated C-type comment in it.
Action: Edit the file (see that it terminates correctly) and reopen from Query Builder.

BRW-15085: Circular reference detected in defined column


Cause: Modification of a defined column has led to a circular reference.
Action: Redefine the column so that it doesn't refer to itself in its own definition.

BRW-15086: Arguments to a correlated subquery function must be columns


Cause: A complex argument was given, such as avg (sal, deptno*2).
Action: Specify only valid columns, not expressions, in the subquery.

BRW-15087: Invalid location: <name>


Cause: User entered an invalid database location for a table.
Action: Enter a valid database location.

BRW-15088: Ambiguous table: <name>


Cause: User entered an ambiguous data table name (more than one table uses this name).
Action: User must further qualify the data table. Refer to the help or documentation for details.

BRW-15089: Only one PRIOR operator allowed on an expression


Cause: User typed 2 or more PRIOR clauses in an expression.
Action: Remove one of the PRIOR clauses.

BRW-15090: The name <name> is already in use


Cause: User entered a name that was already being used.
Action: Enter a new name.

BRW-15091: Invalid name: <name>


Cause: User entered an invalid name (with spaces or unprintable chars).
Action: Enter a new name.

BRW-15092: Bad usage of outer relationship


Cause: User specified an outer relationship on a non-column element.
Action: Outer relationships are only valid for columns.

BRW-15093: Invalid number of elements in corresponding record


Cause: User entered two records with different numbers of elements.
Action: Re-enter the condition.

BRW-15094: Group function is nested too deeply


Cause: User entered a double(triple) aggregate condition(expression).
Action: Simplify aggregate condition/expression.

BRW-15096: Table name conflicts with <name1>, renamed to <name2>


Cause: When opening a query, a table alias name conflicts with a new column.
Action: User can rename the alias.

BRW-15097: Name conflicts with <name1>, renamed to <name2>


Cause: When loading a saved query, an alias name conflicts with a new column.
Action: Rename the alias.

BRW-15098: Duplicate table <name> in FROM clause


Cause: Data table appears more than once in FROM clause (without an alias).
Action: Remove the duplicate data tables in the FROM clause.

BRW-15099: Subquery returns incorrect number of values


Cause: Subquery returns either too many or too few values.
Action: Re-enter the condition.

BRW-15100: Correlated expressions are not allowed here


Cause: User entered a correlated expression outside a condition.
Action: Re-enter the condition/expression.

BRW-15101: Table alias cannot be reused in the same FROM clause: <name>
Cause: User tried to use an alias in the same FROM clause it was defined in.
Action: Remove the reference to the alias.

BRW-15102: Too many elements in record


Cause: User entered a record with more than 254 elements.
Action: Reduce the number of elements--split the condition into an OR.

BRW-15103: Unnamed SELECT statement in FROM clause


Cause: SQL contained a query in the FROM clause without name.
Action: Add the query name and reparse.

BRW-15110: Invalid number or precision exceeded: <column name>


Cause: Non-numeric input or the number exceeded this column's precision.
Action: Re-enter a valid number and precision.

BRW-15111: Invalid date: <value>


Cause: Couldn't format using the columns format mask or either default mask.
Action: Re-enter a valid format mask.

BRW-15112: Entry exceeds the size limit for this column: <##>
Cause: User entered a string longer than the limit for this column.
Action: Enter a shorter string.

BRW-15113: Not all parameters have been specified


Cause: User attempted to execute a query without defining all parameters
Action: Specify parameters or exclude parameterized expressions and retry.

BRW-15114: Parameters can only be constant expressions


Cause: User attempted to enter a parameter value that depended on a column value.
Action: Specify a valid parameter, one that does not depend on the value in a column.

BRW-15115: Bad usage of parameter <name>


Cause: User entered a parameter name for a column or table.
Action: Specify a valid parameter.

BRW-15116: Invalid parameter name <name>


Cause: User entered an invalid parameter name.
Action: Specify a valid parameter name.

BRW-15117: Invalid parameter <name>


Cause: User entered an invalid parameter.
Action: Specify valid parameter.

BRW-15128: Parser internal error: <value>


Cause: Internal error in the parser/scanner.
Action: Contact Oracle Customer Support .

BRW-15129: Defined column <name> cannot be used in correlated subquery function


Cause: Use of derived columns (DQ4) in correlated subquery.
Action: Remove that argument from the correlated subquery.

BRW-15130: Query execution failed


Cause: Database access error.
Action: Check database error and rerun query.

BRW-15131: Invalid relational operator


Cause: User applied an invalid operator to a condition.
Action: Enter a valid operator.

BRW-15132: FROM clause was not found where expected


Cause: Encountered no FROM clause or GROUP/HAVING clause before a FROM clause.
Action: Edit SQL statement.

BRW-15133: FROM clause was found without corresponding SELECT clause


Cause: Encountered FROM clause before SELECT clause.
Action: Edit SQL statement.

BRW-15135: Condition cannot be changed


Cause: User attempted to change the top condition in Schema Editor.
Action: Perform the operation on the children conditions.

BRW-15136: SQL contains set operators


Cause: Set operations are not supported.
Action: Run the query in SQLPlus.

BRW-15137: Unable to generate names for complex expressions


Cause: Encountered expressions without names when opening a SQL file.
Action: Define Names for columns in the .sql file.

BRW-15138: CONNECT BY clause existed, and was ignored


Cause: Connect By is not supported at this (top) level.
Action: Run the query in SQLPlus, if results of CONNECT BY were desired.

BRW-15139: Cannot ungroup condition


Cause: Attempt to ungroup top condition.
Action: This operation is not supported.

BRW-15141: Query table cannot contain parameters


Cause: Encountered one or more parameters when creating a view.
Action: Exclude parameters from query or ignore.

BRW-15142: Two or more columns have the same name: <name>


Cause: Encountered duplicate column names when creating view.
Action: Use the Define command to rename duplicate columns.

BRW-15143: <name> is already a display column


Cause: User tried to specify a duplicate display column.
Action: If duplicate column is desired, define a new name for it and re-display it.

BRW-15144: <name> is already a sort column


Cause: User tried to specify a duplicate sort column.
Action: If duplicate column is desired, define a new name for it and re-sort.

BRW-15145: <name> is already a group column


Cause: User tried to specify a duplicate group column.
Action: If duplicate column is desired, define a new name for it and re-group.

BRW-15146: Internal error in opening query


Cause: Internal error in opening query.
Action: Contact Oracle Customer Support .

BRW-15147: Internal error in saving query


Cause: Internal error in saving query.
Action: Contact Oracle Customer Support .

BRW-15148: Relationship must be between compatible data types/size


Cause: User tried to relate two columns with incompatible data types.
Action: Relate only compatible datatypes. Refer to the help or documentation for details.

BRW-15150: Cannot define a self-relationship


Cause: User tried to define a relationship within a data table.
Action: Alias the data table and then define the relationship.

BRW-15151: User-defined relationship already exists


Cause: User tried to define a relationship that already exists.
Action: No action required.

BRW-15152: Illegal column in defined relationship


Cause: User specified an illegal expression when defining a relationship.
Action: Retype in a new column.

BRW-15153: Table alias name cannot end with _A<number>


Cause: Illegal alias name.
Action: Input a new name that does not end with _A<number>.

BRW-15154: Cannot remove database relationship


Cause: User tried to remove data dictionary relationship.
Action: Only user-defined relationships can be deleted.

BRW-15155: The following documents may have been affected:<name>


Cause: A saved query was being used as a data table in other query documents.
Action: If you change or delete this query, you will affect these other queries.

BRW-15156: Cannot include table with the same name as the query
Cause: User attempted to include data table D in query document D.
Action: Rename the query before including this table.

BRW-15157: Cannot sort, group, or break on LONG columns


Cause: Trying to sort, group or break on LONG column type.
Action: Cancel the operation. Oracle does not support this.

BRW-15158: Cannot sort, group, or break on RAW columns


Cause: Trying to sort, group or break on RAW column type.
Action: Cancel the operation. Oracle does not support this.

BRW-15159: Cannot display LONG columns from remote databases


Cause: Trying to include LONG column type from remote database data table.
Action: Cancel the operation. Oracle does not support this.

BRW-15160: Maximum number <##> of columns exceeded


Cause: User exceeded maximum number of display/group/sort columns supported.
Action: Delete some unwanted columns, then re-include what you need.

BRW-15161: Error in opening <column name> display column(s)


Cause: Unable to open DISPLAY column because database has changed since save.
Action: This column may have changed or no longer exists in the database.

BRW-15162: Error in opening <column name> sort column(s)


Cause: Unable to open SORT column because database has changed since save.
Action: This column may have changed or no longer exist in the database.

BRW-15163: Error in opening <column name> group column(s)


Cause: Unable to open GROUP column because database has changed since save.
Action: This column may have changed or no longer exist in the database.

BRW-15164: Error in opening <column name> break column(s)


Cause: Unable to open BREAK column because database has changed since save.
Action: This column may have changed or no longer exist in the database.

BRW-15165: Maximum number <##> of break columns exceeded


Cause: User exceeded the maximum number of break columns supported.
Action: Delete some unwanted break columns, then re-include what you need.

BRW-15166: Error in opening <value> condition(s)


Cause: Unable to open conditions because database has changed since save.
Action: Tables or columns used in this condition may no longer exist in the database.

BRW-15167: Alias must be <##> bytes or less: <name>


Cause: Alias name too long.
Action: Try typing in an alias less than or equal to 30 bytes long.

BRW-15168: Cannot group on aggregate expression


Cause: Tried to group on an aggregate expression.
Action: Group on another expression.

BRW-15169: <name> has already been included as a break column


Cause: User tried to specify a duplicate break column.
Action: If duplicate column is desired, define a new name for it and re-break.

BRW-15170: Invalid Constraint for table <name>


Cause: User entered an invalid constraint for the selected table.
Action: Reenter constraint.

BRW-15171: Invalid Constraint for table column <name>


Cause: User entered an invalid constraint for the selected column.
Action: Reenter constraint.

BRW-15172: Subqueries are not allowed in Constraints


Cause: User entered an invalid constraint.
Action: Reenter constraint.

BRW-15173: Aggregate conditions are not allowed in Constraints


Cause: User entered an invalid constraint.
Action: Reenter constraint.

BRW-15174: Constraints can only be on one table


Cause: User entered an invalid constraint.
Action: Reenter constraint.

BRW-15175: Table not loaded because all columns are hidden


Cause: All columns are hidden. At least one column needs to be displayed.
Action: Use the Query Builder Administrator Utility to display hidden columns.

BRW-15188: Query returns 1 row


Cause: Status message for 1-row Query Count.
Action: No action required.

BRW-15189: Query returns <##> rows


Cause: Status message for n-row Query Count.
Action: No action required.

BRW-15190: Unable to count without executing; Query returns <= <##> row(s)
Cause: Status message for n-row Query Count Distinct.
Action: No action required.

BRW-15192: Illegal format <name1> for column '<name2>'


Cause: User typed an unrecognizable format for a display column.
Action: Try another format.

BRW-15193: Illegal format


Cause: User typed an unrecognizable format for a display column
Action: Try another format.

BRW-15195: Incompatible column type in relationship: <name>


Cause: Trying to create illegal relationship.
Action: Column types are incompatible. Refer to the help or documentation for details.

BRW-15196: Error in opening <name> table(s)


Cause: Unable to open data tables because database was modified or object doesn't exist.
Action: Check your connect string (or contact your DBA).

BRW-15197: Error in restoring position for <name> column(s)


Cause: Unable to reposition column because database was modified or object doesn't exist.
Action: Check your connect string (or contact your DBA).

BRW-15198: Error in restoring join: <value>


Cause: Unable to restore link during open because database was modified or object doesn't exist.
Action: Check your connect string (or contact your DBA).

BRW-15199: Error in restoring inclusion state for join: <value>


Cause: Unable to set the inclusion state during open because database was modified or object doesn't exist.
Action: Check your connect string (or contact your DBA).

BRW-15200: Error in restoring outer join state for join: <value>


Cause: Unable to set the outer join during open because database was modified or object doesn't exist.
Action: Check your connect string (or contact your DBA).

BRW-15258: Invalid document name: <name>


Cause: User entered an invalid document name.
Action: Enter a valid document name.

BRW-15259: Document exceeds 64K size limit


Cause: User attempted to save/open a document larger than 64K.
Action: Reduce size of document.

BRW-15260: Document <name> does not exist


Cause: User specified a nonexistent document.
Action: Specify another document.

BRW-15261: Document <name> already exists


Cause: User tried to save under the name of an existing document.
Action: Specify another document name or delete the existing document.

BRW-15262: Multiple documents named <name>


Cause: Multiple documents with same name exist.
Action: Delete all but one.

BRW-15263: Database object <name> already exists


Cause: User tried to save under the name of an existing object.
Action: Specify another document name.

BRW-15264: Table <name> does not exist


Cause: View corresponding to a saved document has been removed.
Action: Re-save the document (it no longer exists as a query view).

BRW-15265: Table <name> has been removed or modified


Cause: Data Table view corresponding to a saved document has been modified.
Action: Re-save the document.

BRW-15266: File <name> does not exist


Cause: User specified a nonexistent file.
Action: Specify another file.

BRW-15267: File <name> already exists


Cause: User tried to save under the name of an existing file.
Action: Specify another file name.

BRW-15268: Unable to open file <name>


Cause: I/O core was unable to open a file.
Action: Specify another file.

BRW-15269: Unable to lock file <name>


Cause: I/O core was unable to lock a file.
Action: Specify another file.

BRW-15270: Error reading file <name>


Cause: Operating system error or file was not of the correct format.
Action: Specify another file.

BRW-15271: Error writing file <name>


Cause: Operating system error or I/O core error.
Action: Retry operation.

BRW-15272: Obsolete Oracle Query Builder document <name>


Cause: User attempted to open an old unsupported document.
Action: Specify another document.

BRW-15273: File <name> is not a Oracle Query Builder file


Cause: User attempted to open a non-Query Builder file.
Action: Specify another file to open.

BRW-15274: File <name> is not a valid SQL file


Cause: User attempted to import an invalid SQL file.
Action: Specify another file to import.

BRW-15275: No data to export or print


Cause: User attempted to export or print a query (or region) with no data.
Action: Specify another region; execute query; change query.

BRW-15277: Unable to overwrite current table <name>


Cause: Error in trying to delete/rename old data table in save.
Action: Fix problem with data table and re-save.

BRW-15278: Document saved, but view <name> could not be created


Cause: The query is not a valid view. It has been saved, but not as a database view.
Action: Redefine query as a valid view, or ignore (query will be saved, but not as a view).

BRW-15279: '<name>' is not a recognized SQL literal


Cause: User attempted to import a non-SQLPlus file.
Action: Specify another file to import.

BRW-15320: Internal I/O core error (<value>, line <##>)


Cause: Internal State is invalid.
Action: Contact Oracle Customer Support .

BRW-15321: Resource not found (<name>).


Cause: Resource names do not match Query Builder code (or file is corrupted).
Action: Get a correct version of the Query Builder resource file.

BRW-15322: Resource file not found.


Cause: directory structure incorrect, or file is missing for some reason.
Action: Locate the resource file (check NLS_LANG file name).

BRW-15323: Query already open in current application (<name>)


Cause: User attempted to open multiple queries with the same name.
Action: Specify another file.

BRW-15324: Unable to start up windowing system


Cause: Incorrect/missing environment variables (e.g. DISPLAY, APIPATH).
Action: All required environment variables must be set correctly.

BRW-15342: Unable to find snapshot information


Cause: This database does not support snapshots (or database error).
Action: Check that you have a snapshot dictionary table.

BRW-15387: Login failed


Cause: Database or SQLNet error occurred.
Action: Check the login information and try again.

BRW-15388: Unable to load database relationships


Cause: Schema internal error in loading database relationships.
Action: Contact Oracle Customer Support if this is not expected.

BRW-15389: Unable to load list of accessible owners


Cause: Schema internal error in loading list of accessible owners.
Action: Contact Oracle Customer Support if this is not expected.

BRW-15390: Unable to load list of accessible tables


Cause: Schema internal error in loading list of data tables.
Action: Contact Oracle Customer Support if this is not expected.

BRW-15391: Unable to load table


Cause: Schema internal error in loading data table.
Action: Contact Oracle Customer Support if this is not expected.

BRW-15392: Unable to load table


Cause: Schema internal error in loading table.
Action: Contact Oracle Customer Support if this is not expected.

BRW-15393: Unable to load synonym


Cause: Schema internal error in loading synonym.
Action: Contact Oracle Customer Support if this is not expected.

BRW-15394: Unable to load query


Cause: Schema internal error in loading query.
Action: Contact Oracle Customer Support if this is not expected.

BRW-15395: Unable to load table column information


Cause: Schema internal error in loading column information.
Action: Contact Oracle Customer Support if this is not expected.

BRW-15396: Unable to load synonym column information


Cause: Schema internal error in loading synonym column information.
Action: Contact Oracle Customer Support if this is not expected.

BRW-15397: Unable to load constraints


Cause: Schema internal error in loading constraints.
Action: Contact Oracle Customer Support if this is not expected.

BRW-15398: Unable to find primary key information


Cause: Schema internal error in finding primary keys.
Action: Contact Oracle Customer Support if this is not expected.

BRW-15399: Unable to find foreign key information


Cause: Schema internal error in finding foreign keys.
Action: Contact Oracle Customer Support if this is not expected.

BRW-15400: Unable to load table and column comments


Cause: Schema internal error in getting comments.
Action: Contact Oracle Customer Support if this is not expected.

BRW-15401: Error in loading database link <name>


Cause: Schema internal error in loading database link.
Action: Refer to accompanying error messages for more information.

BRW-15402: Error in loading owner <name>


Cause: Schema internal error in loading database link.
Action: Refer to accompanying error messages for more information.

BRW-15403: Error in loading table <name>


Cause: Schema internal error in loading data table.
Action: Refer to accompanying error messages for more information.

BRW-15404: Error in loading primary key constraint for <name> (<value>)


Cause: Schema internal error in loading primary constraint.
Action: Refer to accompanying error messages for more information.

BRW-15405: Error in loading foreign key constraint <name>


Cause: Schema internal error in loading foreign constraint.
Action: Refer to accompanying error messages for more information.

BRW-15406: Error in loading synonym <name>


Cause: Schema internal error in loading primary constraint.
Action: Refer to accompanying error messages for more information.

BRW-15407: Table referred to by synonym <name> no longer exists


Cause: User tried to create a synonym for a nonexistent data table.
Action: Recreate the synonym.

BRW-15408: Error in loading column information for <name>


Cause: Oracle error or the data table has been removed.
Action: Recreate the data table.

BRW-15409: Error in loading constraint information for <name> (<value>)


Cause: Oracle error.
Action: Try it again.

BRW-15410: Table that foreign key <name> (<value>) refers to is inaccessible


Cause: The table that the foreign key refers to is inaccessible.
Action: Grant the table to the current user.

BRW-15411: Logout failed


Cause: Internal error in logging out.
Action: Exit or close the document.

BRW-15412: Table of query <name> was modified. Query loaded as view.


Cause: The view that the query depends on has been modified after the last save.
Action: Open the query and save it again to use it as a data table.

BRW-15413: Table of query <name> was removed. Query will not be loaded.
Cause: The view that the query depends on has been removed.
Action: Open the query, and save it again to use it as a data table.

BRW-15414: Table <name> no longer exists


Cause: This data table no longer exists in the database.
Action: Contact system administrator if you need this table.

BRW-154BRW-15: Maximum number (254) of table columns exceeded


Cause: User tried to load a data table that has more than 254 columns.
Action: Contact system administrator.

BRW-15416: Maximum number (8192) of tables per user exceeded


Cause: User owns too many data tables.
Action: Contact system administrator.

BRW-15417: Maximum number (1024) of owners and databases exceeded


Cause: User tried to load too many user, owner, and database links.
Action: Contact system administrator.

BRW-15418: Unable to find database link information


Cause: This database does not support database link, or database error.
Action: Try again later if this is unexpected.

BRW-15419: Unable to find synonym information


Cause: This database does not support synonyms, or database error.
Action: Try again later if this is unexpected.

BRW-15420: Unable to find constraint information


Cause: This database does not support constraints, or database error.
Action: Try again later if this is unexpected.

BRW-15421: Unable to find table comment table


Cause: This database does not support comments on table, or database error.
Action: Try again later if this is unexpected.

BRW-15422: Unable to find table Column comments table


Cause: This database does not support comments on column, or database error.
Action: Try again later if this is unexpected.

BRW-15423: Synonym to SEQUENCE is not currently supported


Cause: User tried to load a synonym that refers to a sequence.
Action: This action is not supported.

BRW-15424: Maximum number of login attempts (3) exceeded


Cause: User tried to login too many times.
Action: Contact system administrator for correct username, password, and/or connect string.

BRW-15430: Index information not loaded


Cause: Cannot find index table.
Action: This is a non-Oracle database; try an ODBC driver.

BRW-15434: Maximum columns in table is <##>


Cause: User tried to create more than the maximum number of allowed columns in a table.
Action: Create fewer columns.

BRW-15435: DBA privilege is needed to perform this operation


Cause: Need DBA privileges.
Action: Ask your system administrator to grant you DBA privilege.

BRW-15447: Cannot remove Query. Use File Delete... from Query window
Cause: User tried to remove a query.
Action: This is not legal from the Schema Editor. Use the Query window instead.

BRW-15448: Cannot copy Query. Use File Save As... from Query window
Cause: User tried to copy a query.
Action: This is not legal from the Schema Editor. Use the Query window instead.

BRW-15449: Cannot copy with data from table with only LONG columns
Cause: User tried to copy a table with a LONG column.
Action: Database doesn't support this.

BRW-15450: Operation not allowed on removed table


Cause: User tried to do something to a removed data table.
Action: Undo the remove first.

BRW-15451: Operation not allowed on removed column


Cause: User tried to do something to a removed column.
Action: Undo the remove first.

BRW-15452: Cannot rename another owner's table


Cause: User tried to set the name of a granted data table.
Action: This is not allowed. Ask the owner to do it for you.

BRW-15466: Table name too long (Max <##> bytes)


Cause: Data Table name to long.
Action: Shorten the name and try again.

BRW-15467: Name already in use. Please choose another name.


Cause: Name already in use.
Action: Choose another name.

BRW-15468: Column name too long (Max <##> bytes)


Cause: Column name too long.
Action: Shorten the name and try again.

BRW-15493: Operation currently not supported


Cause: Internal error.
Action: Contact Oracle Customer Support .

BRW-15494: Error in loading SQL text of views


Cause: Internal error.
Action: Contact Oracle Customer Support .

BRW-15495: Error in loading SQL text for view <name>


Cause: Internal error.
Action: Contact Oracle Customer Support .

BRW-15496: Scale must be between <##> and <##>


Cause: Illegal value for scale.
Action: Input legal value for scale.

BRW-15498: Cannot modify a query


Cause: It is not legal to modify a query.
Action: Open the query and modify it as a Query Builder document.

BRW-15499: Cannot set column attributes of table duplicated with data


Cause: User tried to set the column type of a table duplicated with data.
Action: First commit the table then try again.

BRW-15501: No more application virtual memory


Cause: No more disk space or system memory for Virtual Memory Manager.
Action: Close a document or make some room on your disk.

BRW-15502: Can only have <##> rows per document


Cause: Exceeded self-imposed, compile-time row maximum.
Action: Consider adding conditions to the query.

BRW-15504: Unable to determine database character set


Cause: There was a problem with SELECT USERENV('LANGUAGE') FROM DUAL.
Action: Non-Oracle database--not supported.

BRW-15505: Unable to open virtual memory file


Cause: No write permission or file system full.
Action: Change permission on directory or delete some files.

BRW-15506: Unable to close virtual memory file


Cause: Operating system error.
Action: Ask system administrator for assistance.

BRW-15507: Unable to read from virtual memory file


Cause: Virtual memory file does not exist.
Action: Make sure the virtual memory file is opened.

BRW-15508: Unable to write to virtual memory file


Cause: File system is full, or virtual memory file was not opened.
Action: Delete some files. Make sure virtual memory file is opened.

BRW-15509: Unable to create virtual memory manager


Cause: Internal error, or out of memory.
Action: Ask system administrator for assistance.

BRW-15511: Maximum virtual memory size exceeded


Cause: User input is too big for virtual memory size.
Action: Try again.

BRW-15513: Null value in command '<name>'


Cause: User entered <command>= on the command line with no option selected.
Action: Add a value for <command>.

BRW-15514: Null command in command line


Cause: User entered =<value> at command line but didn't specify a command.
Action: Add the command.

BRW-155BRW-15: Unrecognized command '<name>' in command line


Cause: User entered an illegal command at command line.
Action: Change command.

BRW-15516: Command '<name>' specified twice in command line


Cause: User entered a command twice at command line.
Action: Remove one.

BRW-15517: Incompatible commands '<name1>' and '<name2>' specified


Cause: User entered 2 incompatible commands at command line.
Action: Remove one.

BRW-15518: Invalid option '<name1>' in command '<name2>'


Cause: User entered an illegal option to a command at command line.
Action: Change option.

BRW-15519: Multiple login specifications in command line


Cause: User entered 2 login specifications at command line.
Action: Remove one.

BRW-15520: Invalid document name '<name>' in command line


Cause: User entered an illegal document name at command line.
Action: Change document name.

BRW-15521: '<name>' command specified without a document


Cause: User entered a command without specifying a document at command line.
Action: Add missing document.

BRW-15522: '<name1>' command specified without '<name2>'


Cause: User entered a command without another required command.
Action: Add missing command.

BRW-15523: Mismatched parentheses in '<name>' command


Cause: User entered mismatched parentheses in the command line.
Action: Correct mismatched parentheses.

BRW-15530: Cannot edit a deleted row


Cause: User tried to edit a row which is marked for deletion.
Action: Undelete the row first.

BRW-15531: Row has been deleted from the database


Cause: Another user deleted this row since you last ran the query.
Action: Contact Oracle Customer Support . This should never happen.

BRW-15532: Row has been modified by another user. Requery.


Cause: Another user updated this row since you last ran the query.
Action: Try again.

BRW-15533: Row is currently locked by another user.


Cause: Someone else is editing this row.
Action: Try again later.

BRW-15539: Error in inserting <##> row(s)


Cause: One or more rows in input file failed on insert.
Action: Modify input file or ignore.

BRW-15540: Operation not allowed on data of this type


Cause: User tried to edit a cell with data of an uneditable type.
Action: Unknown.

BRW-15541: Too many edited rows. Please select Commit


Cause: Too many pending INSERTS, UPDATES or DELETES in a document.
Action: Select Commit or Revert.

BRW-15545: Error in reading QXF file. Parsing halted.


Cause: Syntax error in reading QXF file.
Action: Fix QXF file.

BRW-15546: Parse Error: Line <##>


Cause: Incorrect syntax at that particular line.
Action: Debug that line.

BRW-15547: Operator unspecified in relationship block.


Cause: Operator unspecified in relationship block in QXF File.
Action: Specify an operator field within the block.

BRW-15548: Error: Argument missing in <name> of relationship block.


Cause: No argument in a column field in a relationship block.
Action: Specify the column name in that field.

BRW-15549: CONDITION_TEXT missing within condition block.


Cause: No argument in the CONDITION_TEXT field within condition block.
Action: Specify the CONDITION_TEXT field.

BRW-15550: Illegal INCLUSION_ORDER value (<name1>) in expression '<name2>'.


Cause: Illegal INCLUSION_ORDER value in expression.
Action: Correct INCLUSION_ORDER value.

BRW-15551: Expression '<name>' included but INCLUSION_ORDER unspecified.


Cause: The INCLUSION_ORDER unspecified for an included expression block.
Action: Specify the INCLUSION_ORDER field.

BRW-15552: Expression '<name>' not included but INCLUSION_ORDER is non-null


Cause: Expression is not included (INCLUDED = FALSE) but INCLUSION_ORDER is non-null.
Action: Correct the values in these fields.

BRW-15553: Error: Empty TEXT string in expression '<name>'.


Cause: The TEXT string is unspecified within a QXF expression block.
Action: Specify the TEXT string.

BRW-15554: Error: SORT_PRIORITY unspecified for sorted expression '<name>'.


Cause: SORT_PRIORITY unspecified for sorted expression.
Action: Specify the SORT_PRIORITY.

BRW-15555: Illegal INCLUSION_ORDER value for field '<name1>'in table '<name2>'.


Cause: Illegal INCLUSION_ORDER value for field.
Action: Correct the INCLUSION_ORDER value.

BRW-15556: Field '<name1>' in table '<name2>' included but INCLUSION_ORDER is null.


Cause: Field is included (INCLUDED = FALSE) but INCLUSION_ORDER is unspecified.
Action: Correct the values in these fields.

BRW-15557: Field '<name1>' (table '<name2>') excluded but INCLUSION_ORDER exists.


Cause: The field in specified data table is not included but the INCLUSION_ORDER is non-null.
Action: Correct the values in these fields.

BRW-15558: SORT_PRIORITY unspecified for sorted field '<name1>' in table '<name2>'.


Cause: SORT_PRIORITY unspecified for a sorted field.
Action: Specify the SORT_PRIORITY for that field.

BRW-15559: Error: Illegal value '<name1>' for INCLUSION_ORDER in table '<name2>'.


Cause: A negative value in inclusion order.
Action: Correct that value.

BRW-15560: Table '<name>' included but INCLUSION_ORDER unspecified.


Cause: Data Table included (INCLUDED = TRUE) but INCLUSION_ORDER is unspecified.
Action: Correct the values in these fields.

BRW-15561: Table '<name>' is excluded but INCLUSION_ORDER is non-null.


Cause: Data Table not included (INCLUDED = FALSE) but INCLUSION_ORDER is non-null.
Action: Correct the values in these fields.

BRW-15562: Error: There should be no more than one main condition block.
Cause: There are more than one main (root) condition blocks.
Action: Eliminate some condition blocks, or use a conjunction.

BRW-15563: Error: QXF file version 1.0 expected.


Cause: Illegal version number specified in VERSION field.
Action: Modify the version.

BRW-15564: Parse Error: Line <##>: Invalid font style '<name>'.


Cause: Invalid font style.
Action: Check font style and correct it.

BRW-15565: Parse Error: Line <##>: Invalid font style argument.


Cause: Invalid font style argument.
Action: Check font style strings and correct them.

BRW-15566: Parse Error: Line <##>: Invalid aggregate function '<name>'


Cause: Invalid aggregate function name.
Action: Correct the function name.

BRW-15567: Parse Error: Line <##>: Invalid summarize argument.


Cause: Invalid summarize field argument.
Action: Correct the field argument.

BRW-15568: Parse Error: Line <##>: Invalid field argument.


Cause: Invalid field argument.
Action: Correct field argument.

BRW-15569: Warning: QXF file is only partially loaded because of error.


Cause: Error in loading QXF file.
Action: Correct those errors.

BRW-15570: Parse Error: Line <##>: Invalid operator '<name>' in relationship block.
Cause: Invalid Operator within relationship block.
Action: Check operator and correct it.

BRW-15571: Parse Error: Line <##>: Invalid operator field argument.


Cause: Invalid Object ID within Derived Item Expression.
Action: Correct Object ID in dictionary.

BRW-15572: Inconsistent object IDs in derived item expression.


Cause: Invalid operator field argument within relationship block.
Action: Check operator strings and correct them.

BRW-15580: Unable to load list of accessible business areas


Cause: End User Layer is missing business area tables.
Action: Reinstall End User Layer. Ask system administrator for assistance.

BRW-15581: Cannot add columns to table created with duplicate data


Cause: User tried to add columns to a table created with duplicate table data.
Action: Commit the duplicate table then try again.

BRW-15582: New or duplicate table is only allowed on existing table.


Cause: Create new table on another new/duplicate/modified table.
Action: Commit the new/duplicate/modified table first.

BRW-15583: Index requires at least one column


Cause: User tried to remove the last column of an index.
Action: Add other columns then remove.

BRW-15584: Column <name> is of type LONG and will not be copied


Cause: Cannot copy a LONG column when creating a snapshot.
Action: Column cannot be copied.

BRW-15600: Syntax not supported


Cause: Attempted to parse unsupported syntax.
Action: Use alternate Oracle 8 syntax.

BRW-15601: Invalid Oracle 8 SQL syntax


Cause: Cannot use Oracle 8 language syntax.
Action: Use Oracle 7 SQL.

BRW-15602: Type Constructor in Oracle 8 SQL is not supported


Cause: Oracle 8 SQL’s type constructors are not supported.
Action: Revert to Oracle 7.

BRW-15603: REF in Oracle 8 SQL is not supported


Cause: Oracle 8 SQL’s REF is not supported.
Action: Use Oracle 7 instead.

BRW-15604: CAST in Oracle 8 SQL is not supported


Cause: Oracle 8 SQL’s CAST is not supported.
Action: Use Oracle 7 instead.

BRW-15605: MULTISET in Oracle 8 SQL is not supported.


Cause: Oracle 8 SQL’s MULTISET is not supported.
Action: Use Oracle 7 instead.

BRW-15606: METHODS in Oracle 8 SQL are not supported.


Cause: Oracle 8 SQL’s METHODS are not supported.
Action: Use Oracle 7 instead.

BRW-15607: THE subquery in Oracle 8 SQL is not supported


Cause: Oracle 8 SQL’s THE subquery is not supported.
Action: Use Oracle 7 instead.

BRW-15608: PARTITION of tables in Oracle 8 SQL is not supported


Cause: Oracle 8 SQL’s PARTITION of tables is not supported.
Action: Use Oracle 7 instead.

BRW-15609: The TABLE keyword in a subquery in Oracle 8 SQL is not supported


Cause: TABLE keyword in subquery is not supported.
Action: Use Oracle 7 instead.

BRW-15610: Rename the Table as a Table Alias


Cause: Attempted to use a table instead of a table alias/
Action: Rename the table with a table alias.

BRW-15641: Help system initialization failed. Help will be unavailable.


Cause: Unable to locate help document or help resource file.
Action: User may continue but help menu is unavailable. Use online or paper documentation.

BRW-15643: Resource file not found (<name>), trying default resource file.
Cause: NLS_LANG set but file not found.
Action: Try to open the resource file using the default language.

BRW-15644: Unable to locate help document (<name>), trying default help document.
Cause: NLS_LANG set but file not found.
Action: Try to open the help doc using the default language.

BRW-15647: Unable to locate help document


Cause: Couldn't find help file in correct directory with correct language.
Action: Check Query Builder directory structure. Make sure NLS_LANG is set correctly.

BRW-15648: Help system creation error


Cause: Help system couldn't start up.
Action: Query Builder couldn't find the help resource file, or NLS_LANG is not set, or memory is low.

BRW-15649: Input for <name> was too low. Minimum valid number is <##>.
Cause: The value input was too low.
Action: Try again with a higher value.

BRW-15650: Input for <name> was too high. Maximum valid number is <##>.
Cause: The value input was too high.
Action: Try again with a lower value.

BRW-15651: Input for <name> was out of range. Must be between <##> and <##>.
Cause: The value input was out of the valid range.
Action: Try again with a valid number.

BRW-15652: Value was reset to <value>.


Cause: The value input was changed because it was out of the valid range.
Action: Try again with a valid number or Query Builder will use the value shown.

BRW-15653: Pref file error: Value <value> was too low. Minimum valid number is <##>.
Cause: The value input was too low.
Action: Try again with a higher value.

BRW-15654: Pref file error: Value <value> was too high. Maximum valid number is <##>.
Cause: The value input was too high.
Action: Try again with a lower value.

BRW-15655: Pref file error: Value <value> out of range. Must be between <##> and <##>.
Cause: The value input was out of the valid range.
Action: Try again with a valid number.

BRW-15656: Pref file error: Value for <value> not recognized


Cause: The value set in the preference file was invalid.
Action: Try again with a valid number.

BRW-15657: Value for OWNERLIST=NAME must contain at least one name


Cause: The value for OWNERLIST=NAME was NULL.
Action: Try again with a valid name

BRW-15900: Unable to find time period information


Cause: This database does not support time periods, or database error.
Action: Try again later if this is unexpected.

BRW-15901: Table <name1> referred to by object <name2> no longer exists


Cause: Base data source of object has been removed.
Action: Refresh/delete object.

BRW-15902: Table referred to by object <name> no longer exists


Cause: Base data source of object has been removed.
Action: Refresh/delete object.

BRW-15903: Opposite table <name> is not in a business area. Join info inaccessible.
Cause: Relationship: Opposite data table/object not in any group.
Action: Grant that object to a group.

BRW-15904: Relationship name cannot be longer than <##> bytes


Cause: Relationship Name longer than limit.
Action: Use a shorter name.

BRW-15905: Column heading cannot be longer than <##> bytes


Cause: Item Heading longer than limit.
Action: Use a shorter heading.

BRW-15906: Column format cannot be longer than <##> bytes


Cause: Item Format longer than limit.
Action: Use a shorter format.

BRW-15907: Column display width cannot have more than <##> digits
Cause: Item Display Width Precision longer than limit.
Action: Use Shorter Display width.

BRW-15908: Time period name cannot be longer than <##> bytes


Cause: Time Period Name too long.
Action: Use a shorter time period name.

BRW-15909: Period column and sequence column of time period are the same
Cause: Period and sequence columns of time period set to the same column.
Action: make sure period and sequence columns are different.

BRW-15910: Unable to load time period <name>


Cause: Schema internal error in loading time period.
Action: Refer to accompanying error messages for more information.

BRW-15911: Time period <name> already exists


Cause: Time period name must be unique.
Action: Create time period under a different name.

BRW-15912: Illegal display width value.


Cause: Illegal display width value.
Action: Re-enter a legal value.

BRW-15913: <name> key text cannot be empty.


Cause: Foreign or Primary Key text is empty.
Action: Enter text for primary or foreign key.

BRW-15914: Relationship name cannot be empty.


Cause: Relationship name is null.
Action: Enter relationship name.

BRW-15924: Business area name cannot be empty


Cause: Business area name is empty or contains only spaces.
Action: Enter a new name.

BRW-15925: Table <name1> has already been imported as <name2>


Cause: Table can only be imported once with a given name.
Action: Import table under a different name.

BRW-15926: Business area <name> already exists


Cause: Business area name must be unique.
Action: Create business area under a different name.

BRW-15927: Business area <name1> already contains a table named <name2>


Cause: Table name must be unique within a business area.
Action: Rename/reimport table and add to business area.

BRW-15928: Business area name too long (Max <##> bytes)


Cause: Business area name too long.
Action: Shorten the name and try again.

BRW-15929: Business area description too long (Max <##> bytes)


Cause: Business area description too long.
Action: Shorten the description and try again.

BRW-15930: Error committing table <name>


Cause: Error occurred while committing table.
Action: Try again.

BRW-15931: Error committing business area <name>


Cause: Error occurred while committing business area.
Action: Try again.

BRW-15932: Error committing time period <name>


Cause: Error occurred while committing time period.
Action: Try again.

BRW-15933: Error committing relationship <name>


Cause: Error occurred while committing relationship
Action: Try again.

BRW-15937: Error generating SQL for table <name>


Cause: Error occurred while generating SQL for a table.
Action: Try again.

BRW-15938: Error generating SQL for business area <name>


Cause: Error occurred while generating SQL for a business area.
Action: Try again.

BRW-15939: Error generating SQL for time period <name>


Cause: Error occurred while generating SQL for a time period.
Action: Try again.

BRW-15940: Error generating SQL for relationship <name>


Cause: Error occurred while generating SQL for relationship.
Action: Try again.

BRW-15950: No Oracle Query Builder tables--Database open/save is disabled


Cause: There is no Query Builder system query table in the database.
Action: Create a system query table (run the Query Builder install script).

BRW-15951: Product user profile information not loaded


Cause: Cannot load the user profile table.
Action: Ask system administrator to create one.

BRW-15952: User privilege table not loaded


Cause: Missing USER_USERS table (Non Oracle or Oracle V7 database).
Action: None available.

BRW-15953: Table privilege table not loaded


Cause: Cannot find Privilege table.
Action: Non-Oracle database or Oracle V7 database.

BRW-15954: Oracle Query Builder 2.5 tables are missing or not installed properly
Cause: No QUERY BUILDER_DOCS_SQL table.
Action: Re-install Query Builder 2.5 tables.

BRW-15955: Query returned zero rows


Cause: Query returned no rows.
Action: Modify the query so that it requests data that exists in the database.

BRW-16000: Document saved using End User Layer, not Native dictionary. Continue?
Cause: User tried to open in Native mode a document saved using the End User Layer.
Action: Run Query Builder with DICTIONARY=ENDUSER or continue (End User Layer objects will be inaccessible).

BRW-16001: Document saved using Native dictionary, not End User Layer. Continue?
Cause: User tried to open in ENDUSER mode a document saved using the Native dictionary.
Action: Run Query Builder with DICTIONARY=NATIVE or continue (some database objects may be inaccessible).

BRW-16250: Document already exists. Do you want to overwrite?


Cause: User tried to Save As over an existing document.
Action: User may overwrite or cancel.

BRW-16251: Table has been modified. Continue?


Cause: View was removed and recreated; may be inconsistent with document.
Action: Either continue or abort save.

BRW-16500: Memory not available for local sort. Re-execute?


Cause: All rows not yet fetched for local sort.
Action: Re-execute query now or later.

BRW-16503: Data not available for local sort. Re-execute?


Cause: All rows not yet fetched for local sort.
Action: Re-execute query now or later.

BRW-16504: Data not available for local break. Re-execute?


Cause: All rows not yet fetched for local break.
Action: Re-execute query now or later.

BRW-16525: Query may require a Cartesian product. Continue?


Cause: Query combines results of unrelated tables.
Action: Ignore message or relate tables before executing. Refer to help or documentation for details.

BRW-16531: Redefine parameter <name>?


Cause: User entered previously deleted parameter in expression or condition.
Action: Press OK if this is what you intended.

BRW-16532: Parameter <name> does not exist. Define?


Cause: User entered new parameter in expression or condition.
Action: Press OK if this is what you intended.

BRW-16549: Revert will undo all changes on these tables. Revert anyway?
Cause: Confirmation before reverting data tables.
Action: Click OK to revert all selected data tables, Cancel to cancel the operation.

BRW-16550: Table <name> has primary/unique keys that are referenced. Remove?
Cause: Table contains constraints.
Action: Click OK to remove the data table, Cancel to cancel the operation.

BRW-16551: Column has primary/unique keys or indexes. Remove anyway?


Cause: Column is used by constraints or indexes.
Action: Click OK to remove the column, Cancel to cancel the operation.

BRW-16552: Disable all constraints?


Cause: Message to confirm that all constraints should be disabled.
Action: User may confirm or cancel.

BRW-16553: Enable all constraints?


Cause: Message to confirm that all constraints should be enabled.
Action: User may confirm or cancel.

BRW-16575: There are uncommitted edits which will be lost. Commit?


Cause: User has tried to exit the Data Editor without committing changes.
Action: Click Commit or lose changes.

BRW-16576: Defined Column, Summary and Break values may not be current. Re-execute?
Cause: Values edited while displaying breaks, summaries, or defined columns.
Action: Execute query to update values.

BRW-16623: There is no data available for this operation.


Cause: Alert message if number of rows or columns available to print is zero.
Action: User should try re-executing the query, or include some columns.

BRW-16624: Query definition has changed. Data may not be current. Continue?
Cause: Query document has changed since last execute.
Action: Either re-execute the query, continue export, or cancel.

BRW-16625: The printer does not support all fonts needed. Substitute fonts?
Cause: The font or some style or weight does not exist for the selected printer.
Action: User may continue with font substitution or cancel.

BRW-16626: Not enough memory for Print Preview.


Cause: Unable to create bitmap for print preview.
Action: No action required.

BRW-16627: There is no data available for this operation. Execute query?


Cause: Alert message if export data called with empty worksheet.
Action: User should try executing the query or cancel.

BRW-16628: Unable to get printer device. Printing will be unavailable. Continue?


Cause: Error creating a toolkit printer surface with uiprc().
Action: User may continue with no printing or cancel.

BRW-16629: Do you want to update the container before exiting?


Cause: Message to prompt user to save changes when closing/quitting OLE doc.
Action: User may save or abort changes, or cancel.

BRW-16650: The printer does not support all fonts needed. Substitute fonts?
Cause: The font or some style or weight does not exist for the selected printer.
Action: User may continue with font substitution or cancel.

BRW-16651: No printer has been chosen. Use Default?


Cause: The user has not explicitly named a printer to use.
Action: User may continue with the system default printer or cancel.

BRW-16652: Margins for this document are too wide and must be reset.
Cause: The user has set the margins to be too large leaving no content.
Action: User must reset the margins.

BRW-16653: No printer has been chosen. Use Default?


Cause: The user has not explicitly named a printer to use.
Action: User may continue with the system default printer or cancel.

BRW-16654: No pages printed.


Cause: User has set copies to 0 or the start/end page outside the range.
Action: Reset page range.

BRW-16660: Query definition has changed. Data may not be current. Re-execute?
Cause: Query document has changed since last DDE update.
Action: Re-execute the query before DDE update, or update without executing.

These are the new features for R6.0, other than the Oracle8 items (which are in their own folder in the common area).

PL/SQL editing enhancements


The Program Unit and Stored Program Unit editors now support a range of editing features in Microsoft Windows such
as:

Automatic indenting--As you enter code in the editors, lines are automatically indented.

Color syntax highlighting--Keywords, comments, and strings are colored differently.

Column and line selection--You can select columns of text as well as lines of source code.
Drag and drop text manipulation--Highlighted text may be copied or moved by dragging and dropping.

Multiple split views--You can create up to four separate views of the current program unit in the editor.

Printing--You can print the current program unit.

Unlimited undo/redo--You can undo/redo all edit actions up to the last save operation.

LOV wizard
Related Topics
The LOV Wizard enables you to create and modify a list of values (LOV), a scrollable popup window that provides the
user with a single- or multi-column selection list. The Wizard guides you through the process of selecting an existing
record group or creating a new query record group, selecting columns from the record group for display, and formatting
the LOV. You can also use the LOV Wizard in its re-entrant mode to modify existing LOVs.

Hierarchical tree control


Related Topics
The hierarchical tree displays data in the form of a standard navigator, similar to those used in Forms Developer.
You can populate a hierarchical tree with values contained in a Record Group or Query Text. At runtime, you can
programmatically add, remove, modify, or evaluate elements in a hierarchical tree.
The amount of data displayed at any one time depends upon the expansion of individual data nodes, whether through
built-ins or a user clicking on a node. The data set generally will be initially specified in Form Builder, and may be modified
or entirely replaced at runtime.

Forms Runtime Diagnostics


Related Topics
Forms Runtime Diagnostics (FRD) is a runtime event-based logging system designed to help you debug your application.
When a form is run with FRD enabled, a combination of external user-application interactions and internal Forms
processing events are written in chronological order to a log on the file system. These events can then be analyzed for
correctness.

Pluggable user components


Related Topics
When you design a form to run in a three-tier environment using WebForms, you can extend and customized the form’s
function by including JavaBeans in the application. For example, you could add a new widget, or provide your own
version of a standard Forms widget (such as a push-button).

Launching WebForms from the Designer


Related Topics

Now it's easier to preview your forms designed to be run from the web. Click on the Run Form Web icon in the Object
Navigator or Layout Editor to launch the Web Previewer with your form running locally in a Java UI shell.

Java user interface shell


As part of the Network Computing initiative, Oracle is defining a new desktop environment for Java components. As a
first step towards this desktop environment, Oracle is developing a lightweight Window and Menu System which will be
part of the Oracle desktop environment. This Java UI Shell supports configurable Look and Feel of Java UI components.
For more information on the client UI Shell, see Configuring the Forms Server.

The Object Navigator


Viewing objects in the Object Navigator
About the Object Navigator
Changing Object Navigator views
Navigating and selecting objects in the Object Navigator
Expanding and collapsing objects in the Object Navigator
Finding Object Navigator entries with fast search
Setting a mark in the Object Navigator
Working with multiple panes
Creating and moving objects in the Object Navigator
Creating and deleting objects in the Object Navigator
Changing the names of objects in the Object Navigator
Moving and copying objects in the Object Navigator
Copying objects between modules

The Layout Editor


General Information
About the Layout Editor
Layout Editor tool palette
Switching to a different canvas in the Layout Editor
Selecting objects in the Layout Editor
Moving objects in the Layout Editor
Resizing objects in the Layout Editor
Aligning objects in the Layout Editor
Grouping objects in the Layout Editor
Ordering objects in the Layout Editor
Blocks and Items
Creating items
Setting Layout Editor block context
Working with multi-record blocks
Formatting Objects
Setting color and pattern attributes in the Layout Editor
Formatting items in the Layout Editor

The PL/SQL Editor


Writing Code in the PL/SQL Editor
Creating a trigger
Writing trigger code
Calling a built-in subprogram
About the PL/SQL Editor
PL/SQL Editor context
PL/SQL Editor commands
Using PL/SQL in Forms Builder

The Menu Editor


Steps to build a custom Menu
Creating a menu module
Creating menus and menu items
Assigning commands to menu items
Attaching a menu module to a form
Using the Menu Editor
Displaying menus in the Menu Editor
About menu object names and labels
Changing menu object names and labels
Adding Special Menu Items
About special menu item types
Creating special menu items
Commands for check and radio menu items
Setting the state of check and radio menu items
Magic item default functionality

Defining an interface item


Next Step
I want to define the behavior of my...

ActiveX controls

Buttons

Chart items
Check boxes

Image items

List items

OLE container items

Radio groups

Sound items
Text items

Defining an ActiveX control


Related Topics
What would you like to do?
Embed an ActiveX control in a form
Set and get ActiveX control properties
Invoke ActiveX control methods
Respond to ActiveX control events
Registering ActiveX controls
Deploying ActiveX controls with your application

Defining a button
Related Topics
What would you like to do?
Add a button label
Create an iconic button
Create a default button
Manipulate a button at runtime

Defining a chart item


What would you like to do?
Create a chart item

Defining a check box


Related Topics
What would you like to do?
Specify a default value for a check box
Manipulate a check box at runtime
Defining an image item
Related Topics
What would you like to do?
Populate an image item
Manipulate images at runtime

Defining a list item


Related Topics
What would you like to do?
Specify a default value for a list item
Manipulate a list item at runtime
Add a list element
Retrieve and store list elements in a record group
Delete a list element

Defining an OLE container item


Related Topics
What would you like to do?
Embed an OLE object
Link an OLE object
Display an OLE object
Edit an OLE object
Convert an OLE object

Defining a radio group


Related Topics
What would you like to do?
Specify a default value for a radio group
Manipulate a radio group at runtime

Defining a sound item


Related Topics
What would you like to do?
Set sound item control properties
Manipulate sound items programmatically

Defining a text item


Related Topics
What would you like to do?
Create single-line and multi-line text items
Making a text item value required
Specify the maximum length for a text item
Specify a required value for a text item
Specify a fixed length value for a text item
Specify a valid range of values
Hide text item values
Format values with format masks
Assign a list of values (LOV) to a text item
Manipulate a text item at runtime

Built-in packages

Alphabetic list Related Topics

Active X Built-ins
Alert Built-ins
Application Built-ins
Block Built-ins
Canvas Built-ins
Chart Built-ins
Form Built-ins
Item Built-ins
Menu Built-ins
Message Built-ins
Multiple Form Built-ins
OLE Built-ins
Parameter List Built-ins
PECS Built-ins
Query Built-ins
Record Built-ins
Relation Built-ins
Report Built-ins
Tab Page Built-ins
Transactional Built-ins
VBX Built-ins
Web Built-ins
Window Built-ins

Form Builder Built-ins

All Built-ins

A
ABORT_QUERY
ADD_GROUP_COLUMN
ADD_GROUP_ROW
ADD_LIST_ELEMENT
ADD_OLEARGS
ADD_PARAMETER
APPLICATION_PARAMETER
B
BELL
BLOCK_MENU
BREAK
C
CALL_FORM
CALL_INPUT
CALL_OLE
CALL_OLE_<return type>
CANCEL_REPORT_OBJECT
CHECK_RECORD_UNIQUENESS
CHECKBOX_CHECKED
CHECKED
CLEAR_BLOCK
CLEAR_EOL
CLEAR_FORM
CLEAR_ITEM
CLEAR_LIST
CLEAR_MESSAGE
CLEAR_RECORD
CLOSE_FORM
COMMIT_FORM
CONVERT_OTHER_VALUE
COPY
COPY_REGION
COPY_REPORT_OUTPUT
COUNT_QUERY
CREATE_GROUP
CREATE_GROUP_FROM_QUERY
CREATE_OLEOBJ
CREATE_PARAMETER_LIST
CREATE_QUERIED_RECORD
CREATE_RECORD
CREATE_TIMER
CREATE_VAR
CUT_REGION
D
DBMS_ERROR_CODE
DBMS_ERROR_TEXT
DEBUG_MODE
DEFAULT_VALUE
DELETE_GROUP
DELETE_GROUP_ROW
DELETE_LIST_ELEMENT
DELETE_PARAMETER
DELETE_RECORD
DELETE_TIMER
DESTROY_PARAMETER_LIST
DESTROY_VARIANT
DISPATCH_EVENT
DISPLAY_ERROR
DISPLAY_ITEM
DOWN
DO_KEY
DUMMY_REFERENCE
DUPLICATE_ITEM
DUPLICATE_RECORD
E
EDIT_TEXTITEM
ENFORCE_COLUMN_SECURITY
ENTER
ENTER_QUERY
ERASE
ERROR_CODE
ERROR_TEXT
ERROR_TYPE
EXECUTE_QUERY
EXECUTE_TRIGGER
EXIT_FORM
F
FETCH_RECORDS
FIND_ALERT
FIND_BLOCK
FIND_CANVAS
FIND_COLUMN
FIND_EDITOR
FIND_FORM
FIND_GROUP
FIND_ITEM
FIND_LOV
FIND_MENU_ITEM
FIND_RELATION
FIND_REPORT_OBJECT
FIND_TAB_PAGE
FIND_TIMER
FIND_VIEW
FIND_WINDOW
FIRST_RECORD
FORM_FAILURE
FORM_FATAL
FORM_SUCCESS
FORMS_DDL
FORMS_OLE.ACTIVATE_SERVER
FORMS_OLE.CLOSE_SERVER
FORMS_OLE.EXEC_VERB
FORMS_OLE.FIND_OLE_VERB
FORMS_OLE.GET_INTERFACE_POINTER
FORMS_OLE.GET_VERB_COUNT
FORMS_OLE.GET_VERB_NAME
FORMS_OLE.INITIALIZE_CONTAINER
FORMS_OLE.SERVER_ACTIVE
G
GENERATE_SEQUENCE_NUMBER
GET_APPLICATION_PROPERTY
GET_BLOCK_PROPERTY
GET_CANVAS_PROPERTY
GET_FILE_NAME
GET_FORM_PROPERTY
GET_GROUP_CHAR_CELL
GET_GROUP_DATE_CELL
GET_GROUP_NUMBER_CELL
GET_GROUP_RECORD_NUMBER
GET_GROUP_ROW_COUNT
GET_GROUP_SELECTION
GET_GROUP_SELECTION_COUNT
GET_INTERFACE_POINTER
GET_ITEM_INSTANCE_PROPERTY
GET_ITEM_PROPERTY
GET_LIST_ELEMENT_COUNT
GET_LIST_ELEMENT_LABEL
GET_LIST_ELEMENT_VALUE
GET_LOV_PROPERTY
GET_MENU_ITEM_PROPERTY
GET_MESSAGE
GET_OLEARG_<type>
GET_OLE_MEMBERID
GET_OLE_<proptype>
GET_PARAMETER_ATTR
GET_PARAMETER_LIST
GET_RADIO_BUTTON_PROPERTY
GET_RECORD_PROPERTY
GET_RELATION_PROPERTY
GET_REPORT_OBJECT_PROPERTY
GET_TAB_PAGE_PROPERTY
GET_VAR_BOUNDS
GET_VAR_DIMS
GET_VAR_TYPE
GET_VIEW_PROPERTY
GET_WINDOW_PROPERTY
GO_BLOCK
GO_FORM
GO_ITEM
GO_RECORD
H
HELP
HIDE_MENU
HIDE_VIEW
HIDE_WINDOW
HOST
I
ID_NULL
IMAGE_SCROLL
IMAGE_ZOOM
INIT_OLEARGS
INITIALIZE_CONTAINER
INSERT_RECORD
ISSUE_ROLLBACK
ISSUE_SAVEPOINT
ITEM_ENABLED
J
K
L
LAST_OLE_ERROR
LAST_OLE_EXCEPTION
LAST_RECORD
LIST_VALUES
LOCK_RECORD
LOGON
LOGON_SCREEN
LOGOUT
M
MENU_CLEAR_FIELD
MENU_NEXT_FIELD
MENU_PARAMETER
MENU_PREVIOUS_FIELD
MENU_REDISPLAY
MENU_SHOW_KEYS
MESSAGE
MESSAGE_CODE
MESSAGE_TEXT
MESSAGE_TYPE
MOVE_WINDOW
N
NAME_IN
NEW_FORM
NEXT_BLOCK
NEXT_ITEM
NEXT_FORM
NEXT_KEY
NEXT_MENU_ITEM
NEXT_RECORD
NEXT_SET
O
OLEVAR_EMPTY
OPEN_FORM
P
PASTE_REGION
PAUSE
PECS.ADD_CLASS
PECS.ADD_EVENT
PECS.COLLECTOR
PECS.DISABLE_CLASS
PECS.ENABLE_CLASS
PECS.END_EVENT
PECS.POINT_EVENT
PECS.START_EVENT
PLAY_SOUND
POPULATE_GROUP
POPULATE_GROUP_WITH_QUERY
POPULATE_LIST
POST
PREVIOUS_BLOCK
PREVIOUS_FORM
PREVIOUS_ITEM
PREVIOUS_MENU
PREVIOUS_MENU_ITEM
PREVIOUS_RECORD
PRINT
PTR_TO_VAR
Q
QUERY_PARAMETER
R
READ_IMAGE_FILE
READ_SOUND_FILE
RECALCULATE
REDISPLAY
RELEASE_OBJ
REPLACE_CONTENT_VIEW
REPLACE_MENU
REPORT_OBJECT_STATUS
RESET_GROUP_SELECTION
RESIZE_WINDOW
RETRIEVE_LIST
RUN_PRODUCT
RUN_REPORT_OBJECT
S
SCROLL_DOWN
SCROLL_UP
SCROLL_VIEW
SELECT_ALL
SELECT_RECORDS
SET_ALERT_BUTTON_PROPERTY
SET_ALERT_PROPERTY
SET_APPLICATION_PROPERTY
SET_BLOCK_PROPERTY
SET_CANVAS_PROPERTY
SET_FORM_PROPERTY
SET_GROUP_CHAR_CELL
SET_GROUP_DATE_CELL
SET_GROUP_NUMBER_CELL
SET_GROUP_SELECTION
SET_INPUT_FOCUS
SET_ITEM_INSTANCE_PROPERTY
SET_ITEM_PROPERTY
SET_LOV_COLUMN_PROPERTY
SET_LOV_PROPERTY
SET_MENU_ITEM_PROPERTY
SET_OLE
SET_PARAMETER_ATTR
SET_RADIO_BUTTON_PROPERTY
SET_RECORD_PROPERTY
SET_RELATION_PROPERTY
SET_REPORT_OBJECT_PROPERTY
SET_TAB_PAGE_PROPERTY
SET_TIMER
SET_VAR
SET_VIEW_PROPERTY
SET_WINDOW_PROPERTY
SHOW_ALERT
SHOW_EDITOR
SHOW_KEYS
SHOW_LOV
SHOW_MENU
SHOW_VIEW
SHOW_WINDOW
SYNCHRONIZE
T
TERMINATE
TO_VARIANT
U
UNSET_GROUP_SELECTION
UP
UPDATE_CHART
UPDATE_RECORD
USER_EXIT
V
VALIDATE
VARPTR_TO_VAR
VAR_TO_TABLE
VAR_TO_<type>
VAR_TO_VARPTR
VBX.FIRE_EVENT
VBX.GET_PROPERTY
VBX.GET_VALUE_PROPERTY
VBX.INVOKE_METHOD
VBX.SET_PROPERTY
VBX.SET_VALUE_PROPERTY
W
WEB.SHOW_DOCUMENT
WHERE_DISPLAY
WRITE_IMAGE_FILE
WRITE_SOUND_FILE
X
Y
Z
ActiveX Built-ins

All Built-ins

ADD_OLEARGS
CALL_OLE
CALL_OLE_<return type>
CREATE_OLEOBJ
CREATE_VAR
DESTROY_VARIANT
DISPATCH_EVENT
GET_OLEARG_<type>
GET_OLE_MEMBERID
GET_OLE_<proptype>
GET_VAR_BOUNDS
GET_VAR_DIMS
GET_VAR_TYPE
INIT_OLEARGS
LAST_OLE_ERROR
LAST_OLE_EXCEPTION
OLEVAR_EMPTY
PTR_TO_VAR
RELEASE_OBJ
SET_OLE
SET_VAR
TO_VARIANT
VARPTR_TO_VAR
VAR_TO_TABLE
VAR_TO_<type>
VAR_TO_VARPTR

Alert Built-ins

All Built-ins

FIND_ALERT
ID_NULL
SET_ALERT_BUTTON_PROPERTY
SET_ALERT_PROPERTY
SHOW_ALERT

Application Built-ins
All Built-ins
DO_KEY
GET_APPLICATION_PROPERTY
HOST
PAUSE
SET_APPLICATION_PROPERTY
USER_EXIT

Block Built-ins

All Built-ins

BLOCK_MENU
CLEAR_BLOCK
FIND_BLOCK
GET_BLOCK_PROPERTY
GO_BLOCK
ID_NULL
NEXT_BLOCK
PREVIOUS_BLOCK
SET_BLOCK_PROPERTY

Canvas Built-ins

All Built-ins

FIND_CANVAS
FIND_VIEW
GET_CANVAS_PROPERTY
GET_VIEW_PROPERTY
HIDE_VIEW
ID_NULL
PRINT
SCROLL_VIEW
SET_CANVAS_PROPERTY
SET_VIEW_PROPERTY
SHOW_VIEW

Chart Built-ins

All Built-ins

UPDATE_CHART

Form Built-ins

All Built-ins
BELL
BREAK
CALL_FORM
CALL_INPUT
CLEAR_FORM
COMMIT_FORM
DEBUG_MODE
ENTER
ERASE
EXECUTE_TRIGGER
EXIT_FORM
FIND_FORM
FORM_FAILURE
FORM_FATAL
FORM_SUCCESS
GET_FORM_PROPERTY
HELP
ID_NULL
NEW_FORM
OPEN_FORM
POST
REDISPLAY
REPLACE_MENU
SET_FORM_PROPERTY
SHOW_KEYS
SHOW_MENU
SYNCHRONIZE

Item Built-ins

All Built-ins

CHECKBOX_CHECKED
CLEAR_EOL
CLEAR_ITEM
CONVERT_OTHER_VALUE
COPY
COPY_REGION
CUT_REGION
DEFAULT_VALUE
DISPLAY_ITEM
DUMMY_REFERENCE
DUPLICATE_ITEM
EDIT_TEXTITEM
FIND_ITEM
GET_FILE_NAME
GET_ITEM_INSTANCE_PROPERTY
GET_ITEM_PROPERTY
GET_RADIO_BUTTON_PROPERTY
GO_ITEM
ID_NULL
IMAGE_SCROLL
IMAGE_ZOOM
NAME_IN
NEXT_ITEM
NEXT_KEY
PASTE_REGION
PLAY_SOUND
PREVIOUS_ITEM
READ_IMAGE_FILE
READ_SOUND_FILE
RECALCULATE
SELECT_ALL
SET_ITEM_INSTANCE_PROPERTY
SET_ITEM_PROPERTY
SET_RADIO_BUTTON_PROPERTY
WRITE_IMAGE_FILE
WRITE_SOUND_FILE

Menu Built-ins

All Built-ins

APPLICATION_PARAMETER
FIND_MENU_ITEM
GET_MENU_ITEM_PROPERTY
HIDE_MENU
ITEM_ENABLED
MENU_CLEAR_FIELD
MENU_PARAMETER
MENU_PREVIOUS_FIELD
MENU_REDISPLAY
MENU_SHOW_KEYS
NEXT_MENU_ITEM
PREVIOUS_MENU
PREVIOUS_MENU_ITEM
QUERY_PARAMETER
REPLACE_MENU
SET_INPUT_FOCUS
SET_MENU_ITEM_PROPERTY
SHOW_MENU
TERMINATE
WHERE_DISPLAY

Message Built-ins

All Built-ins

CLEAR_MESSAGE
DBMS_ERROR_CODE
DBMS_ERROR_TEXT
DISPLAY_ERROR
ERROR_CODE
ERROR_TEXT
ERROR_TYPE
GET_MESSAGE
MESSAGE
MESSAGE_CODE
MESSAGE_TEXT
MESSAGE_TYPE

Multiple Form Built-ins

All Built-ins

CLOSE_FORM
GO_FORM
NEW_FORM
NEXT_FORM
OPEN_FORM
PREVIOUS_FORM

OLE Built-ins

All Built-ins

FORMS_OLE.ACTIVATE_SERVER
FORMS_OLE.CLOSE_SERVER
FORMS_OLE.EXEC_VERB
FORMS_OLE.FIND_OLE_VERB
FORMS_OLE.GET_INTERFACE_POINTER
FORMS_OLE.GET_VERB_COUNT
FORMS_OLE.GET_VERB_NAME
FORMS_OLE.INITIALIZE_CONTAINER
FORMS_OLE.SERVER_ACTIVE

Parameter List Built-ins

All Built-ins

ADD_PARAMETER
CREATE_PARAMETER_LIST
DELETE_PARAMETER
DESTROY_PARAMETER_LIST
GET_PARAMETER_ATTR
ID_NULL
RUN_PRODUCT
SET_PARAMETER_ATTR

PECS Built-ins

All Built-ins

PECS.ADD_CLASS
PECS.ADD_EVENT
PECS.COLLECTOR
PECS.DISABLE_CLASS
PECS.ENABLE_CLASS
PECS.END_EVENT
PECS.POINT_EVENT
PECS.START_EVENT

Query Built-ins

All Built-ins

ABORT_QUERY
COUNT_QUERY
ENTER_QUERY
EXECUTE_QUERY

Record Built-ins
All Built-ins

CHECK_RECORD_UNIQUENESS
CLEAR_RECORD
CREATE_QUERIED_RECORD
CREATE_RECORD
DELETE_RECORD
DOWN
DUPLICATE_RECORD
FIRST_RECORD
GENERATE_SEQUENCE_NUMBER
GET_RECORD_PROPERTY
GO_RECORD
INSERT_RECORD
LAST_RECORD
LOCK_RECORD
NEXT_RECORD
NEXT_SET
PREVIOUS_RECORD
SCROLL_DOWN
SCROLL_UP
SELECT_RECORDS
SET_RECORD_PROPERTY
UP
UPDATE_RECORD

Relation Built-ins

All Built-ins

FIND_RELATION
GET_RELATION_PROPERTY
ID_NULL
SET_RELATION_PROPERTY

Report Built-ins

All Built-ins

CANCEL_REPORT_OBJECT
COPY_REPORT_OUTPUT
FIND_REPORT_OBJECT
GET_REPORT_OBJECT_PROPERTY
RUN_REPORT_OBJECT
SET_REPORT_OBJECT_PROPERTY

Tab Page Built-ins

All Built-ins

FIND_TAB_PAGE
GET_TAB_PAGE_PROPERTY
SET_TAB_PAGE_PROPERTY

Transaction Built-ins

All Built-ins

CHECK_RECORD_UNIQUENESS
DELETE_RECORD
ENFORCE_COLUMN_SECURITY
FETCH_RECORDS
FORMS_DDL
GENERATE_SEQUENCE_NUMBER
INSERT_RECORD
ISSUE_ROLLBACK
ISSUE_SAVEPOINT
LOGON
LOGON_SCREEN
LOGOUT
SELECT_RECORDS
UPDATE_RECORD

VBX Built-ins

All Built-ins

VBX.FIRE_EVENT
VBX.GET_PROPERTY
VBX.GET_VALUE_PROPERTY
VBX.INVOKE_METHOD
VBX.SET_PROPERTY
VBX.SET_VALUE_PROPERTY

Web Built-ins

All Built-ins

WEB.SHOW_DOCUMENT

Window Built-ins
All Built-ins

FIND_WINDOW
GET_WINDOW_PROPERTY
HIDE_WINDOW
ID_NULL
MOVE_WINDOW
REPLACE_CONTENT_VIEW
RESIZE_WINDOW
SET_WINDOW_PROPERTY
SHOW_WINDOW

Properties

Alphabetic list Related Topics

Alert properties
Application properties
Block properties
Canvas properties
Chart properties
Editor properties
Form Parameter properties
Form Module properties
Frame properties
Graphics properties
Item properties
LOV properties
Menu properties
Named Visual Attribute Properties
Prompt properties
Record properties
Record Group properties
Relation properties
Report properties
Tab Page properties
Trigger properties
Window properties

Form Builder Properties

All Properties

A
About Control
Access Key
Alert Style
Alias
Allow Expansion
Allow Multi-Line Prompts
Allow Start-Attached Prompts
Allow Top-Attached Prompts
Application Instance
Arrow Style
Associated Menus
Audio Channels
Automatical Column Width
Automatic Display
Automatic Position
Automatic Query
Automatic Refresh
Automatic Select
Automatic Skip (Item)
Automatic Skip (LOV)
B
Background_Color
Bevel
Block Description
Bottom Title (Editor)
Builtin Date Format
Button 1 Label, Button 2 Label, Button 3 Label
C
Calculation Mode
Calling_Form
Canvas
Canvas Type
Cap Style
Case Insensitive Query
Case Restriction
Character Cell WD/HT
Check Box Mapping of Other Values
Checked
Clip Height
Clip Width
Clip X Position
Clip Y Position
Close Allowed
Closed
Column Mapping Properties
Column Name
Column Specifications
Column Title
Column Value
Command Text
Command Type
Comments
Communication Mode (Chart)
Communication Mode (Report)
Compress
Compression_Quality
Conceal Data
Connect_String
Console Window
Control Help
Control Properties
Coordinate System
Coordination
Coordination_Status
Copy Value from Item
Current_Form
Current_Form_Name
Current_Record
Current Record Visual Attribute
Current_Row_Background_Color
Current_Row_Fill_Pattern
Current_Row_Font_Name
Current_Row_Font_Size
Current_Row_Font_Spacing
Current_Row_Font_Style
Current_Row_Font_Weight
Current_Row_Foreground_Color
Current_Row_White_On_Black
Cursor Mode
Cursor_Style
Custom Spacing
D
Dash Style
Data Block Description
Data Source Data Block (Chart)
Data Source Data Block (Report)
Data Source X Axis
Data Source Y Axis
Data Type
Data Type (Record Group)
Database Block
Database_Value
Datasource
Default Alert Button
Default Button
Default Font Scaling
Deferred
Defer_Required_Enforcement
Delete Allowed
Delete Procedure Arguments
Delete Procedure Name
Delete Procedure Result Set Columns
Delete Record Behavior
Detail Block
Detail Reference Item
Direction
Display without Privilege
Display_Height
Display in Keyboard Help
Display Hint Automatically
Display Quality
Display_Width
Display Width (LOV)
Distance Between Records
Dither
DML Array Size
DML Data Target Name
DML Data Target Type
E
Edge Background Color
Edge Foreground Color
Edge Pattern
Editor
Editor X Position, Editor Y Position
Elements in List
Enabled (Item)
Enabled (Menu Item)
Enabled (Tab Page)
End Angle
Enforce Column Security
Enforce Primary Key
Enterable
Execution Mode (Chart)
Execution Mode (Report)
Execution Style
F
File_Name
Fill
Fill_Pattern
Filter Before Display
Fire in Enter-Query Mode
First_Block
First_Detail_Relation
First_Item
First_Master_Relation
First Navigation Block
Fixed Bounding Box
Fixed Length (Item)
Fixed Length (Menu Substitution Parameter)
Font Spacing
Font_Name
Font_Size
Font_Spacing
Font_Style
Font_Weight
Foreground_Color
Form Horizontal Toolbar Canvas
Form Vertical Toolbar Canvas
Form_Name
Format Mask
Formula
Frame Alignment
Frame Title
Frame Title Alignment
Frame Title Font Name
Frame Title Font Size
Frame Title Font Spacing
Frame Title Font Style
Frame Title Font Weight
Frame Title Font Foreground Color
Frame Title Offset
Frame Title Reading Order
Frame Title Spacing
Frame Title Visual Attribute Group
G
Graphics Type
Group_Name
H
Help
Hide on Exit
Highest Value Allowed
Hint (Item)
Hint (Menu Item)
Hint (Menu Substitution Parameter)
Horizontal Justification
Horizontal Margin
Horizontal Object Offset
Horizontal Origin
Horizontal Toolbar Canvas
I
Icon Filename
Icon in Menu
Iconic
Image_Depth
Image_Format
Implementation Class
Include REF Item
Inherit Menu
Initial Keyboard State
Initial Menu
Initial Value
Insert Allowed (Block)
Insert Allowed (Item)
Insert Procedure Arguments
Insert Procedure Name
Insert Procedure Result Set Columns
Interaction Mode
Isolation Mode
Item_Is_Valid
Item Roles
Item_Tab_Page (item)
Item Type
J
Join Condition
Join Style
Justification
K
Keep Cursor Position
Keyboard Accelerator
Keyboard Help Description
Keyboard Navigable
Keyboard State
Key Mode
L
Label (Item)
Label (Menu Item)
Label (Menu Parameter)
Label (Tab Page)
Last_Block
Last_Item
Last Query
Layout Data Block
Layout Style
Length
Line Spacing
Line Width
Listed in Block Menu/Block Description
List Item Value
List of Values
List Style
List Type
List X Position
List Y Position
Lock Procedure Arguments
Lock Procedure Name
Lock Procedure Result Set Columns
Lock Record
Locking Mode
Lowest Value Allowed
M
Magic Item
Main Menu
Mapping of Other Values
Maximize Allowed
Maximum Length (Form Parameter)
Maximum Length (Item)
Maximum Length (Menu Substitution Parameter)
Maximum Objects Per Line
Maximum Query Time
Maximum Records Fetched
Menu Description
Menu Directory
Menu Filename
Menu Item Code
Menu Item Radio Group
Menu Item Type
Menu Module
Menu Role
Menu Source
Menu Style
Message
Minimize Allowed
Minimized Title
Modal
Module_NLS_Lang
Module Roles
Mouse Navigate
Mouse Navigation Limit
Move Allowed
Multi-Line
N
Name
Navigation Style
NextBlock
NextItem
Next_Detail_Relation
Next_Master_Relation
Next Navigation Block
Next Navigation Item
Number of Items Displayed
Number of Records Buffered
Number of Records Displayed
O
OLE Activation Style
OLE Class
OLE In-place Activation
OLE Inside-Out Support
OLE Popup Menu Items
OLE Resize Style
OLE Tenant Aspect
OLE Tenant Types
Operating_System
Optimizer_Hint
Order By
Other Reports Parameters
P
Parameter Data Type
Parameter Initial Value
Parameter Menu Initial Value
Password
PLSQL Date Format
Popup Menu (Item, Canvas)
Position (X, Y)
Precompute Summaries
Prevent Masterless Operation
Previous Navigation Block
PreviousBlock
PreviousItem
Previous Navigation Item
Primary Canvas
Primary Key (Item)
Program Unit Text
Prompt
Prompt Alignment
Prompt Alignment Offset
Prompt Attachment Edge
Prompt Attachment Offset
Prompt Display Style
Prompt Font Name
Prompt Font Size
Prompt Font Spacing
Prompt Font Style
Prompt Font Weight
Prompt Foreground Color
Prompt Background Color
Prompt Fill Pattern
Prompt Justification
Prompt Reading Order
Prompt Visual Attribute Group
Prompt_Background_Color
Prompt_Fill_Pattern
Prompt_Font_Name
Prompt_Font_Size
Prompt_Font_Spacing
Prompt_Font_Style
Prompt_Font_Weight
Prompt_Foreground_Color
Prompt_White_On_Black
Property Class
Q
Query All Records
Query Allowed (Block)
Query Allowed (Item)
Query Array Size
Query Data Source Arguments
Query Data Source Columns
Query Data Source Name
Query Data Source Type
Query Length
Query Name
Query Only
Query_Hits
Query_Options
R
Radio Button Value
Raise on Entry
Reading Order
Real Unit
Record Group
Record Group Fetch Size
Record Group Query
Record Group Type
Record Orientation
Records_To_Fetch
Relation Type
Rendered
Report Destination Format
Report Destination Name
Report Destination Type
Report Server
Required (Item)
Required (Menu Substitution Parameter)
Resize Allowed
Return Item (LOV)
Rotation Angle
Runtime Compatibility Mode
S
Savepoint Mode
Savepoint_Name
Scroll Bar Alignment
Scroll Bar Height
Scroll Bar Width
Secure (Menu Substitution Parameter)
Share Library with Form
Show Fast Forward Button
Show Horizontal Scroll Bar
Show OLE Popup Menu
Show OLE Tenant Type
Show Palette
Show Play Button
Show Record Button
Show Rewind Button
Show Scroll Bar
Show Slider
Show Time Indicator
Show Vertical Scroll Bar
Show Volume Control
Shrinkwrap
Single Object Alignment
Single Record
Size
Sizing Style
Sound Format
Sound Quality
Start Angle
Start Prompt Alignment
Start Prompt Offset
Startup Code
Status (Block)
Status (Record)
Subclass Information
Submenu Name
Summarized Block
Summarized Item
Summary Function
Synchronize with Item
T
Tab Attachment Edge
Tab Page
Tab Page X Offset
Tab Page Y Offset
Tab Style
Tear-off Menu
Timer_Name
Title
Tooltip
Tooltip_Background_Color
Tooltip_Fill_Pattern
Tooltip_Font_Name
Tooltip_Font_Size
Tooltip_Font_Spacing
Tooltip_Font_Style
Tooltip_Font_Weight
Tooltip_Foreground_Color
Tooltip Visual Attribute Group
Tooltip_White_On_Black
Topmost_Tab_Page (Canvas)
Top Prompt Alignment
Top Prompt Offset
Top Title
Top_Record
Transactional Triggers
Trigger Style
Trigger Text
Trigger Type
U
Update Allowed (Block)
Update Allowed (Item)
Update Changed Columns Only
Update_Column
Update_Commit
Update Layout
Update Only if NULL
Update_Permission
Update Procedure Arguments
Update Procedure Name
Update Procedure Result Set Columns
Update_Query
Use 3D Controls
Use Security
User_Interface
User_NLS_Date_Format
User_NLS_Lang
Username
V
Validate from List
Validation
Validation Unit
Value When Checked
Value When Unchecked
VBX Control File
VBX Control Name
VBX Control Value
Vertical Fill
Vertical Justification
Vertical Margin
Vertical Object Offset
Vertical Origin
Vertical Toolbar Canvas
Viewport Height, Viewport Width
Viewport X Position, Viewport Y Position
Viewport X Position on Canvas, Viewport Y Position on Canvas
Visible
Visible (Canvas)
Visible (Item)
Visible in Menu
Visible (Tab Page)
Visible In Horizontal/Vertical Menu Toolbar
Visual_Attribute
Visual Attribute Group
Visual Attribute Type
W
Where Clause/Order By Clause
White_On_Black
Width/Height
Window
Window_Handle
Window_State
Window Style
Wrap Style
Wrap Text
X
X Corner Radius
X Position, Y Position
Y
Y Position, X Position
Z

Alert Properties

All Properties

Alert style
Button 1 Label, Button 2 Label, Button 3 Label
Comments
Default Alert Button
Default Button
Menu Source
Message
Name
Property Class
Title

Application Properties

All Properties

Calling_Form
Comments
Connect_String
Current_Form
Current_Form_Name
Cursor_Style
Datasource
Display_Height
Display_Width
Interaction_Mode
Isolation_Mode
Maximum_Query_Time
Maximum_Records_Fetched
Name
Operating_System
Password
Savepoint_Name
Timer_Name
User_Interface
Username
User_NLS_Lang

Block Properties

All Properties

Application Instance
Block Description
Comments
Current_Record
Current Record Visual Attribute Group
Data Block Description
Database Block
Delete Allowed
Delete Procedure Arguments
Delete Procedure Name
Delete Procedure Result Set Columns
DML Array Size
DML Data Target Name
DML Data Target Type
Enforce Column Security
Enforce Primary Key
Enterable
First_Block
First_Detail_Relation
First_Item
First_Master_Relation
Insert Allowed (Block)
Insert Procedure Arguments
Insert Procedure Name
Insert Procedure Result Set Columns
Join Condition
Key Mode
Last_Item
Listed in Block Menu/Block Description
Locking Mode
Lock Procedure Name
Lock Procedure Result Set Columns
Name
Navigation Style
NextBlock
Next Navigation Block
Number of Records Buffered
Number of Records Displayed
Optimizer_Hint
Order By
Precompute Summaries
Previous Navigation Block
PreviousBlock
Property Class
Query All Records
Query Allowed (Block)
Query Array Size
Query Data Source Arguments
Query Data Source Columns
Query Data Source Name
Query Data Source Type
Query_Hits
Query_Options
Record Orientation
Records_To_Fetch
Show Scroll Bar
Single Record
Status (Block)
Top_Record
Transactional Triggers
Update Allowed (Block)
Update Changed Columns Only
Update Procedure Arguments
Update Procedure Name
Update Procedure Result Set Columns
Where Clause/Order By Clause
Window_Handle

Canvas Properties

All Properties

Bevel
Canvas Type
Comments
Form Horizontal Toolbar Canvas
Form Vertical Toolbar Canvas
Name
Popup Menu
Property Class
Raise on Entry
Size
Tab Attachment Edge
Tab Style
Topmost_Tab_Page
Viewport Height, Viewport Width
Viewport X Position, Viewport Y Position
Viewport X Position on Canvas, Viewport Y Position on Canvas
Visible (Canvas)
Visual Attribute Group
Width/Height
Window
X Position, Y Position

Chart Properties

All Properties

Communication Mode (Chart)


Data Source Data Block (Chart)
Execution Mode (Chart)

Editor Properties

All Properties

Bottom Title (Editor)


Comments
Editor X Position, Editor Y Position
Name
Property Class
Show Horizontal Scroll Bar
Size
Top Title
Width/Height
Wrap Style
X Position, Y Position

Frame Properties

All Properties

Allow Expansion
Allow Multi-Line Prompts
Allow Start-Attached Prompts
Allow Top-Attached Prompts
Distance Between Records
Frame Alignment
Frame Title
Frame Title Alignment
Frame Title Font Name
Frame Title Font Size
Frame Title Font Spacing
Frame Title Font Style
Frame Title Font Weight
Frame Title Font Foreground Color
Frame Title Offset
Frame Title Reading Order
Frame Title Spacing
Frame Title Visual Attribute Group
Horizontal Object Offset
Layout Style
Maximum Objects Per Line
Number of Records Displayed
Scroll Bar Alignment
Scroll Bar Width
Show Scroll Bar
Shrinkwrap
Single Object Alignment
Start Prompt Alignment
Start Prompt Offset
Top Prompt Alignment
Top Prompt Offset
Update Layout
Vertical Fill
Vertical Margin
Vertical Object Offset

Graphics Properties

All Properties

Cap Style
Dash Style
Edge Background Color
Edge Foreground Color
Edge Pattern
Graphics Type
Join Style
Line Width
Rotation Angle

Item Properties

All Properties

About Control
Access Key
Application Instance
Audio Channels
Automatic Skip (Item)
Bevel
Calculation Mode
Canvas
Case Insensitive Query
Case Restriction
Check Box Mapping of Other Values
Column Name
Comments
Compress
Compression_Quality
Conceal Data
Control Help
Control Properties
Copy Value from Item
Current Record Visual Attribute
Data Source X Axis
Data Source Y Axis
Database_Value
Default Button
Display Hint Automatically
Display Quality
Distance Between Records
Editor
Editor X Position, Editor Y Position
Elements in List
Enabled (Item)
Fixed Length (Item)
Format Mask
Formula
Highest Value Allowed
Hint (Item)
Icon Filename
Iconic
Image_Depth
Image_Format
Implementation Class
Initial Value
Initial Keyboard State
Insert Allowed (Item)
Item_Is_Valid
Item_Tab_Page (item)
Item Type
Justification
Keep Cursor Position
Keyboard Navigable
Keyboard State
Label (Item)
List Item Value
List of Values
List Style
List X Position
List Y Position
Lock Record
Lowest Value Allowed
Mapping of Other Values
Maximum Length (Item)
Mouse Navigate
Multi-Line
Name
NextItem
Next Navigation Item
Number of Items Displayed
OLE Activation Style
OLE Class
OLE In-place Activation
OLE Inside-Out Support
OLE Popup Menu Items
OLE Resize Style
OLE Tenant Aspect
OLE Tenant Types
Parameter Data Type
Popup Menu
PreviousItem
Previous Navigation Item
Primary Key (Item)
Property Class
Query Allowed (Item)
Query Length
Query Only
Radio Button Value
Rendered
Required (Item)
Size
Sizing Style
Show Fast Forward Button
Show Horizontal Scroll Bar
Show OLE Popup Menu
Show OLE Tenant Type
Show Palette
Show Play Button
Show Record Button
Show Rewind Button
Show Slider
Show Time Indicator
Show Volume Control
Sound Format
Sound Quality
Summarized Block
Summarized Item
Summary Function
Synchronize with Item
Tab Page
Tooltip
Tooltip Visual Attribute Group
Update Allowed (Item)
Update_Column
Update_Commit
Update Only if NULL
Update_Permission
Validate from List
Value When Checked
Value When Unchecked
VBX Control File
VBX Control Name
VBX Control Value
Visible (Item)
Visual Attribute Group
Width/Height
Window_Handle
Wrap Style
Wrap Text
X Position, Y Position

LOV Properties

All Properties

Associated Menus
Automatic Display
Automatic Refresh
Automatic Select
Automatic Skip (LOV)
Column Mapping Properties
Column Name
Column Specifications
Column Title
Comments
Display Width (LOV)
Filter Before Display
Group_Name
List Type
Name
Property Class
Record Group
Return Item (LOV)
Size
Title
X Position, Y Position

Menu Properties

All Properties

Bottom Title
Case Restriction
Checked
Command Text
Command Type
Comments
Display without Privilege
Enabled (Menu Item)
Fixed Length (Menu Substitution Parameter)
Help
Hint (Menu Item)
Hint (Menu Substitution Parameter)
Icon Filename
Icon in Menu
Item Roles
Keyboard Accelerator
Label (Menu Item)
Label (Menu Parameter)
Magic Item
Maximum Length (Menu Substitution Parameter)
Menu Description
Menu Directory
Menu Filename
Menu Item Radio Group
Menu Item Type
Menu Module
Menu Source
Module Roles
Parameter Data Type
Parameter Menu Initial Value
Property Class
Required (Menu Substitution Parameter)
Secure (Menu Substitution Parameter)
Share Library with Form
Startup Code
Tear-off Menu
Title
Use Security
Visible In Horizontal/Vertical Menu Toolbar
Visible in Menu
Visual Attribute Group

Module Properties

All Properties

Application Instance
Character Cell WD/HT
Comments
Console Window
Coordinate System
Current Record Visual Attribute
Cursor Mode
Defer_Required_Enforcement
File_Name
First_Block
First Navigation Block
Font Spacing
Form Horizontal Toolbar Canvas
Form Vertical Toolbar Canvas
Form_Name
Initial Menu
Last_Block
Menu Module
Menu Role
Menu Source
Menu Style
Module_NLS_Lang
Mouse Navigation Limit
Name
Property Class
Real Unit
Runtime Compatibility Mode
Savepoint Mode
Title
Use 3D Controls
Validation
Validation Unit
Window_Handle

Parameter Properties

All Properties

Comments
Maximum Length (Form Parameter)
Name
Parameter Data Type
Parameter Initial Value
Property Class

Prompt Properties

All Properties

Prompt
Prompt Alignment
Prompt Alignment Offset
Prompt Attachment Edge
Prompt Attachment Offset
Prompt Background Color
Prompt Display Style
Prompt Fill Pattern
Prompt Font Name
Prompt Font Size
Prompt Font Spacing
Prompt Font Style
Prompt Font Weight
Prompt Foreground Color
Prompt Justification
Prompt Reading Order
Prompt Visual Attribute Group

Record Properties

All Properties

Status (Record)

Record Group Properties

All Properties

Column Name
Column Specifications
Column Value
Comments
Data Type
Delete Record Behavior
Length
Name
Property Class
Record Group Fetch Size
Record Group Query
Record Group Type

Relation Properties

All Properties

Comments
Coordination
Coordination_Status
Deferred
Detail Block
Join Condition
Name
Next_Detail_Relation
Next_Master_Relation
Prevent Masterless Operation
Property Class

Report Properties

All Properties

Communication Mode (Report)


Data Source Data Block (Report)
Execution Mode (Report)
Other Reports Parameters
Query Name
Report Destination Format
Report Destination Name
Report Destination Type

Tab Page Properties

All Properties

Canvas
Enabled (Tab Page)
Label (Tab Page)
Tab Page X Offset
Tab Page Y Offset
Visible (Tab Page)
Visual Attribute Group

Trigger Properties

All Properties

Comments
Display in Keyboard Help
Execution Style
Fire in Enter-Query Mode
Keyboard Help Description
Name
Property Class
Trigger Style
Trigger Text
Trigger Type

Named Visual Attribute Properties

All Properties
Background_Color
Foreground_Color
Name
Property Class
Size
Visible
Visual_Attribute
Visual Attribute Type
White_On_Black
Width/Height

Window Properties

All Properties

Close Allowed
Comments
Hide on Exit
Horizontal Toolbar Canvas
Icon Filename
Inherit Menu
Maximize Allowed
Minimize Allowed
Minimized Title
Modal
Move Allowed
Name
Primary Canvas
Property Class
Resize Allowed
Show Horizontal Scroll Bar
Show Vertical Scroll Bar
Size
Title
Vertical Toolbar Canvas
Visible
Visual_Attribute
Visual Attribute Group
Window_State
Window Style
X Position, Y Position
Options

Alphabetic list

Forms Runtime options


Form Compiler options
Form Builder options

Form Builder Options

All Options

A
Access (Form Builder)
Add_Triggers (Form Compiler)
Array Processing
B
Batch (Form Compiler)
Block_Menu (Forms Runtime)
Buffer_Records in File
Build (Forms Compiler)
Build Before Running
C
Chart Wizard Welcome Page
Color Mode
Color Palette
Compile_All
CRT_File (Form Compiler)
D
Data Block Wizard Welcome Page
Debug (Forms Runtime)
Debug_Messages (Forms Runtime)
Delete (Form Compiler)
E
Extract (Form Compiler)
F
G
H
Help (Form Builder)
Help (Form Compiler)
Help (Forms Runtime)
HTML File Name
I
Insert (Form Compiler)
Interactive (Forms Runtime)
J
K
Keyin (Forms Runtime)
Keyout (Forms Runtime)
L
Layout Wizard Welcome Page
Logon (Form Compiler)
Logon_Screen (Forms Runtime)
LOV Welcome Page
M
Module_Access (Form Builder)
Module_Access (Form Compiler)
Module_Type (Form Builder)
Module_Type (Form Compiler)
N
Nofail (Form Compiler)
O
Optimize SQL (Forms Runtime)
Optimize Transaction Processing (Forms Runtime)
Output_File (Form Compiler)
Output_File (Forms Runtime)
P
Parse (Form Compiler)
Printer
Q
Query_Only (Forms Runtime)
Quiet Mode (Forms Runtime)
R
Run Modules Asynchronously
S
Save Before Building
Script (Form Compiler)
Session (Forms Runtime)
Statistics (Form Compiler)
Statistics (Forms Runtime)
Strip_Source (Forms Runtime)
Subclassing Path
Suppress Hints
T
Term (Forms Runtime)
U
Upgrade (Form Compiler)
Upgrade_Roles (Form Compiler)
Use System Editor
V
Version (Form Compiler)
W
Welcome Dialog
Wizard Welcome Pages
X
Y
Z

Forms Runtime Options

All Options

Array
Block_Menu
Buffer_Records
Debug
Debug_Messages
Help
Interactive
Keyin
Keyout
Logon_Screen
OptimizeSQL
OptimizeTP
Options_Screen
Output_File
PECS
Query_Only
Quiet
Session
Statistics
Term
Window_State

Form Compiler Options

All Options

Add_Triggers
Batch
Build
Compile_All
CRT_File
Debug
Delete
Extract
Help
Insert
Logon
Module_Access
Module_Type
Nofail
Options_Screen
Output_File
Parse
Script
Statistics
Strip_Source
Upgrade
Upgrade_Roles
Version
Widen_Fields

Form Builder Options

All Options

Color Mode
Color Palette
Generate Before Run
Help
Module_Access
Module_Type
Printer
Run Modules Asynchronously
Save Before Generate
Suppress Hints
Use System Editor
User Preferences

Triggers

Alphabetic list Related Topics

Active X triggers
Block Processing triggers
Interface Event triggers
Key triggers
Master-Detail triggers
Message-Handling triggers
Mouse Event triggers
Navigation triggers
On triggers
Post triggers
Pre triggers
Query-Time triggers
Stored Procedure triggers
Transactional triggers
Validation triggers
When triggers

Form Builder Triggers

All Triggers

A
B
C
D
Delete-Procedure
E
F
Function Key Triggers
G
H
I
Insert-Procedure
J
K
Key-Fn
Key-Others
L
Lock-Procedure
M
N
O
On-Check-Delete-Master
On-Check-Unique
On-Clear-Details
On-Close
On-Column-Security
On-Commit
On-Count
On-Delete
On-Dispatch-Event
On-Error
On-Fetch
On-Insert
On-Lock
On-Logon
On-Logout
On-Message
On-Populate-Details
On-Rollback
On-Savepoint
On-Select
On-Sequence-Number
On-Update
P
Post-Block
Post-Change
Post-Database-Commit
Post-Delete
Post-Form
Post-Forms-Commit
Post-Insert
Post-Logon
Post-Logout
Post-Query
Post-Record
Post-Select
Post-Text-Item
Post-Update
Pre-Block
Pre-Commit
Pre-Delete
Pre-Form
Pre-Insert
Pre-Logon
Pre-Logout
Pre-Popup-Menu
Pre-Query
Pre-Record
Pre-Select
Pre-Text-Item
Pre-Update
Q
Query-Procedure
R
S
T
U
Update-Procedure
User-Named
V
W
When-Button-Pressed
When-Checkbox-Changed
When-Clear-Block
When-Create-Record
When-Custom-Item-Event
When-Database-Record
When-Form-Navigate
When-Image-Activated
When-Image-Pressed
When-List-Activated
When-List-Changed
When-Mouse-Click
When-Mouse-DoubleClick
When-Mouse-Down
When-Mouse-Enter
When-Mouse-Leave
When-Mouse-Move
When-Mouse-Up
When-New-Block-Instance
When-New-Form-Instance
When-New-Item-Instance
When-New-Record-Instance
When-Radio-Changed
When-Remove-Record
When-Tab-Page-Changed
When-Timer-Expired
When-Validate-Item
When-Validate-Record
When-Window-Activated
When-Window-Closed
When-Window-Deactivated
When-Window-Resized
X
Y
Z

ActiveX Triggers

All Triggers

On-Dispatch-Event

Block Processing Triggers

All Triggers

When-Clear-Block
When-Create-Record
When-Database-Record
When-Remove-Record

Interface Event Triggers

All Triggers
When-Button-Pressed
When-Checkbox-Changed
When-Custom-Item-Event
When-Image-Activated
When-List-Activated
When-List-Changed
When-Mouse-Click
When-Mouse-DoubleClick
When-Mouse-Down
When-Mouse-Enter
When-Mouse-Leave
When-Mouse-Move
When-Mouse-Up
When-Radio-Changed
When-Timer-Expired
When-Window-Activated
When-Window-Closed
When-Window-Deactivated
When-Window-Resized

Key Triggers

All Triggers

Key-Fn
Key-Others

Master-Detail Triggers

All Triggers

On-Check-Delete-Master
On-Clear-Details
On-Populate-Details

Message-Handling Triggers

All Triggers

On-Error
On-Message

Mouse Event Triggers

All Triggers

When-Custom-Item-Event
When-Mouse-Click
When-Mouse-DoubleClick
When-Mouse-Down
When-Mouse-Enter
When-Mouse-Leave
When-Mouse-Move
When-Mouse-Up

Navigation Triggers

All Triggers

Post-Block
Post-Form
Post-Record
Post-Text-Item
Pre-Block
Pre-Form
Pre-Record
Pre-Text-Item
User-Named
When-New-Block-Instance
When-New-Form-Instance
When-New-Item-Instance
When-New-Record-Instance

On Triggers

All Triggers

On-Check-Delete-Master
On-Check-Unique
On-Clear-Details
On-Close
On-Column-Security
On-Commit
On-Count
On-Delete
On-Dispatch-Event
On-Error
On-Fetch
On-Insert
On-Lock
On-Logon
On-Logout
On-Message
On-Populate-Details
On-Rollback
On-Savepoint
On-Select
On-Sequence-Number
On-Update

Post Triggers

All Triggers

Post-Block
Post-Change
Post-Database-Commit
Post-Delete
Post-Form
Post-Forms-Commit
Post-Insert
Post-Logon
Post-Logout
Post-Query
Post-Record
Post-Select
Post-Text-Item
Post-Update

Pre Triggers

All Triggers

Pre-Block
Pre-Commit
Pre-Delete
Pre-Form
Pre-Insert
Pre-Logon
Pre-Logout
Pre-Popup-Menu
Pre-Query
Pre-Record
Pre-Select
Pre-Text-Item
Pre-Update

Query-Time Triggers

All Triggers

Post-Query
Pre-Query

Stored Procedure Triggers

All Triggers

Delete-Procedure
Insert-Procedure
Lock-Procedure
Query-Procedure
Update-Procedure

Transactional Triggers

All Triggers

On-Check-Delete-Master
On-Check-Unique
On-Clear-Details
On-Close
On-Column-Security
On-Commit
On-Count
On-Delete
On-Dispatch-Event
On-Error
On-Fetch
On-Insert
On-Lock
On-Logon
On-Logout
On-Message
On-Populate-Details
On-Rollback
On-Savepoint
On-Select
On-Sequence-Number
On-Update
Post-Block
Post-Change
Post-Database-Commit
Post-Delete
Post-Form
Post-Forms-Commit
Post-Insert
Post-Logon
Post-Logout
Post-Query
Post-Record
Post-Select
Post-Text-Item
Post-Update
Pre-Block
Pre-Commit
Pre-Delete
Pre-Form
Pre-Insert
Pre-Logon
Pre-Query
Pre-Select
Pre-Text-Item
Pre-Update

Validation Triggers

All Triggers

When-Validate-Item
When-Validate-Record

When Triggers

All Triggers

When-Button-Pressed
When-Checkbox-Changed
When-Clear-Block
When-Create-Record
When-Custom-Item-Event
When-Database-Record
When-Form-Navigate
When-Image-Activated
When-Image-Pressed
When-List-Activated
When-List-Changed
When-Mouse-Click
When-Mouse-DoubleClick
When-Mouse-Down
When-Mouse-Enter
When-Mouse-Leave
When-Mouse-Move
When-Mouse-Up
When-New-Block-Instance
When-New-Form-Instance
When-New-Item-Instance
When-New-Record-Instance
When-Radio-Changed
When-Remove-Record
When-Tab-Page-Changed
When-Timer-Expired
When-Validate-Item
When-Validate-Record
When-Window-Activated
When-Window-Closed
When-Window-Deactivated
When-Window-Resized

Using the Forms Developer user interface standards for Win95


Related Topics
I want to apply Win95 user interface standards to my...

button
check box

display item
list item
radio group

text item
text item with date format
CursorMania.com Ads by Google

Potrebbero piacerti anche