BDL 4.01 new features

Features added in 4.01 releases of the Genero Business Development Language.

Important:

This page covers only those new features introduced with the Genero BDL version specified in the page title. Check prior new features pages if you migrate from an earlier version. Make sure to also read the upgrade guide corresponding to this Genero version.

Corresponding upgrade guide: BDL 4.01 upgrade guide.

Previous new features page: BDL 4.00 new features.

Table 1. Core language
Overview Reference
The ARRAY[n], DYNAMIC ARRAY and DICTIONARY definitions accept now another array or dictionary, as type for the OF clause. See ARRAY syntax and DICTIONARY syntax.
Starting at 4.01.02
Module aliases with IMPORT FGL path AS alias-name See IMPORT FGL.
Starting at 4.01.03
New os.Path methods getAccessTime()/setAccessTime(), getModificationTime()/setModificationTime(), isSameFile(), describeLastError() See os.Path methods.
New ARRAY method sortByComparisonFunction(). See ARRAY.sortByComparisonFunction().
New util.String methods to compare strings. See util.Strings.collate(), util.Strings.collateNumeric().
LOAD/UNLOAD and base.Channel support semicolon separator with "DSV=;" See LOAD, UNLOAD, base.Channel.setDelimiter.
util.Channels utility class to wait for activity on a set of TCP sockets from base.Channel objects. See util.Channels methods.
The STRING.getMultibyteLength() method counts the number of bytes of a string. See STRING.getMultibyteLength.
The STRING.expandTabs() method converts TAB characters to spaces. See STRING.expandTabs.
Starting at 4.01.06
util.Channels.selectWithTimeout method to wait for activity on a set of TCP sockets from base.Channel objects, with timeout option. See util.Channels.selectWithTimeout
Support for BYTE.getLength() method like for TEXT type. See BYTE.getLength
Starting at 4.01.08
The reflect.Value.hasKey and reflect.Value.removeDictionaryElement methods. See reflect.Value.hasKey, reflect.Value.removeDictionaryElement
The base.Channel.closeOut() method, to close then writing stream of the channel (EOF equivalent) See base.Channel.closeOut.
Related upgrade notes
Table 2. User interface (language features)
Overview Reference
The KEYBOARDHINT form item attribute gets new options DECIMAL, NUMERIC, TEXT, SEARCH and NONE, for better control of the virtual keyboard on mobile devices. See KEYBOARDHINT attribute.
New rendering for ROWBOUND actions with three-dots button in TABLE, TREE and SCROLLGRID. See Actions bound to the current row, Binding action views to a table row, Binding action views to a treeview row, Binding action views to a scrollgrid row.
Starting at 4.01.03
New ui.Dialog method setColumnComparisonFunction() to implement custom sort in list dialogs. See ui.Dialog.setColumnComparisonFunction.
New ui.Dialog method setGroupBy() to define the grouping column in list dialogs. See ui.Dialog.setGroupBy.
STRING-typed parameters in fglsvgcanvas API. See fglsvgcanvas: STRING-typed parameters.
New fglsvgcanvas API function to define symbols. See symbol().
New fglsvgcanvas API function for @media styling. See mediaQuery().
Form and combobox default initializer as function reference. See ui.Form.setDefaultInitializerFunction, ui.ComboBox.setDefaultInitializerFunction.
Related upgrade notes
Upgrade notes for presentation style. See Presentation styles changes.
Table 3. User interface (front-end features):
Overview Reference
The standard.playSound front call gets a new "wait" option, to define if the front call must immediately return while the sound continues playing. See standard.playSound.
New presentation style attributes topmenuDesktopRendering and topmenuMobileRendering for Window. See New Window.topmenuDesktopRendering and Window.topmenuMobileRendering style attributes
The defaultTTFColor style attribute applies to any kind of form element. See defaultTTFColor applies to any type of form element
The packed style attribute for HBOX and VBOX. See packed attribute for HBOX and VBOX.
The modalOnLargeScreen value for the windowType style. See New windowType value modalOnLargeScreen.
The standard.feInfo front call supports a new property "colorScheme" to get the brightness mode. See Front calls changes, standard.feInfo: colorScheme.
The predefined actions enterforeground / enterbackground are triggered when using GBC front end in a browser (GAS) See Foreground and background modes.
The rowAspect style attribute for flipped TABLE and resizable SCROLLGRID. See New rowAspect attribute.
The position style attribute for ToolBar elements. See New position attribute for ToolBars.
New front calls in "standard" module. See New front calls.
Related upgrade notes
Upgrade notes for presentation style. See Presentation styles changes.
Table 4. SQL databases:
Overview Reference
Support for Microsoft® ODBC driver 18 for SQL Server with dbmsnc_18 ODI driver. See Database driver specification (driver).
Starting at 4.01.02
The fgldbsch tool can extract PostgreSQL OID columns as BIGINT. See fgldbsch type conversion option.
Starting at 4.01.03
Support for Microsoft SQL Server 2022. See Microsoft SQL Server.
Support for PostgreSQL 15. See Database drivers changes, PostgreSQL.
Starting at 4.01.06
Support for PostgreSQL 16. See Database drivers changes, PostgreSQL.
Support for MySQL 8.2 Innovation Release (with new dbmmys_8_2 driver) See Database drivers changes, Oracle MySQL / MariaDB.
Starting at 4.01.07
New FGLPROFILE entry to define PostgreSQL client trace file. See dbi.database.dsname.pgs.trace.file.
Related upgrade notes
Upgrade notes for database drivers. See Database drivers changes.
Table 5. Tools
Overview Reference
fglcomp -W unused option warns for PREPARE and DECLARE CURSOR statements with no corresponding usage, and for unused imported modules. See fglcomp -W option.
fglform -k / --keep-going option continues compilation of forms after error. See fglform -k option.
fglcomp -k / --keep-going option continues compilation of sources after error. See fglcomp -k option.
fglcomp -W form-field-name option to produce warnings for invalid field names in INPUT BY NAME and CONSTRUCT BY NAME dialogs. See fglcomp -W option.
Starting at 4.01.02
Code completer can find modules from FGLLDPATH, to complete IMPORT FGL. See Source code completion.
Starting at 4.01.03
Microsoft Visual Studio Code extension for Genero BDL. See Visual Studio Code extension.
Command-line debugger improvements (expression evaluation, in-line editing, completion, command history, list range of lines on stop) See Understanding the debugger, Expressions in debugger commands.
VIM edition enhancements: Go to definition (gd) and BDL language tags (CTRL-]). See Configure VIM for Genero BDL.

