CREATE BROWSE statement

(Graphical interfaces only)

Creates a dynamic read-only browse widget or a dynamic updatable browse widget. Add browse columns to the widget with the ADD-LIKE-COLUMN, ADD-COLUMNS-FROM, and ADD-CALC-COLUMN methods. Specify the query for the widget with the QUERY attribute.

The dynamic updatable browse can only be a NO-ASSIGN browse—you must make all data assignments to the database.

Note: Does not apply to SpeedScript programming.

Syntax

CREATE BROWSE handle
[ IN WIDGET-POOL widget-pool-name ]
[ ASSIGN { attribute=expression } ... ]
[ trigger-phrase ]
handle
A variable of type HANDLE that the AVM sets for the new widget.
IN WIDGET-POOL widget-pool-name
Specifies the widget pool in which the object is created. If you do not specify a widget pool, the object is created in the current default widget pool. The browse will go away when its widget pool goes away, or when you delete it with the DELETE OBJECT statement.
ASSIGN { attribute = expression }...
Assigns specified values to attributes of the object. The attribute parameter must be the name of a valid attribute for the object and expression must evaluate to a valid value for that attribute.
trigger-phrase
A trigger phrase associated with the object. For more information, see the Trigger phrase reference entry.

Example

The following example creates a dynamic browse and adds columns to it:

r-dynbrws.p

/* r-dynbrws */
DEFINE VARIABLE name-hdl       AS HANDLE  NO-UNDO.
DEFINE VARIABLE num-hdl        AS HANDLE  NO-UNDO.
DEFINE VARIABLE address-hdl    AS HANDLE  NO-UNDO.
DEFINE VARIABLE calc-col-hdl   AS HANDLE  NO-UNDO.
DEFINE VARIABLE browse-hdl     AS HANDLE  NO-UNDO.
DEFINE VARIABLE buff-field-hdl AS HANDLE  NO-UNDO.
DEFINE VARIABLE brws-col-hdl   AS HANDLE  NO-UNDO.
DEFINE VARIABLE jx             AS INTEGER NO-UNDO.

DEFINE BUTTON btn-delete LABEL "Delete".
DEFINE BUTTON btn-quit   LABEL "&Quit"  AUTO-ENDKEY.

DEFINE FRAME MyFrame SKIP(10)
  btn-delete btn-quit
  WITH SIZE 80 BY 22.

DEFINE QUERY q1 FOR Customer SCROLLING. 
OPEN QUERY q1 FOR EACH Customer NO-LOCK.

CREATE BROWSE browse-hdl
  ASSIGN 
    TITLE     = "Dynamic Browse"
    FRAME     = FRAME MyFrame:HANDLE
    QUERY     = QUERY q1:HANDLE
    X         = 2
    Y         = 2
    WIDTH     = 74
    DOWN      = 10
    VISIBLE   = YES
    READ-ONLY = NO
    SENSITIVE = TRUE.

ON ROW-DISPLAY OF browse-hdl DO:
  IF VALID-HANDLE(calc-col-hdl) THEN
    calc-col-hdl:SCREEN-VALUE = 
      STRING(Customer.CreditLimit - Customer.Balance).
END.

ASSIGN
  num-hdl      = browse-hdl:ADD-LIKE-COLUMN("Customer.CustNum").
  name-hdl     = browse-hdl:ADD-LIKE-COLUMN("Customer.Name").
  address-hdl  = browse-hdl:ADD-LIKE-COLUMN("Customer.Address").
  calc-col-hdl = browse-hdl:ADD-CALC-COLUMN("INT","->,>>>,>>9.99","",
    "Credit Left").

/* Refresh needs to be done if ADD-CALC-COLUMN is done after the browse is
   displayed. In ROW-DISPLAY trigger, we can only set the calc field's
   screen-value if the handle is set. And the handle is set after the 
   ADD-CALC-COLUMN method is done. */

browse-hdl:refresh().
browse-hdl:EXPANDABLE = YES.

ON ROW-LEAVE OF browse-hdl DO:
  IF browse-hdl:CURRENT-ROW-MODIFIED THEN DO:
    REPEAT jx = 1 TO browse-hdl:NUM-COLUMNS:
      brws-col-hdl = browse-hdl:GET-BROWSE-COLUMN(jx).
      IF brws-col-hdl:MODIFIED THEN DO:
        buff-field-hdl = brws-col-hdl:BUFFER-FIELD.
        /* If buff-field-hdl is unknown, this is a calculated field and cannot
           be updated */
        IF buff-field-hdl NE ? THEN
          buff-field-hdl:BUFFER-VALUE = brws-col-hdl:SCREEN-VALUE.
      END.
    END.
  END.
END.

ON CHOOSE OF btn-delete DO:   /*  LABEL "DeleteDynBrowse". */
  DELETE WIDGET browse-hdl.
END.

ON CHOOSE OF btn-quit DO:
  QUIT.
END.

ENABLE ALL WITH FRAME MyFrame.
WAIT-FOR CLOSE OF CURRENT-WINDOW.

Notes

See also

ADD-CALC-COLUMN( ) method, ADD-COLUMNS-FROM( ) method, ADD-LIKE-COLUMN( ) method, CREATE QUERY statement, CREATE widget statement, DEFINE BROWSE statement, DEFINE QUERY statement, GET-BROWSE-COLUMN( ) method, QUERY attribute