BDL 3.10 new features

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

Table 1. Core language
Overview Reference
The DICTIONARY type, to define associative arrays / hash-maps. See Dictionaries, DICTIONARY as class.
New FUNCTION definition syntax, to declare exact function signature with parameter types in the parentheses, and return types in the RETURNS clause. See FUNCTION syntax, Function parameters, Returning values.
Function references, to call functions only know at runtime. See Function references, FUNCTION func-spec.
Invoking methods with an object reference returned from a method: LET s = s.subString(1,10).toLowerCase() See Working with objects.
Java SE 10 and 11 support. See Java Inteface changes, Java software requirements for FGL.
New DYNAMIC ARRAY methods copyTo(), search(), searchRange(). See DYNAMIC ARRAY.copyTo, DYNAMIC ARRAY.search, DYNAMIC ARRAY.searchRange.
Defining the localized string lookup path when program starts. See base.Application.reloadResources.
Bit-wise operation and hexadecimal/binary string conversion on INTEGER values. See The util.Integer class.
Channel openFile() method can write to stderr. See base.Channel.openFile.
Variable definition attributes for JSON serialization: json_null, json_name. See JSON support.
Resource files (.42f, etc) can now also be found in the directory where the MAIN module resides. See Default resource file search path, FGLRESOURCEPATH.
Base64 to/from Hexadecimal string conversion methods. See util.Strings.base64DecodeToHexString, util.Strings.base64EncodeFromHexString.
Source documentation enhancements, to describe module variables, constants and user defined types. See Commenting a module constant, Commenting a module variable, Commenting a module type.
fglform checks for unique TABINDEX values. See Unique TABINDEXes in a form.
Upgrade notes for C extensions. See C Extension changes.
Upgrade notes for Java interface. See Java Inteface changes.
Table 2. User interface
Overview Reference
Dynamic dialog creation (equivalents of INPUT ARRAY and DIALOG blocks). See Dynamic Dialogs, ui.Dialog.createInputArrayFrom, ui.Dialog.createMultipleDialog.
Click on cell in DISPLAY ARRAY with FOCUSONFIELD attribute. See Field-level focus in DISPLAY ARRAY.
Get user's preferred language defined on the front-end platform. See User's preferred language.
New "accordion" value for the position style attribute of FOLDER containers, to render the children pages as a set of collapsible group boxes. See Folder style attributes, FOLDER item type, Presentation styles changes.
A set of ready-to-use web components are now provided in the Genero BDL package. See Built-in web components, Web components changes.
gICAPI Web Component onFlushData and onStateChange methods to better control content change and form field state. See gICAPI.onFlushData(), gICAPI.onStateChanged().
New dialog methods to set text, image and comment of default action views. See Configuring default action views dynamically.
Defining array cell attributes in dynamic dialogs with simple and two-dimensional dynamic arrays. See ui.Dialog.setArrayAttributes.
Display values to form fields or screen arrays that are only known at runtime. See ui.Form.displayTo.
NOTEDITABLE can be specified for TEXTEDIT form fields. See NOTEDITABLE attribute.
Use the DateEdit style attribute calendarType to define the type of calendar. See DateEdit style attributes.
GBC supports the buttonIcon style attribute for DateEdit and DateTimeEdit classes. See DateEdit style attributes, DateTimeEdit style attributes.
The UserInterface style attribute reverse can be used for Arabic languages support. See Right-to-left languages support.
localStorage front calls to store key/value pairs on the front-end side. See Local storage front calls, New localStorage frontcalls.
Style attribute rowActionTrigger (Table class), to define the physical event to fire the row choice action. This allows you to define simple-clicks to select a row in a table controlled by DISPLAY ARRAY. See Defining the action for a row choice.
DOUBLECLICK attribute now supported for SCROLLGRID lists, in .per file syntax and as DISPLAY ARRAY attribute. See Defining the action for a row choice.
ON CHANGE is now allowed in CONSTRUCT. See ON CHANGE block.
SCREEN can get a TAG attribute. See SCREEN section.
bold attribute in table cell attributes. See ui.Dialog.setArrayAttributes.
The Window style attribute thinScrollbarDisplayTime accepts a negative value, to hide the scrollbar. See Window style attributes: Basics.
Form item attribute INITIALPAGESIZE for SCROLLGRID elements. See INITIALPAGESIZE attribute.
The standard.openFiles front call can be used to let the user select multiple files on the front-end platform. See The openFiles front call.
The Window style attributes actionPanelButtonSize and ringMenuButtonSize support the em unit ("20em"). See Presentation styles changes, Window style attributes: Action Panel, Window style attributes: Ring Menu.
AGGREGATE fields can be used with any item type (was limited to EDIT columns). See Summary lines in tables.
GDC auto-update front call (monitor.update) to install a new GDC automatically from a Genero program. See monitor.update frontcall.
Input field hint specification with the PLACEHOLDER attribute. See PLACEHOLDER attribute.
Front call API allows RECORD and ARRAY specification in input and output parameters. See ui.Interface.frontCall, webcomponent.call.
The ui.Dialog.nextField() method accepts "+NEXT", "+PREV" and "+CURR" field specification. See ui.Dialog.nextField.
The ui.Dialog.cancel() method can be used to cancel a parent DIALOG from the SUBDIALOG code. See ui.Dialog.cancel.
New theme front calls allow the Genero application to set the theme, retrieve the theme in use, or list all available themes for an application using the Genero Browser Client. See Theme front calls.
Better control of row / cell highlighting for TABLE and SCROLLGRID containers. See Row and cell highlighting in TABLE, Row and cell highlighting in SCROLLGRID, Row highlighting in TREE.
Set the Table style attribute tableType to listView, to get Mobile list view rendering for tables. See Controlling table rendering, Table style attributes.
Set the Scrollgrid style attribute customWidget to pagedScrollGrid, to render the scrollgrid as a responsive tile list. See SCROLLGRID item type, ScrollGrid style attributes, Scrollgrid views.
Set the Checkbox style attribute customWidget to toggleButton, to render the checkbox as a toggle switch. See CHECKBOX item type, CheckBox style attributes.
The Button style attribute alignment can be used to define the content position in the widget. See Button style attributes.
The Window style attribute windowState can be set to fullscreen to display the window in fullscreen mode (GDC only). See Window style attributes: Basics.
Upgrade notes for presentation styles. See Presentation styles changes.
Upgrade notes for front calls. See Front calls changes
Upgrade notes for web components. See Web components changes.
Table 3. SQL databases:
Overview Reference
Support of Microsoft® ODBC v13 and v17 for SQL Server with dbmsnc_13 and dbmsnc_17 ODI drivers. These drivers are available on Windows® and Linux® 64bits platforms, to connect to SQL Server 2016, 2017 and Azure SQL Database. See Microsoft ODBC Driver for SQL Server.
Support for SAP HANA® 2.0 database with the new ODI driver dbmhdb_2. See SAP HANA.
Support for IBM® DB2® LUW 11.x (with dbmdb2_10). See Database driver specification (driver).
Support for Oracle® 12c on macOS®. See Mac OS X platform notes (Special consideration must be taken for libclntsh.so)
Support for PostgreSQL 9.6 and 10. See Database driver specification (driver).
Support for Oracle MySQL 5.7 (dbmmys_5_7) and MySQL 8.0 (dbmmys_8_0). See Oracle MySQL 5.7 and 8.0 support, Database driver specification (driver).
Support for MariaDB 10.2 with the new ODI driver dbmmdb_10_2. See Database driver specification (driver), Prepare the runtime environment - connecting to the database.
Support for FreeTDS 1.00 (to connect to SQL Server up to version 2016) See Prepare the runtime environment - connecting to the database.
The SNC driver selects automatically the char mode (snc.widechar FGLPROFILE parameter) depending on the application locale. See Wide Char mode of SNC driver.
Special hints in C-style comments to control SQL statement execution. See fglhint_* in SQL comments.
Defining ODBC connection string parameters for SQL Server with the "datasource?options" notation in the "source" connection parameter. See Database source specification (source), SQL connection identifier.
Specifying Oracle DB schema and tablespace in temporary table emulations. See Temp table emulation with Oracle DB.
Oracle DB proxy authentication. See Oracle DB Proxy Authentication.
Print SQL debug message only when SQL error occurs, and control SQL debug level from programs with fgl_sqldebug() See Debugging SQL statements, fgl_sqldebug().
Converting MATCHES to PostgreSQL SIMILAR TO expressions. See MATCHES and LIKE
Faster SQL execution with PostgreSQL driver and new pre-fetch row count parameter in FGLPROFILE. See PostgreSQL specific FGLPROFILE parameters.
SET LOCK MODE support with PostgreSQL driver. See Concurrency management.
Upgrade notes for database drivers. See Database drivers changes.
Table 4. Tools
Overview Reference
GUI log file name with process id (--start-guilog="myfile-%p.log"). See Front-end protocol logging.
Source code coverage tool (FGLCOV / fglrun --merge-cov). See Source code coverage.
Program execution trace (fglrun --trace). See Execution trace.
VIM plugins can be used directly from $FGLDIR/vimfiles. See Configure VIM for Genero BDL.
The fpi command line tool can be used to show Genero BDL version information. See fpi.
The fglgar command line tool is now delivered with the FGLGWS package. See fglgar, Packaging web applications.
fglcomp option -W to-err-file to write warnings to the .err file. See fglcomp.
fglcomp option --tag=string to write a custom string to the .42m pcode module. See fglcomp, 42m module information.
Table 5. Web Services
Overview Reference
Support of Message Transmission Optimization Mechanism (MTOM), a method of efficiently sending binary data to and from Web services. See Message Transmission Optimization Mechanism (MTOM), XMLOptimizedContent, and fglwsdl (-hexb64AsString option)
The swaRef feature optimizes file transfer when the files are attachments and located on disk. See swaRef (SOAP with attachments using wsi:swaRef).
Better support of Web Services on iOS mobile devices. See Web Services on mobile devices.
New methods clearHeaders() and removeHeader() remove headers from an HTTP multipart object. See com.HttpPart methods.
New XML serializer options xml_ignoreunknownelements and xml_ignoreunknownattributes, to ignore unexpected elements or attributes. See Serialization option flags.
The XMLElementNillable attribute provides an option to set all XML elements explicitly to null and to serialize them with xsi:nil="true", when the BDL variable is NULL. See XMLElementNillable, Web Services changes.
The XMLNillable attribute provides an option to set an XML node explicitly to null and to serialize it with xsi:nil="true", when the BDL variable is NULL but not optional. See XMLNillable, Web Services changes.
New built-in server-side methods for the com.HTTPServiceRequest class: getURLHost(), getURLPort(), getURLPath(), getURLQuery(), findRequestCookie(), and setResponseCookie(). See The HTTPServiceRequest class.
Methods added to assist with cookie management. See WebServiceEngine options, com.HTTPRequest.setAutoCookies and com.HTTPServiceRequest.setResponseCookies.
New Genero BDL helper functions: SplitUrl(), FindQueryStringValue(), and SplitQueryString(). See WSHelper library.
New methods for proxy management of the current HTTPRequest. See The HTTPRequest class.
Genero Web Services accepts 2 new options to enable OCSP (Online Certificate Status Protocol). See Enable OCSP.
The xml.XSLTTransformer class provides methods for transforming XML following the XSLT version 1.0 specification. See The XSLTtransformer class.
New methods to generate a password of a given size and based on a human readable password using Password-Based Key Derivation Function 2 (PBKDF2). See The PBKDF2 class.
New methods allow you to save passwords as BCrypt results. See The BCrypt class.
A new REST demo has been added in $FGLDIR/demo/WebServices/forum. This demo uses REST services with JSON, text and binary data; manages authorization access via the new HTTP automatic cookie API; and uses the new BCrypt API to store a password in a database. See the readme.txt provided with the demo.
The enveloped-signature method has an optional parameter to specify the node where the signature will be added. See Transformation identifier.
FGLPROFILE entry to define regex-based URL specification for HTTP configuration. See Web Services changes, Server configuration.
New fglwsdl option -fRPCNamespace to produce BDL code supporting the namespace attribute for RPC parameters. See Web Services changes, fglwsdl.
New fglpass option -gid and security.global.agent.gid=true FGLPROFILE entry, to allow agent authentication to be performed with UNIX® user group instead of user only. See Web Services changes, fglpass, Use the password agent.
V3.10.24 (MR)
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.
Upgrade notes for web services. See Web Services changes.
Table 6. Mobile apps (GMA 1.30 and GMI 1.30)
Overview Reference
GMI and GMA include generic Cordova/PhoneGap plugin front calls to make use of the Cordova plugins. See Cordova plugin front calls.
GMI build tool options --install-plugins and --list-plugins, to manage Cordova plugins. See gmibuildtool and Cordova plugins.
GMA build tool option --build-cordova, to embed one or more Cordova plugins. See gmabuildtool and Cordova plugins.
GMA build tool command scaffold, to manage scaffold archives. This new command comes with the --list-plugins and --install-plugins options to handle plugins in the scaffold archive. See gmabuildtool and Building Android apps with Genero.
Stretchable SCROLLGRID lists are supported on mobile front-ends. See SCROLLGRID item type.
Predefined actions enterbackground and s enterforeground to detect app state change. See Background/foreground modes.
The GMIDIR environment variable allows you to install the GMI archive in a different directory than FGLDIR. See Building iOS apps with Genero.
GMI build tool option --extensions-libs, to specify the libraries to be used to build your iOS app. See Building iOS apps with Genero.
GMA build tool options --build-status-icon-* allow you to define the status notification bar icon. See Building Android apps with Genero, gmabuildtool.
GMA build tool option --accept-licenses allows you to silently accept Android SDK licenses during updates of Android SDK. See gmabuildtool and Building Android apps with Genero.
GMA supports now the alignment style attribute for IMAGE. See Presentation styles changes, Image style attributes.
GMI build tool option --install provides a method for installing without the need to snoop with instruments for the actual device name. See gmibuildtool and Genero mobile development client for iOS.
The style attribute reduceFilter controls the display of the the listview reduce filter on mobile clients. See Table style attributes.
GMA build tool option --build-force-scaffold-update, to re-create the app project directory from a fresh GMA scaffold directory. See gmabuildtool and Genero Mobile for Android (GMA) 1.30 changes.
GMA build tool option --build-quietly, to force yes for any answer asked during the build process. See gmabuildtool and Genero Mobile for Android (GMA) 1.30 changes.
The front call mobile.isForeground indicates if the app is in foreground mode. See Front calls changes, isForeground.