What's new in Genero Business Development Language, v 2.30

This topic lists features added for the 2.30 release of the Genero Business Development Language.

Table 1. What's new in Genero Business Development Language, Version 2.30
Overview Reference
Drag & Drop support in DISPLAY ARRAY for tables or tree views. See The DragDrop class.
A new form item type called WEBCOMPONENT is provided to integrate external Java-Script-based widgets in your forms. See WEBCOMPONENT item type.
New database drivers List of new database drivers:
Genero is now available on Mac OS/X. You need at least Mac OS/X version 10.5. The Operating System code for Mac OS/X 10.5 64-bit is m64x105. See Supported operating systems.
Platform identifier is now displayed when using the -V option with command-line tools. See fglrun.
Informix® SMALLFLOAT and FLOAT can now be stored in Oracle native BINARY_FLOAT / BINARY_DOUBLE types. See SQL adaptation guide For Oracle Database 9.2, 10.x, 11.x, 12x.
The FGLPROFILE environment variable now accepts multiple file specification with an operating-system-specific path separator: See The FGLPROFILE file.

New ui.Form class method to make a specific form field visible, showing the parent containers automatically.

This method can also be used to bring a given folder page to the front, even if the field is not active (i.e. not driven by a dialog).

See ui.Form.ensureFieldVisible and ui.Form.ensureElementVisible.
The ERROR and MESSAGE instructions get an additional STYLE attribute, to reference a presentation style and define the rendering with font, color, and position. See MESSAGE.
New style for TOOLBAR and TOPMENU elements. See Front-End documentation for more details about possible decoration attributes. See Toolbars and Topmenus.

As with COMBOBOX, the items of a RADIOGROUP are now filled with the values of the INCLUDE attribute, if specified.

See RADIOGROUP item type
The LOAD, UNLOAD and base.Channel class support the "CSV" delimiter specification to read/write files in Comma Separated Value format. See LOAD, UNLOAD and The Channel class
Identify the last clicked CANVAS item with the drawGetClickedItemId() function of fgldraw.4gl. See Step by step canvas example
The FIELD_TOUCHED() operator and ui.Dialog.getFieldTouched() method accept now a simple star as parameter, in order to check all fields used by the dialog. See FIELD_TOUCHED() and ui.Dialog.getFieldTouched.
Use the fgl_db_driver_type() built-in function to identify the target database type. See FGL_DB_DRIVER_TYPE().
The JUSTIFY attribute is now supported for all form item types, in order to let you specify both the data justification in the field/cell and the alignment of the table column header. See JUSTIFY attribute.
In order to identify the reason why a database driver cannot be loaded, when setting FGLSQLDEBUG you now get an additional debug message that contains the operating system error message (dlerror()) See .

The fgldbsch tool can now extract database schema from SQLite. However, pay attention to the data types used in SQLite (V 3.6): This database supports some standard type names in the SQL syntax but in reality the types used to store data are very limited. For example, a DATE will be stored as an integer or string (i.e. there is no native DATE type). See SQLite documentation for more details.

The fgldbsch tool will extract the schema according to the original type names used to create the table.

See fgldbsch.
The ui.Dialog.setFieldActive() method takes now a list of fields as parameter, with the "dot-asterisk" notation, like the setFieldTouched() method. See ui.Dialog.setFieldActive.

This new feature is part of the fix for bug #18224.

When modifying a tree during the dialog execution (for example, when implementing dynamic trees with ON EXPAND / ON COLLAPSE triggers), if you use the ui.Dialog.insertRow(), ui.Dialog.deleteRow() or ui.Dialog.deleteAllRows() methods to modify the node list, the internal tree structure was corrupted. You could safely modify directly the program array with array methods, but multi-range selection flags and cell attributes are not synchronized when doing this. Starting with 2.30.02, you can now use the ui.Dialog.insertNode(), ui.Dialog.appendNode() and ui.Dialog.deleteNode() methods to manipulate the node list and get secondary data information synchronized.

See The Dialog class.
Version 2.30.04 supports now the fglrun.arrayIgnoreRangeError entry which can be set to true to force the runtime system to return the first element of an array when the array index is out of bounds. See Arrays.
The version 2.30.04 introduces the new fglrun.mapAnyErrorToError FGLPROFILE entry. This configuration parameter can be set to true to map the default action of the WHENEVER ANY ERROR exceptions to the action defined for the WHENEVER ERROR exception type. See Exceptions.