fglgar run --pid-file option writes fglgar process-ids to file.

See fglgar.
Related upgrade notes
Table 6. Web Services
Overview Reference
There is support for the HTTP specification allowing a message body with the HTTP verb DELETE. A message body is supported on client and server Web services using the REST low-level framework. See com.HttpRequest methods and com.HttpServiceRequest methods
For REST Web services using the high-level REST framework, the WSParam and WSQuery attributes support complex types, such as records and arrays in operation parameters. This enhancement is based on the OpenAPI specification for serialization. It supports default methods for delimiting values and handling items of arrays or records in paths and queries. See WSParam and WSQuery
The fglrestful tool has options to allow HTTP and proxy authentication when requesting OpenAPI documentation. See fglrestful
The fglwsdl -xmlname option is added to generate variables named with XMLName attributes in stubs. See fglwsdl
The REST engine WSContext variable has a RequestURL entry that you can use to get the URL (base URL, resource path, and query) from the client app. See WSContext
The REST engine WSAttachment attribute has been enhanced with an optional regular expression (regex) type value to validate the names of incoming files. See WSAttachment
Starting at 4.01.02

The GWS OpenID Connect service has enhancements to how scopes are exchanged. The Genero Identity Provider (GIP) follows the standard RFC 8693 as the default method when creating OAuth ID and access tokens with the scope parameter.

See Support for RFC 8693 in the Genero Identity Provider (GIP) creation of OAuth ID and access tokens with scopes
Starting at 4.01.04
The GWS OpenID Connect service configuration has a new entry (oidc.accesstoken.decode) added to decode roles and scopes in the access token. See New option oidc.accesstoken.decode for decoding access tokens with roles and scopes
Starting at 4.01.06
The FGLPROFILE has a new entry, security.global.options, added to allow legacy OpenSSL 1 options. See New security.global.option in FGLPROFILE to allow legacy OpenSSL 1 options
New fglwsdl option -SSLOptions added to support legacy OpenSSL 1 options. See fglwsdl option -SSLOptions to support legacy OpenSSL 1 options and fglwsdl.
STRING-typed return parameter in OAUTH API function. See Change to OAuthAPI.GetIDSubject returns.
Starting at 4.01.07
The FGLPROFILE has a new entry, security.global.certificate.selfsigned.preload, added to preload the global certificate and key at the start of the application instead of at the first HTTPS connection. See New security.global.certificate.selfsigned.preload entry in FGLPROFILE
Related upgrade notes
Upgrade notes for web services. See Web Services changes
Important:

This version of Genero Mobile (GMA/GMI) is desupported, use latest version of the product.

Table 7. Mobile apps (GMA 4.01 and GMI 4.01)
Overview Reference
Starting at GMA-4.01.02
New gmabuildtool option to enable data collection for analytics, when using Firebase Cloud Messaging. See Controlling Firebase data collection for analytics
The standard.playSound front call supports http/https URLs. See GMA 4.01 changes topic.
Starting at GMA-4.01.04
Default keystore type generated by gmabuildtool is now of type PKCS12. See GMA 4.01 changes topic.
New mobile.isEmulator front call. See New front calls.
Support GBC theming for app colors. See Using GBC theme to define app colors.
Starting at GMA-4.01.06
Local notification management. See mobile.createNotification.
New gmabuildtool options to control the manifest file. See The app manifest file.
New gmabuildtool options to set the path to the program files: --main-app-path and --root-path. See Changes to gmabuildtool command arguments
gmabuildtool supports @argfile syntax to specify a list of options in one or several files. See Changes to gmabuildtool command arguments
Permissions summary in gmabuildtool output. See Permissions summary in gmabuildtool output
Starting at GMA-4.01.07
Support for Firebase Cloud Messaging API V1. See Push notifications using FCM API V1, JSON data from mobile.getRemoteNotifications.
Starting at GMA-4.01.08
New gmabuildtool option to define the type of package (AAB or APK), to speed the build. See Controlling the production of AAB/APK package files.
Starting at GMI-4.01.04
New gmibuildtool option to update the app installed on a simulator. See New option --update for gmibuildtool.
Local notification management. See mobile.createNotification.
New mobile.isEmulator front call. See New front calls.
Starting at GMI-4.01.05
Notification IDs for remote notifications. See JSON data from mobile.getRemoteNotifications.
Starting at GBC-4.01.20
Mobile front calls implemented in GBC JavaScript code. See GBC supports mobile front calls.
Related upgrade notes
Upgrade notes for GMA. See Genero Mobile for Android (GMA) 4.01 changes.
Upgrade notes for GMI. See Genero Mobile for iOS (GMI) 4.01 changes.