| **Navigation:**  [[templates.htm|Templates]] > Guide to all Templates > Control Templates >====== Browse - control template ====== | [[asciiviewlistbox.htm|{{btn_prev_n.gif|Previous page}}]][[templates.htm|{{btn_home_n.gif|Return to chapter overview}}]][[tplcontrolbrowsefuzzymatching.htm|{{btn_next_n.gif|Next page}}]] | | || {{browseboxtabs_shg.jpg|BrowseBoxTabs_shg.jpg}}[[tplcontrolbrowsebox.htm#tplcontrolbrowsebox styles|]][[tplcontrolbrowsebox.htm#a5ct83i|]][[tplcontrolbrowsebox.htm#krsel1|]][[tplcontrolbrowsebox.htm#jqrf01l|]][[tplcontrolbrowsebox.htm#zswitt|]][[tplcontrolbrowsebox.htm#bbclasses|]][[tplcontrolbrowsebox.htm#tplcontrolbrowsebox extended options|]][[tplcontrolbrowsebox.htm#byfe621|]][[tplcontrolbrowsebox.htm#tplcontrolbrowsebox tips|]][[tplcontrolbrowsebox.htm#eb6iwt|]]{{sqladvanced_shg.jpg|SQLAdvanced_shg.jpg}}[[tplcontrolbrowsebox.htm#tplcontrolbrowsebox sqladvanced|]] **Click on a tab to see its help** The Browse Control template places a "page-loaded" or a "file-loaded" LIST control in a window and generates code to fill the list with data, and to scroll, search, sort, and select the listed items. It generates code to select or filter the data, total the data, update the data directly (edit-in-place), or to call a separate FORM procedure to update the data. It also generates code to conditionally set the colors and icons associated with each row and column in the LIST. The standard Browse behavior is defined by the ABC Library's BrowseClass. See //BrowseClass// in the //ABC Library Reference// for more information. {{tipbox.jpg|TipBox.jpg}} You can use the Browse Control template to manage a page-loaded //drop-//list simply by setting the DROP attribute to a value greater than zero (0) . The LIST control's popup menu takes you to the **List Box Formatter** where you can choose which fields or variables populate the list. You can also define how they appear in the list box (including enabling colorization and Icon display). The **Actions **tab on the List Properties dialog provides the prompts which let you define the browse box's functionality, including any record filters, range limits, totaling, scroll bar behavior, and locator behavior. **Placing a Browse control on your window** You can place the //Browse// Control template in a window by clicking on the template control tool , then selecting **Browse - File Browsing List Box** in the **Select Control template** dialog. After you select the Browse template, the Application Generator automatically opens the **List Box Formatter** so you can choose the files, fields and variables to display in the list, and you can design the appearance of the list and its fields. **Populating and Formatting the List Fields** The **Populate **button lets you add a field or variable to the list box, one field or variable at a time. The **Select Column** dialog presents the file schematic. Within the schematic, the Browse control appears, with a <;To Do> beneath it. To add a field from a data file defined in the dictionary: Select the //<;To Do>// item. Press the **Insert **button Select the file from the **Insert File** dialog. If you want to use a Key, press the **Key **button to select the key from the **Key Access **dialog. If you do not select a Key, the list is displayed in record order, which also disables the ability to set Range Limits. Select a field from the **Fields **list, which appears in the right side of the **Select Field **dialog. After you select the file, key and field (or variable) the **List Field Properties **dialog appears. This lets you precisely define the fields appearance within the list. **Actions** The **Actions **tab of the **[[list control properties.htm|List Properties]]** dialog (right-click the control and choose **Actions**) displays the template prompts which let you specify numerous template options, as well as add custom embedded source code for standard list box events, such as moving the selection bar. The dialog contains the following options: **Default Behavior** **Table Schematic Description** Enter a descriptive string that will be displayed in the Table Schematic window for this particular control. This allows you to distinguish one control from another when there are multiple controls populated in a single window. **Quick-Scan Records** Specifies buffered access behavior for file systems that use multi-record buffers (primarily ASCII, BASIC, and DOS). See //[[database drivers.htm|Database Drivers]] //for more information. These file drivers read a buffer at a time, allowing for fast access. In a multi-user environment these buffers are not 100% trustworthy, because another user may change a record between accesses. As a safeguard, the driver refills the buffers before each record access. Quick scanning is the normal way to read records for browsing. However, rereading the buffer may provide slightly improved data integrity in some multi-user circumstances at the cost of substantially slower processing. **Loading Method** Select the method used to read the Browse data from the drop-down list. **Page** Page-loading provides near-instantaneous displays for unfiltered data, even for very large datasets. Page-loading uses less memory, because only a few records are held in memory at a time. On the other hand, page-loading can cause erratic vertical scroll bar behavior as well as additional network traffic for each scroll or search action. **File** File-loading provides smooth, accurate vertical scroll bar behavior, plus no additional network traffic when scrolling and searching. File-loading is also quite SQL friendly. On the other hand, file-loading can result in substantial delays and heavy memory usage when reading large datasets. **Accept browse control from Toolbar** Check this box to accept navigation events and other browse control events generated by the //FrameBrowseControl //control template on the APPLICATION's toolbar. See __//FrameBrowseControl//__ for more information on these toolbar buttons and their operation. Clear this box to disable the //FrameBrowseControl //toolbar buttons for this procedure and use local navigation controls only. See also SetToolbarTarget. **LIST Line Height** Enter a number in dialog units (unless PROP:Pixels is active) to set the line height of each row generated in the browse box. This option sets the [[prop lineheight.htm|PROP:LineHeight]] property. You can optionally press the "E" button to call the Expression Editor, which is used to help you construct syntactically correct expressions or variables, used to calculate the desired LIST Line Height. **Locator** A locator lets the user search for specific records in the list box without manually scrolling through the entire list. **Locator **is only available when browsing a file in Key Order (specify a KEY in the Data / Tables Pad). The search field must be the first free key element, that is, the first component field of the browse key that is not range limited to a single value. For multi-key browses (the Wizards create them), you may have multiple locators. Use the **Conditional Behavior **tab to set additional locators for the additional sorts. Choose from the following locator types in the drop-down list: | **None** | Specifies no locator. | | **Step** | Specifies a single-character locator with no locator control required. When the Browse has focus and the user types a character, the list box advances to the first occurrence of the key field beginning with that character (or the next higher character if no keys match the locator character). Retyping the same character advances the list to the next occurrence of the key field beginning with that character. | | | Use a step locator when the first free key element is a STRING, CSTRING, or PSTRING and you want the search to take place immediately upon the user's keystroke. Step locators are not appropriate for numeric keys. If there is no browse key, the Application Generator converts to no locator. Step locators are case-sensitive only if the key defined as the browse sort is defined as case-sensitive. | | **Entry** | Specifies a multi-character locator that activates when the locator control is //accepted //(not upon each keystroke). The locator control may be an ENTRY, COMBO, or SPIN. Use an Entry locator when you want to search on numeric or alphanumeric keys, and delay the search until the user accepts the locator control (presses ENTER or TAB). This delayed search reduces network traffic and provides a smoother search in a client-server environment. | | | The locator control should come //after //the LIST control in the **Set Control Order **dialog. | | | By default, the locator control is the control whose USE attribute is the first free key element of the browse key. A free component is one that is //not //range limited to a single value. If there is no such control, the Application Generator converts to a Step locator. If there is no browse key, the Application Generator converts to no locator. | | | When the end user places one or more characters in the locator control, then //accepts //the control by pressing TAB, pressing a locator button, or selecting another control on the screen, the list box advances to the nearest matching record. | | **Incremental** | Specifies a multi-character locator, with no locator control required (but strongly recommended). Use an Incremental locator when you want to search on numeric or alphanumeric keys and you want the search to take place immediately upon the user's keystroke. | | | The locator control may be a STRING, ENTRY, COMBO, or SPIN, however, any control other than a STRING causes the Incremental locator to behave like an Entry locator--the search is delayed until the control is accepted. | | | With a STRING control, when the list has focus, characters are automatically placed in the locator string for each keystroke, and the list box //immediately //advances to the nearest matching record. The backspace key removes characters from the locator string. | | | We strongly recommend using a STRING control as the Incremental locator control so the search occurs //immediately //with each keystroke, and so the user can //see //the key value for which the Browse is searching. | | | By default, the locator control is the control whose USE attribute is the first free key element of the browse key. A free component is one that is //not //range limited to a single value. If there is no such control, the Application Generator converts to a Step locator. If there is no browse key, the Application Generator converts to no locator. | | **Filtered** | Specifies a multi-character locator, with no locator control required (but strongly recommended). Use a Filter Locator when you want to search on alphanumeric keys and you want to //minimize network traffic//. | | | This locator is like an Incremental Locator with a record filter. It specifies a //range //of values for which to search and returns a //limited //result set--only those records that fall within the specified range. Each additional (incremental) search character supplied results in a smaller, more refined result set. For example, a search value of 'A' returns all records from 'AA' to 'AZ'; a search value of 'AB' returns all records from 'ABA' to 'ABZ'. | | | The Filtered Locator determines the boundaries for the search based on the user specified search value. The implementation of the boundaries depends on the database driver--for SQL databases, the Filter Locator uses a LIKE; for ISAM databases it supplies upper and lower bounds. | | | The locator returns //only //the records that match the search value, providing, in effect, a dynamic range limit or filter for the browse. | {{tipbox.jpg|TipBox.jpg}} The Filter Locator performs very well on SQL databases and on high order key component fields; however, performance may suffer if applied to non-key fields or low order key fields of non-SQL databases. **Override default locator control** The //default //locator control is the control whose USE attribute is the first free key element of the browse key. To override this default and specify a different locator control, check this box. This option is provided in case you have multiple controls with the same free key element as their USE attributes--that is, when you have both ascending and descending keys on the same field. Select one of the controls to use as the locator control from the **New Locator Control **list. **Find Method** Only available when the Filtered locator is selected. The **Find Anywhere** checkbox determines whether the FilterLocator applies the search value to the entire field (field //contains// search value) or only to the leftmost field positions (field //begins with// search value). If checked, it applies the "contains" test. If unchecked, it applies the "begins with" test. See [[floatright contains or begins with flag .htm|FloatRight]] for more information. **Locator Class** Press this button to override the global Locator Manager setting. See [[classes tab.htm|Classes Tab]]. **Record Filter** Type a valid Clarion expression to limit the contents of the browse list to only those records causing the expression to evaluate to true (nonzero or non-blank). The procedure loops through all displayable records to select only those that meet the filter. Filters are generally much slower than Range Limits. You must [[bind declare runtime expression string variable .htm|BIND]] any file field, variable, or EQUATE that is used in a filter expression. The **Hot Fields** tab lets you BIND fields. Press the "E" button to call the Expression Editor. This dialog is used to help you construct syntactically correct expressions to use in the Record Filter prompt. **Range Limit Field** In conjunction with the **Range Limit Type**, specifies a record or group of records for inclusion in the list. Choose a field by pressing the ellipsis (...) button. The range limit is key-dependent. Range Limits are generally much faster than filters. **Range Limit Type** Specifies the type of range limit to apply. Choose one of the following from the drop-down list. **Current Value** Limits the key to the current value of the **Range Limit Field**. **Single Value** Lets you limit the key to a single value. Specify the variable containing that value in the **Range Limit Value **box which appears. **Range of Values** Lets you specify upper and lower limits. Specify the variables containing the limits in the **Low Limit **and **High Limit **boxes. **File Relationship** Lets you choose a range limiting file from a 1:MANY relationship. This limits the list to display only those child records matching the current record in the parent file. For example, if your list was a list of Orders, you could limit the display to only those orders for the current Customer (in the Customer file). **See Also:** [[using range limits and filters.htm|Using Range Limits and Filters]] **[[tpladditionalsortfields.htm|Additional Sort Fields]]** Specify fields to sort on in //addition //to any Key specified in the **Data / Tables Pad** by typing an ORDER expression list (a comma delimited list of field names). See [[order set view sort order expression .htm|ORDER]] in the //Language Reference// for more information. **Reset Fields button** Press this button to add Reset Fields. If the value of any Reset Field changes, the procedure refreshes the Browse list. Many Browse events automatically refresh the list; however, if some want another control (such as a Radio button or an entry field) or process to refresh the list, use a Reset Field. **Scroll Bar Behavior** **button** Pressing this button displays a dialog where you can define the way a scroll bar works. Choose from Fixed Thumb or Movable Thumb. {{tipbox.jpg|TipBox.jpg}} For file loaded lists, you automatically get Standard Windows standard (movable thumb) scroll bar behavior. However, since this is not possible for page loaded lists, these options let you choose the behavior that best suits your application. **Fixed Thumb** The thumb (square 3D box in the middle of the scroll bar) remains in the center of the scroll bar. CLICK above the thumb to scroll up one "page." CLICK below the thumb to scroll down one "page." DRAG the thumb to the top or bottom of the scroll bar to scroll the top or bottom of the file. {{tipbox.jpg|TipBox.jpg}} Choose Fixed Thumb when browsing large SQL tables to get best performance. **Movable Thumb** CLICK and DRAG the thumb to scroll a proportional distance in the list. The thumb remains where you drag it, and its position on the scroll bar indicates the relative position within the browse list. CLICK above the thumb to scroll up one "page." CLICK below the thumb to scroll down one "page". When you choose **Movable Thumb**, you can also set the **Key Distribution** to further define how the Browse evaluates the thumb's relative position within the browse list. **Key Distribution** Specifies the distribution of the points of the scroll bar. Choose one of the two predefined distributions (Alpha or Last Names), or Custom, or Run-time from the drop-down list. **Alpha** Defines 100 evenly distributed points alphabetically. **Last Names** Defines 100 points distributed as last names are commonly found in the United States. If the access key is numeric, you should use a custom or run-time distribution. **Custom** Lets you define your own points. **Run-time** Reads the first and last record and computes the values for 100 evenly distributed points in between. **Custom Key Distribution** Lets you specify the break points for distribution along the scroll bar (useful when you have data with a skewed distribution). Insert the values for each point in the list. String constants should be in single quotes ( ' ' ). **Run-time Distribution Parameters** Lets you specify the type of characters considered when determining the distribution points. This is only appropriate when the Free Key Element is a STRING or CSTRING. Check the boxes for the types of characters you wish to include for consideration. Choose from **Use alpha characters** (Aa-Zz), **Use numeric characters** (0-9), and **Use other keyboard characters.** **Step Class** Press this button to override the global Step Manager setting. See [[classes tab.htm|Classes Tab]]. **Conditional Behavior** This tab contains a list box that lets you define Browse behavior based on conditions or expressions. Add expressions to the list by pressing the **Insert** button. This displays a dialog where you define the expression and the associated behavior when that expression evaluates to true (nonzero or non-blank). At run-time the expressions are evaluated, and the behavior for the first true condition in the list is used. In this dialog you can specify: | **Condition** | Any valid Clarion expression. Press the "E" button to call the Expression Editor. This dialog is used to help you construct syntactically correct expressions to use in the Condition prompt. | | **Key to Use** | Optionally, the Key to use to sort the Browse data when the expression is true. | The remaining fields and buttons are the same as the **Default Behavior **tab. **Hot Fields** When you select the Hot Fields tab, you can specify fields not populated in the list to add to the [[queue declare a memory queue structure .htm|QUEUE]]. When scrolling through the file, the generated source code reads the data for these fields from the QUEUE, rather than from the disk. This speeds up list box updates. Specifying "Hot" fields also lets you place controls outside the Browse that are updated whenever a different record is selected in the list box. Elements of the Primary Key and the current key are always included in the QUEUE, so they do not need to be inserted in the Hot Field list. This dialog also lets you [[bind declare runtime expression string variable .htm|BIND]] a field. You must [[bind declare runtime expression string variable .htm|BIND]] any file field, variable, or EQUATE that is used in a filter expression. If the field you are BINDing does not need to be included in the default Browse VIEW structure, check the **Not in View **checkbox. **Colors** This tab is only available if you check the **Colors **box in the //List Box Formatter//. It displays a list of the Browse columns that may be colored. To specify the default colors and any conditional colors, highlight the column's field name, then press the **Properties** button. This opens the **Customize Colors **dialog. **Use same color for all columns** Check this box if the color assignments designated here will be for all columns. **Customize Colors** This dialog is available if the **Use same color for all columns** check box is cleared, and lets you specify the default and conditional Foreground and Background colors for normal (unselected) and selected columns. **Create Greenbar Effect** Check this box to allow two color sets to be used in an alternating row format. If this box is cleared, you can use the **Conditional Color Assignments **dialog to specify any number of colored rows based on specified conditions. **Alternate columns** Only enabled when the **Create Greenbar Effect **check box is checked. Check this box to specify that the two color pattern will be used to each column display in addition to each row (producing a checkerboard pattern). **Conditional Color Assignments** Below the default colors section is the **Conditional Color Assignments **list. This list lets you set colors to apply when an expression evaluates to true (nonzero or non-blank). To add an expression and its associated colors, press the **Insert **button. At run-time the expressions are evaluated, and the colors for the first true expression are used. **Icons** This tab is only available if you check the **Icons** box in the List Box Formatter. It displays a list of the Browse columns which can display icons. To specify default icons and any conditional icons, highlight the column's field name then press the **Properties** button. This opens the **Customize Browse Icons **dialog. Customize Browse Icons This dialog lets you specify the default icon and conditional icons for the Browse column. **Default Icon** The default icon to display. Type the icon (.ICO) filename. You can also name a variable to use as the default icon, using the !//variable// format. The variable may be a string type that stores the icon filename, or check the **The expression is a number **check box if you are referencing a previously named icon assigned to the [[prop iconlist.htm|IconList]] property. **Conditional Icon Usage** Below the **Default Icon** section is the **Conditional Icon Usage** list. This list lets you set icons to apply when an expression evaluates to true (nonzero or non-blank). To add an expression and its associated icon, press the **Insert **button. At run-time the expressions are evaluated, and the colors for the first true expression are used. **Styles** This tab is only available if you check the **Style** box in the List Box Formatter. It displays a list of the Browse columns that may have applied styles. {{tipbox.jpg|TipBox.jpg}} **To specify the default styles and any conditional styles, highlight the column's field name, then press the Properties button. This opens the Customize Browse Styles dialog. A default style may also be defined on the List Box Formatter Appearance tab.** **Create GreenBar Effect** Check this box to create a GreenBar effect (alternating colors on each row) on your list box. You will be prompted to select two styles to use that represent the appearance of each alternating row **Alternate Columns** Check this box to apply an alternate style to every other column defined with the style attribute. You will be prompted to select two styles to use that represent the appearance of each alternating column. **Style Type** Use the drop list to select //Local List// or //Style Number//. The //Local List// displays the descriptions of the styles that you created in the [[tpllistboxstyles.htm|Listbox Styles]] dialog. You can also reference the styles by //Style Number// only. **Style or Style Number** Based on the Style Type selected, select a style's description or number from the drop list control. **Default Style** This entry lets you specify the default style to be used for the column. **Conditional Styles** This list lets you define the styles to apply when an expression evaluates to true (nonzero or non-blank). To add an expression and its associated colors, press the Insert button. **Condition** Provide a valid Clarion expression that when evaluates to true (nonzero or non-blank) will cause the Style to be applied. **Style Type** Use the drop list to select //Local List// or //Style Number//. The //Local List// displays the descriptions of the styles that you created in the [[tpllistboxstyles.htm|Listbox Styles]] dialog. You can also reference the styles by //Style Number// only. **Style or Style Number** Based on the Style Type selected, select a style's description or number from the drop list control. At run-time the expressions are evaluated, and the styles for the first true expression are used. All Styles must be defined. For more information on defining styles see [[tpllistboxstyles.htm|Listbox Styles]]. **Tooltips** This tab is only active if you check the **Tooltip** box in the List Box Formatter. It displays a list of the Browse columns which may have applied tool tips. Press the **Properties** button to display the //Customize Browse Tooltips// dialog. **Tooltip variable** You can specify a default tool tip string value in the List Box Formatter. This entry lets you override the default tooltip to use a value contained in a variable. Press the ellipsis button to select a variable that will contain the text of your column's tool tip. **Totaling** This tab contains a list box that lets you define total fields for a Browse. **Always Calculate Totaling?** Check this box to always calculate browse totaling fields each time the browse box is refreshed. If this box is unchecked, you can apply a condition to the calculation. **Condition** Enter a variable or expression on this line. If the variable or expression evaluates to a non-zero value, the browse totaling loop will be executed, and all total values updated. Press the "E" button to call the Expression Editor. This dialog is used to help you construct syntactically correct expressions to use in the Condition prompt. Press the **Insert** button to add total fields. This opens the **Browse Totaling **dialog where you can define total fields for the Browse. **Total Target Field** The variable to store the calculated total. This can be a local, module, or global variable. You may also use a file field; however, you must write the code to update the file. **Total Type** Choose **Count, Sum, **or** Average** from the drop-down list. **Count **tallies the number of records. **Sum **adds the values of the Field to Total. **Average **determines the arithmetic mean of the Field to Total. **Field to Total** The field to sum or average. This box is disabled when the Total Type is **Count**. Press the "E" button to call the Expression Editor. This dialog is used to help you construct syntactically correct expressions to use in the **Field to Total** prompt. **Total Based On** Choose **Each Record Read** or **Specified Condition** from the drop-down list. This specifies whether to consider every record or only those that meet the Total Condition criteria. **Total Condition** The condition to meet when using a Total based on a specified condition. You can use any valid Clarion expression. You must [[bind declare runtime expression string variable .htm|BIND]] any file field, variable, or EQUATE that is used in a filter expression. The **Hot Fields** tab lets you BIND fields. Press the "E" button to call the Expression Editor. This dialog is used to help you construct syntactically correct expressions to use in the **Total Condition** prompt. **Extended Options** **Do not include Primary key in view** Check this box to specify that primary key components are not projected into the view. This is useful when working with SQL tables, and allows valid GROUP BY SQL statements to be generated. See also [[tplcontrolbrowsebox.htm#sqladvanced|SQL Advanced Tab]] **Disable Browse Popup menu** Check this box to disable the popup menu for this Browse Box. **Enable Sort Header (ABC Template Chain Only)** Check this box to allow your list box header to determine the sort order of your list box. At runtime: | {{diamond.jpg|diamond.jpg}} | Enable a sort on any column by CLICKing on the appropriate column header. CLICK on the list header again to toggle between an ascending or descending sort. | | {{diamond.jpg|diamond.jpg}} | Press CTRL + CLICK on a list header column to add that column to the sort. | | {{diamond.jpg|diamond.jpg}} | Press SHIFT + CLICK on any list header column to remove all current sorts. Removing all column sorts restores the list box to the default sort. | This option is compatible with the List Format Manager and the Auto-Size option discussed below. {{notebox.jpg|NoteBox.jpg}} This option is not valid with MEMO, BLOB or fields not defined in the browse VIEW structure. **Customize Browse Sort Header** Press this button to access a dialog that allows you to control the sort headers for each individual column. You can disable any or all columns, and specify custom sorts for local variables and other special program conditions. See **[[tplcontrolbrowsebox sortheader.htm|Customize Browse Sort Header]]** **Disable Auto Size Browse Columns?** If you have enabled the Auto Size Column feature in the [[global properties.htm#tplapplication appsettings|Global Properties]], check this box if you wish to disable this feature for this procedure's Browse Box. **Disable List Format Manager?** If you have enabled the List Format Manager in the Global Properties' App Settings, check this box to disable this feature **List Format Manager** If the List Format Manager is enabled in the Global Properties, and not disabled, press this button to access the [[tplcontrolbrowsebox ext lfm inter.htm|List Format Manager]] dialog. **IPDRV Options** If you are using the IP Driver in your application, press this button to access the [[tplcontrolbrowsebox ext ipdrv.htm|IPDRV Options]] dialog. **SQL Advanced Tab** When the Browse Control template is using an SQL Accelerator driver, SQL Accelerator Drivers convert standard Clarion file I/O statements and function calls into optimized SQL statements, which they send to their backend SQL servers for processing. This means you can use the same Clarion code to access both SQL tables and other file systems such as TopSpeed files. It also means you can use Clarion template generated code with your SQL databases. This tab control (which only appears when you are using an SQL table) allows you to extend the optimized SQL statements generated by the template. The following options are available: **Query Elements** The Query Elements items allow you to assign special SQL clauses to your browse box result set. This is accomplished by selecting an existing element in the SQL table, and assigning it to a special function or expression. See [[runtime sql properties for views using sql drivers.htm|Runtime SQL Properties for Views using SQL Drivers]] **View Field** Select an SQL column from the drop list provided. **Assignment** Enter a valid SQL statement to assign to the View Field. Example: **'count(*)'** The example above is equivalent to: ** **"SELECT count(*) FROM //tablename//" **Grouping** If you have enabled the **Do not include Primary key in view **option in the Browse controls' //Extended Options//, the following options are enabled. **Group** To add a GROUP BY clause to the template generated SQL statement, check this box and enter the appropriate SQL string in the **Grouping Definition** field. Press the "E" button to call the Expression Editor. This dialog is used to help you construct syntactically correct expressions to use in the **Group** prompt. **Having** To add a HAVING clause to the template generated SQL statement, check this box and enter the appropriate SQL string in the **Having Definition** field. You must set a GROUP BY definition first to enable the HAVING clause. Press the "E" button to call the Expression Editor. This dialog is used to help you construct syntactically correct expressions to use in the **Having** prompt. See [[prop groupby prop having.htm|GROUP BY and HAVING]] and [[view support for aggregate functions.htm|VIEW support for aggregate functions]] for more information and examples. **Classes Tab** Use the Classes tab to override the global settings for the Class. See [[classes tab.htm|Classes Tab]].