BDL 3.20 new features

Features added in 3.20 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 3.20 upgrade guide.

Table 1. Core language
Overview Reference
Support for circular dependency of modules with IMPORT FGL. See Circular dependency with IMPORT FGL.
Method declaration, to define functions acting on a user-defined type. See Methods, FUNCTION syntax.
INTERFACE structure, to define a group of methods for a type. See Interfaces.
Passing records by reference (INOUT). See Passing records by reference with INOUT.
Variable initializers: The DEFINE instruction supports a clause to initialize the variable. See Variable initializers, DEFINE.
Named parameters in function calls: CALL func(p1:value). See Naming parameters in a function call.
Function attributes (for RESTful Web Services). A FUNCTION definition can specify function attributes, parameter attributes and return values attributes. See Function attributes, FUNCTION definitions.
New STRING and base.StringBuffer methods to remove all kinds of whitespace characters in a string. See the *WhiteSpace methods in STRING data type methods and base.StringBuffer methods.
FUNCTION definition syntax allows the RETURNS () clause, to specify an empty return list and enforce compilation verifications to avoid RETURN instruction misusage. See FUNCTION syntax, Returning values.
Arrays can be assigned without the .* notation. See Dynamic array assignment with .* notation.
Records can be assigned without the .* notation. See Record copy with .* notation.
FGLPROFILE fglrun.floatToCharScale2 and fglrun.floatToCharScale2.print to control FLOAT/SMALLFLOAT to string conversion. See FLOAT/SMALLFLOAT to string conversion.
GetOpt utility type and methods, to process command line arguments in the getopt style (--option[=value]). See getopt: Command line options module.
New os.Path.glob() method to get a list of files from a pattern. See os.Path.glob.
TEXT and BYTE variables are now automatically located in memory by JSON parsing methods. See JSON to BDL data conversion.
Table 2. User interface
Overview Reference
The new gui.rendering FGLPROFILE entry, to enable Universal Rendering. See Graphical mode with Universal Rendering.
FGLGBCDIR environment variable, to define the directory of the GBC component to be used for Universal Rendering. See FGLGBCDIR, Graphical mode with Universal Rendering.
KEYBOARDHINT form attribute allows now the URL value to define an EDIT field for URL input. See KEYBOARDHINT attribute.
GBC supports the "chrome" value for actionPanelPosition, ringMenuPosition and toolBarPosition window style attributes. See Action views rendering in GBC chrome bar.
ui.Interface class methods to identify the Universal Rendering client and version. See Graphical mode with Universal Rendering, ui.Interface.getUniversalClientName, ui.Interface.getUniversalClientVersion.
Form elements of type GROUP can be defined as collapsible with new style attributes (collapsible / initiallyCollapsed). See Collapsible groups with GBC.
Collapsible groups and folders can be configured to display the collapser icon at a specific position with the collapserPosition style attribute. See folder.collapserPosition (GBC), Collapsible groups with GBC.
ON FILL BUFFER trigger for display array dynamic dialog. See ui.Dialog.addTrigger.
Built-in classes methods to control form elements are now case-insensitive. See Case insensitive names with UI methods.
Use the itemsAlignment style attribute to control the alignment of elements inside a scrollgrid. See Controlling element alignment inside a scrollgrid
New enableCalendar style attribute for DateTimeEdit with GDC. See New DateTimeEdit.enableCalendar style attribute (GDC)
New qtStyle style attribute for ComboBox with GDC. See New ComboBox.qtStyle style attribute (GDC)
The INITIALIZER attribute of COMBOBOX accepts module specification as function prefix (the module is then automatically loaded) See INITIALIZER attribute.
Setting the comment of a form element or form field. See ui.Form.setElementComment, ui.Form.setFieldComment.
New FGLPROFILE entry gui.programStoppedMessage to define a generic message to be displayed to the end user when a program stops because of a runtime error. See Default exception handling, Program stop error message box
Table 3. SQL databases:
Overview Reference
Support for Oracle® database 18c and 19c with the dbmora_18 driver. See Database drivers changes.
Using Oracle 18c private temporary tables to emulate Informix® temporary tables. See Using the private temporary table emulation.
Support for PostgreSQL 11 and 12 with the dbmpgs_9 driver. See Database drivers changes, PostgreSQL 12 notes.

Support for SQL Server 2019 (v15) with the dbmsnc_17 driver.

See Database drivers changes.

