Finding rows matching a pattern

List controllers implement a built-in find. This feature can be disabled if not required.

The DISPLAY ARRAY and INPUT ARRAY blocks support the built-in find feature by default.

This feature works with any list container (TABLE, TREE, SCROLLGRID ).

The built-in find creates automatically the "find" and "findnext" actions. These actions can be decorated, enabled and disabled as regular actions.

If the dialog defines an explicit ON ACTION find or ON ACTION findnext, the default built-in find is disabled.

When the user triggers the "find" action (default accelerator is Ctrl-F), the dialog opens a pop-up window to enter a search value and search options:
Figure: Table showing the find dialog

Table displaying the dialog to find rows.

On validation with the OK button, the dialog starts to search a row where a field value matches the value entered in the find dialog. The "find" action starts the search from the current row (and in the field after the current field, if the dialog is an INPUT ARRAY).

On mobile devices (without a physical keyboard), since the Ctrl-F accelerator cannot be triggered, there is by default no way to trigger the "find" action. If needed, add a dedicated action view with the name "find" to the toolbar, topmenu or set the DEFAULTVIEW=YES action default attribute for this action.

After a "find" action, the user can trigger the "findnext" action (default accelerator is Ctrl-G), in order to continue the search, without opening the find dialog again (the current search value will be reused).

By default, any table column is scanned, but the user can select a specific column in the find dialog box, as long as a column title is available. Case-sensitive or insensitive search as well as wraparound options are also available.

Only rows in memory can be searched. When using the paged-mode (ON FILL BUFFER), the built-in search is disabled. When implementing dynamic tree views, the built-in find will only search the tree nodes available in the program array.

The value entered in the find dialog is compared to type of columns, except columns using the type TEXT or BYTE.

The comparison is based on the formatted value. For example, a MONEY column will display values formatted with the currency symbol. To match values in that column, the user must enter exactly the same value (that is with the currency symbol and the correct decimal separator).

Only text widgets displaying values are searched. Columns using widgets such as images, radio-groups, checkboxes are not searched. Furthermore, the find function ignores PHANTOM fields, hidden fields and fields defined with the INVISIBLE attribute.

With COMBOBOX fields, the find searches in the visible values of combobox items.

When the dialog is an INPUT ARRAY and no specific search column is selected in the find dialog, the search scans each cell. The search starts in the current row, after the current field. If no cell value matches in the current row, the search continues on the first field of the next row.

The built-in find feature is also available in text mode. In graphical mode, the default keyboard accelerator is Ctrl-F. When using text mode, the accelerator is the / slash key.