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.

Prior new features guide: BDL 3.10 new features.

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 without .* 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.
Important:

This feature is deprecated, its use is discouraged although not prohibited.

See Universal Rendering as standard.
FGLGBCDIR environment variable, to define the directory of the GBC component to be used for Universal Rendering. See FGLGBCDIR, Universal Rendering as standard.
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 chromebar.
ui.Interface class methods to identify the Universal Rendering client and version.
Important:

This feature is deprecated, its use is discouraged although not prohibited.

See 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 New Folder.collapserPosition (GBC), Collapsible groups with GBC.
ON FILL BUFFER, ON IDLE and ON TIMER triggers 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).
Set the sanitize style attribute to "no" to disable HTML content cleanup (Warning: allows Stored XSS attacks!) See New sanitize style attribute (GBC).
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.
AUTONEXT can be used on EDIT or BUTTONEDIT with the COMPLETER attribute, and on COMBOBOX, to jump to the next field when a value is selected from the list. See AUTONEXT attribute.
The lateRendering style attribute for FOLDER containers can be used to optimize the layout processing. See New Folder.lateRendering style attribute (GBC).
Upgrade notes for presentation styles. See Presentation styles changes.
Upgrade notes for web components. See Web components changes.
Upgrade notes for front calls. See Front calls changes.
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, 12 and 13 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.
Upgrade notes for database drivers. See Database drivers changes.
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 -l/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.
Starting at 3.20.16

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

See options table for fglgar run.
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 documentation 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.
Starting at 3.20.13
The WSHelper.WSServerCookiesType record has a member added for setting the sameSite security value. The com.HttpServiceRequest.setResponseCookies() method, which uses the record, may raise a runtime error if the SameSite attribute is not set correctly. See: Changes to how GWS handles cookies, Single sign-on (OpenID Connect, SAML, and GIP) sameSite security.
Starting at 3.20.14
The fglwsdl -xmlname option is added to generate variables named with XMLName attributes in stubs. See fglwsdl
Starting at 3.20.15
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 3.20.17

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
Related upgrade notes
Upgrade notes for web services. See Web Services changes.
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.
GMA and GMI support standard.openFile/openFiles front calls. See standard.openFile, standard.openFiles, File management.
gmabuildtool produces Android App Bundle .aab packages. See Android App Bundle (.aab) packages
GMA build tool command updatesdk has a --no-interaction option to handle user interaction during installation of extras. It allows you to silently accept these installations during updates of Android SDK. See gmabuildtool updatesdk --no-interactions and Building Android apps with Genero.
Starting at GMA-1.40.22
New gmabuildtool option to enable data collection for analytics, when using Firebase Cloud Messaging. See Controlling Firebase data collection for analytics
Related upgrade notes
Upgrade notes for GMA. See Genero Mobile for Android (GMA) 1.40 changes.
Upgrade notes for GMI. See Genero Mobile for iOS (GMI) 1.40 changes.
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.