Release 10.1A: OpenEdge Development:
Progress 4GL Reference

> ## CREATE BROWSE statement

> ##
> (Windows only; Graphical interfaces only)

> Creates a dynamic browse, either read-only or updateable. Browse columns are added with the ADD-LIKE-COLUMN, ADD-COLUMNS-FROM, and ADD-CALC-COLUMN methods. The query is specified through the QUERY attribute.

> The dynamic updateable 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 widget-handle
>       [ IN WIDGET-POOL widget-pool-name ]
>       [ ASSIGN { attribute=expression } ... ]
>       [ trigger-phrase ]

> ``widget-handle``

> A variable of type WIDGET-HANDLE that Progress sets to the value of the new widget handle.

> `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 do a DELETE OBJECT on it.

> `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 WIDGET-HANDLE.
>     DEFINE VARIABLE num-hdl AS WIDGET-HANDLE.
>     DEFINE VARIABLE address-hdl AS WIDGET-HANDLE.
>     DEFINE VARIABLE calc-col-hdl AS WIDGET-HANDLE.
>     DEFINE VARIABLE browse-hdl AS WIDGET-HANDLE.
>     DEFINE VARIABLE buff-field-hdl AS WIDGET-HANDLE.
>     DEFINE VARIABLE brws-col-hdl AS WIDGET-HANDLE.
>     DEFINE BUTTON btn-delete LABEL "Delete".
>     DEFINE BUTTON btn-quit LABEL "&Quit"  AUTO-ENDKEY.
>     DEFINE VARIABLE j AS INTEGER.

>     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
>                SENSITIVE = TRUE
>                READ-ONLY = NO.
>     ON row-display OF browse-hdl DO:
>       IF VALID-HANDLE(calc-col-hdl) THEN
>         calc-col-hdl:SCREEN-VALUE =
>                      STRING(customer.credit-limit - customer.balance).
>     END.

>     num-hdl = browse-hdl:ADD-LIKE-COLUMN("customer.cust-num").
>     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 j = 1 TO browse-hdl:NUM-COLUMNS:
>                 brws-col-hdl = browse-hdl:GET-BROWSE-COLUMN(j).
>                 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

> - If the browse’s height is set using the DOWN attribute and a browse column is added, the browse’s height may change to ensure that the number of DOWN is preserved. This may be due to the addition of the horizontal scrollbar or the growth of the column header.

> - If the browse’s height is set using the HEIGHT attribute or through direct manipulation, and a browse column is added, the DOWN attribute may change to ensure that the specified height is preserved. This may be due to the addition of the horizontal scrollbar or the growth of the column header.

> - The DISPLAY . . . WITH BROWSE `browse-name` statement cannot be used with a dynamic browse. Instead, the user must set the SCREEN-VALUE attributes.

> - A dynamic browse’s validation expression is restricted. It may not contain a CAN-FIND function. To reference the field, the FRAME-VALUE function must be used. The CAN-FIND function will still work for a static browse column.

> - If a buffer-field is associated with a dynamic browse column, you should set the buffer-field’s VALIDATE-EXPRESSION attribute before the dynamic browse column is added to the browser (via ADD-LIKE-COLUMN( )). The validation expression is compiled at this time. If the VALIDATE-EXPRESSION attribute is changed later, it is ignored.

> - You can use the ASSIGN option to assign a widget ID value to the WIDGET-ID attribute for this object. If you have enabled application-defined widget IDs in your OpenEdge GUI application, by specifying the Use Widget ID (`–usewidgetid`) startup parameter, then Progress uses this widget ID when it creates the widget at runtime, instead of using the widget ID it normally generates by default. If you have not enabled application-defined widget IDs, then Progress ignores this option setting at runtime.

> For more information about the WIDGET-ID attribute, see its reference entry in the "Attributes and Methods Reference" section. For more information about the Use Widget ID (`–usewidgetid`) startup parameter, see OpenEdge Deployment: Startup Command and Parameter Reference .

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

Copyright © 2005 Progress Software Corporation www.progress.com Voice: (781) 280-4000 Fax: (781) 280-4095