DISPLAY statement
- Last Updated: June 24, 2025
- 7 minute read
- OpenEdge
- Version 12.8
- Documentation
Moves data to a screen buffer and displays the data on the screen or other output destination. The AVM uses frames to display data. A frame describes how constant and variable data is arranged for display and data entry. You can let ABL construct default frames or you can explicitly describe frames and their characteristics.
Data movement

Syntax
|
|
|
- STREAM stream
- Specifies the name of a stream. If you do not name a stream, the AVM uses the unnamed stream. See the DEFINE STREAM statement reference entry and the topics on alternate I/O sources in OpenEdge Programming Interfaces for more information on streams.
- STREAM-HANDLE handle
- Specifies the handle to a stream. If handle is not a valid handle to a stream, the AVM generates a run-time error. Note that stream handles are not valid for the unnamed streams. See the topics on alternate I/O sources in OpenEdge Programming Interfaces for more information on streams and stream handles.
- UNLESS-HIDDEN
- Restricts
DISPLAYto fields whoseHIDDENattribute is FALSE. - expression
- Identifies a constant, field name, variable name, or expression that
results in the value you want to display. This can also be the built-in field name,
proc-text, that returns a character string of column values from a row returned by a
stored procedure proc-text-buffer.
If expression is a simple field or variable, the AVM checks to see if that particular field or variable is used previously in the same frame. If it has, the AVM displays the field or variable in the same frame field as the earlier instance of that field or variable.
In array fields, array elements with constant subscripts are treated just as any other field. Array fields with no subscripts are expanded as though you had typed in the implicit elements.
Note: You cannot display elements of an indeterminate array parameter or variable with no size. You can use theEXTENTstatement to set the number of elements in the array before displaying them. For more information, see the EXTENT statement reference entry.Note: You cannot display the whole array if the array is indeterminate, but you can display individual elements.If you reference
a[i]in the same frame that you reference a ora[constant],a[i]overlays the appropriate frame field based on the value of i. It is displayed in a new frame field fora[i]. For example.r-arry.p
/*1*/ DEFINE VARIABLE ix AS INTEGER NO-UNDO. /*2*/ FOR EACH SalesRep: /*3*/ DISPLAY SalesRep.SalesRep SalesRep.Region SalesRep.MonthQuota. /*4*/ DO ix = 1 TO 12: /*5*/ SET SalesRep.MonthQuota[ix] WITH 1 COLUMN. /*6*/ END. /*7*/ DISPLAY SalesRep.MonthQuota /*8*/ WITH FRAME a COLUMN 40 ROW 3 1 COLUMN. /*9*/ END.Here,
month-quota[i]is referenced in the same frame thatmonth-quotais referenced. That is, line 5 referencesmonth-quota[i]and line 3 referencesmonth-quota. Both references use the same frame. Therefore, instead of creating a new frame field formonth-quota[i], the AVM uses the same frame fields created for the entiremonth-quotaarray.In the next procedure, line 4 references only elements 1 and 2. Therefore, when the AVM tries to overlay
month-quota[i]in line 6, there is only room for elements 1 and 2. The AVM returns an error after you enter data for those two elements.r-arry2.p
/*1*/ DEFINE VARIABLE ix AS INTEGER NO-UNDO. /*2*/ FOR EACH SalesRep: /*3*/ DISPLAY SalesRep.SalesRep SalesRep.Region /*4*/ SalesRep.MonthQuota[1] SalesRep.MonthQuota[2]. /*5*/ DO ix = 1 TO 12: /*6*/ SET month-quota[ix] WITH 1 COLUMN. /*7*/ END. /*8*/ DISPLAY month-quota WITH FRAME a COLUMN 40 ROW 3 1 COLUMN. /*9*/ END.The following example shows a solution to that problem:
r-arry3.p
/*1*/ DEFINE VARIABLE ix AS INTEGER NO-UNDO. /*2*/ FOR EACH SalesRep: /*3*/ DISPLAY SalesRep.SalesRep SalesRep.Region /*4*/ SalesRep.MonthQuota[1] SalesRep.MonthQuota[2] WITH 6 DOWN. /*5*/ FORM ix SalesRep.MonthQuota[ix]. /*6*/ DO ix = 1 TO 12: /*7*/ DISPLAY ix NO-LABEL. /*8*/ SET SalesRep.MonthQuota[ix]. /*9*/ END. /*10*/ DISPLAY month-quota WITH FRAME a COLUMN 40 ROW 3 1 COLUMN. /*11*/ END.If you explicitly reference
a[ix]in aFORMstatement, regular array fields (month-quota[1]andmonth-quota[2]in this example) are not overlaid. - format-phrase
- Specifies one or more frame attributes for a field, variable, or expression. For more information on format-phrase, see the Format phrase reference entry.
- aggregate-phrase
- Identifies one or more aggregate values to be calculated optionally based
on a change in a break group. This is the syntax for aggregate-phrase:
{ AVERAGE | COUNT | MAXIMUM | MINIMUM | TOTAL | SUB-AVERAGE | SUB-COUNT | SUB-MAXIMUM | SUB-MINIMUM | SUB-TOTAL } ... [ LABEL aggr-label ] [ BY break-group ] ...For more information on aggregate-phrase, see the Aggregate phrase reference entry.
- WHEN expression
- Displays an item only when the expression used in the
WHENoption has a value of TRUE. Here, expression is a field name, variable name, or expression whose value is logical. - @ base-field
- The base-field must be the name of a field
or variable; it cannot be an expression or constant. The field or
variable must be viewed as a fill-in or text widget on the display.
The AVM reserves enough space for the base-field to hold the longest format displayed there. All right-justified fields (numerics that do not use side labels) are right justified within the reserved area. The label is left or right justified according to the base-field. Whenever you enter data into the base-field, the AVM blanks out any characters to the left or right of the area used by the field being displayed.
The AVM underlines a screen area that is the longer of the base-field and the overlaying field. However, you can enter as many characters as there are spaces in the format of the field.
To determine the format to use for displaying the expression at the base-field, the AVM looks at the following and uses the first format that applies:
- An explicit
FORMATphrase used with the expression. - If the expression is a character string constant, a format that accommodates that string.
- If the data type of the expression matches that of the base-field, the format of the base-field.
- The standard format of the expression as if it were displayed without a base-field.
- An explicit
- SPACE [ ( n ) ]
- Identifies the number (n) of blank spaces the AVM inserts after the displayed expression displays. The n can be 0. If the number of spaces is more than the spaces left on the current line of the frame, the AVM starts a new line and discards extra spaces. If you do not use this option or do not use n, the AVM inserts one space between items in the frame.
- SKIP [ ( n ) ]
- Identifies the number (n) of
blank lines the AVM needs to insert after the expression is displayed. The n can be 0. If you do not use this option, the AVM does not
skip a line between expressions unless the expressions do not fit on one line. If you
use the
SKIPoption but do not specify n, or if n is 0, the AVM starts a new line unless it is already at the beginning of a new line. - IN WINDOW window
- Identifies the window where the expression is displayed. The expression window must evaluate to the handle of a window.
- frame-phrase
- Specifies the overall layout and processing properties of a frame. For more information on frame-phrase, see the Frame phrase reference entry.
- record
- Identifies the name of the record you want to display. Naming a
record is shorthand for listing each field individually. This can also be the built-in
buffer name, proc-text-buffer, that returns each row retrieved by a stored procedure.
To display a record in a table defined for multiple databases, you must qualify the record's table name with the database name. See the record definition in the Record phrase reference entry for more information.
- EXCEPT field . . .
- Indicates that the AVM displays all fields except those fields listed in the
EXCEPTphrase. - WITH BROWSE browse
- Indicates that the AVM displays the values into the current row of
the specified browse widget. Note:
DISPLAY . . . WITH BROWSEcannot be used with a dynamic browse. Instead, the user must set the browse column'sSCREEN-VALUEattributes. - NO-ERROR
- The NO-ERROR option is used to prevent the statement from raising
ERRORand displaying error messages.The
DISPLAYstatement, withNO-ERRORin effect, may continue to execute even if it encounters an error resolving some part of an expression. This attempt to complete the operation may result in displaying the empty string at the location of the intended output.
Examples
This procedure generates a hierarchical report of Customers (sorted by state and name), the orders belonging to those Customers, and the order-lines belonging to each order:
r-disp.p
|
This procedure lists each order, Customer information, and the OrderLines for each Order. The procedure calculates an Order-value for each of the OrderLines of an Order, and adds those values to produce a total value for an entire Order.
r-disp2.p
|
The r-disp3.p procedure displays a
name and address list in a mailing label. The SKIP and
FORMAT options are used to produce a standard address format. The
WHEN option suppresses the display of the PostalCode field if there is no postal code value in the field.
r-disp3.p
|
Notes
- When ABL compiles a procedure, it uses a top-to-bottom pass of the procedure to design all the frames that procedure requires, adding field and related format attributes as it goes through the procedure.
- If you are displaying data that contains special control characters
such as tabs, form feeds, or backspaces, be sure to use an EDITOR widget of the
appropriate size for expression or base-field, or use the
VIEW-AS EDITORoption from format-phrase in theDISPLAYstatement. Otherwise, do not display data containing these characters. - If you use a single qualified identifier with the
DISPLAYstatement, the Compiler first interprets the reference as dbname.table-name. If the Compiler cannot resolve the reference as dbname.table-name, it tries to resolve it as table-name.fieldname. - If you invoke the
DISPLAYstatement for a frame, the AVM brings the frame into view unless theHIDDENattribute for the frame or one of its ancestor frames or windows is TRUE. - For more information on using the built-in field and buffer names,
proc-text and proc-text-buffer in a
DISPLAYstatement, see the OpenEdge DataServer Guides (Use the Microsoft SQL Data Server and Use the Oracle Data Server). - You cannot use the
DISPLAYstatement to display an object reference for a class instance directly. To display an object reference, you must first convert it using the INTEGER, INT64, orSTRINGfunction and display the result.
See also
ACCUM function, Aggregate phrase, DEFINE BROWSE statement, DEFINE FRAME statement, DOWN statement, EXPORT statement, FORM statement, Format phrase, Frame phrase, MESSAGE statement, NO-ERROR option, PAGE statement, PUT statement, PUT SCREEN statement, Stream object handle, UP statement, VIEW-AS phrase