New dbmmys_5_6 driver for MySQL 5.6 as replacement of dbmmys_5_5 no longer available because of MySQL 5.5 desupport. See Database drivers changes.
New ifxemul.datatype.serial.sqlerrd2 FGPROFILE entry to disable automatic serial retrieval for SQLCA.SQLERRD[2]. See FGLPROFILE entries for core language, Disabling automatic serial retrieval for SQLCA.SQLERRD[2].
Utility function db_get_last_serial() to retrieve the last generated serial, mandatory for BIGINT incremented columns. See db_get_last_serial().
FGLPROFILE entry dbi.database.dbname.pgs.schema to define the schema search path for PostgreSQL. See PostgreSQL specific FGLPROFILE parameters.
FGLSQLDEBUG ouput enhancement to identify when SQL INTERRUPT ON/OFF is used. See note in Performances with SQL interruption.
Support for IBM® Informix trusted connections, with the new TRUSTED keyword for CONNECT TO, and the new SET SESSION AUTHORIZATION statement. See CONNECT TO, SET SESSION AUTHORIZATION.
Informix SQL SELECT statement row limiting clause SKIP n FIRST m can be converted to native equivalent. See Row limiting clause (SELECT).
With Microsoft SQL Server, in DDL statements such as CREATE TABLE, character data types can be converted to the equivalent native national character types, with FGLPROFILE entry dbi.database.dsname.ifxemul.nationalchars=true. See character types with SQL Server, ifxemul FGLPROFILE settings.
To avoid Microsoft SQL Server 468 collation conflict errors with temporary tables, the ODI drivers for SQL Server add now a COLLATE DATABASE_DEFAULT clause after character types in the native statement generated from a CREATE TEMP TABLE. This is not needed for SELECT INTO TEMP. See Temporary tables.
Oracle database rowid (in base 64 format) can be found in SQLCA.SQLERRM. See ORACLE rowid in SQLCA.SQLERRM.
Table 4. Tools
Overview Reference
Source code formatting tool: fglcomp --format, including new command line tools fglgitformat, fglformatdiff. See Source code beautifier, fglgitformat, fglformatdiff.
Qualifying imported symbols: fglcomp --qualify-imports. See Qualifying imports.
Use lowercase keywords in VIM with fgl_lowercase_keywords=1. See Configure VIM for Genero BDL.

fglrun/fgllink supports @argfile to specify the list of files to link.

See Providing the files to link in an arguments file, Providing the files to link in an arguments file.
fglcomp can now process several .4gl files on the command line. See Compiling several .4gl sources in a single command, fglcomp.
Commands accepting a list of files like fglcomp or fgllink, can do pathname expansion (fglcomp *.4gl), on Unix and Windows platforms. See Compiling several .4gl sources in a single command, fglcomp.

To reduce compilation time of large projects, fglcomp supports the --make option, to compile the provided .4gl sources only when the .42m is not up-to-date. The --make option can be used with the --simulate option, to simulate the process without compiling.

See Compiling in make mode.

The fglcomp --dependencies option can be used to produce makefile-style dependency rules for imported modules.

See Producing make-style dependency rules.

fglcomp supports @argfile to specify the list of source files in an input file.

See Providing the source files in an arguments file.

fglcomp supports the value "auto" for -p preprocessor type option.

See Preprocessing style option.

fglrun provides the --print-missing-imports option to show only missing IMPORT FGL (--print-imports option prints required imports even if IMPORT FGL is used)

See Identifying modules to be imported.
fglcomp supports the new warning argument -W unused-parameter, that prints a message when a function parameter is not used. The negative form -W no-unused-parameter can be combined with -W unused, to ignore parameters that are unused. See fglcomp option -W option.
Table 5. Web Services
Overview Reference
The Genero Web Service engine has been enhanced with a mechanism to provide a high level REST web service. You can implement REST Web services using function attributes (identified with WS* prefix) that you specify in ATTRIBUTES() clauses of functions. See:
The fglrestful tool takes an OpenAPI specification file (JSON format) and generates the client stub to interact with the REST service. See fglrestful
Descriptions using the WSDescription attribute are allowed in input and output parameters. These descriptions can be generated in the REST stub file using the fglrestful tool's --comment option. See fglrestful and WSDescription
com.WebServiceEngine option server_restdefaultformat added to define runtime support for MIME types in REST operations. See WebServiceEngine options
Method added to publish high-level RESTful Web services in the GWS engine. See com.WebServiceEngine.RegisterRestService
Method added to provide error management in the high-level RESTful Web service. See com.WebServiceEngine.SetRestError
Empty HTTP POST and PUT requests. See Support for empty HTTP POST or PUT requests.
The FGLPROFILE entry http.global.request.date can be set to true, in order to force sending HTTP Date header for GET, HEAD and DELETE requests. See Control HTTP Date header for GET, HEAD and DELETE requests.
The com.HTTPRequest.setAuthentication has an enhancement to support the NTLM authentication protocol of Windows® server that requires the connection to be kept open. See com.HTTPRequest.setAuthentication or com.HTTPRequest.setKeepConnection
API added to provide management of OAuth authentication for RESTful Web service secured by OpenID Connect. See OAuthAPI library
Table 6. Mobile apps (GMA 1.40 and GMI 1.40)
Overview Reference
gmabuildtool option -bgr / --build-gbc-runtime, to define the GBC to be used to build the app. See Building Android apps with Genero.
gmibuildtool option --gbc, to define the GBC to be used to build the app. See Building iOS apps with Genero.
GMA supports now the alignment style attribute for BUTTON. See Button.alignment style attribute (GMA), Button style attributes.
Cordova plugin wrapper libraries now available on the FOURJS Cordova Github. See Cordova plugins for GMA, Cordova plugins for GMI.
New Cordova plugin front calls to get plugin information. See New Cordova front calls in GMA, New Cordova front calls in GMI.
Table 7. Miscellaneous
Overview Reference
New parameter for monitor.update front call to control administrator permission elevation prompt. See Front calls changes, monitor.update front call.