BDL 2.21 new features

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


This version of Genero BDL is desupported, use a more recent version of the product.


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 2.21 upgrade guide.

Prior new features guide: BDL 2.20 new features.

Table 1. Core language
Overview Reference
Program module dependency specification with IMPORT FGL instruction. See The IMPORT FGL instruction.
Support for C1 Ming Guo date format modifier: Enable the digit-based Ming Guo date format by adding the C1 modifier at the end of the value set for the DBDATE environment variable:
$ export DBDATE
  • When using C1, the possible values for the Yn specifier are Y4, Y3, Y2.
  • The MDY() function is sensitive to the C1 modifier usage in DBDATE.
  • The USING operator supports the c1 modifier as well.
  • The C2 modifier to use Era names is not supported.
  • Unlike Informix® 4gl, when using negative years, the minus sign is placed over the left-most zero of the year.
  • Front-ends may not support the Ming Guo calendar for widgets like DATEEDIT.
Table 2. User interface
Overview Reference
VALUEMIN/VALUEMAX attributes for the SPINEDIT widget. See SPINEDIT
New presentation style attributes for Window nodes: actionPanelButtonTextAlign, ringMenuButtonTextAlign. See Window style attributes: Action Panel Window style attributes: Ring Menu.
New presentation styles attributes for Image nodes. See alignment.
Numeric keypad decimal separator: The decimal separator defined by DBMONEY or DBFORMAT will be used when pressing the dot key of the numeric keypad. See DBMONEY and DBFORMAT.
Automatic display of BYTE images: Image data contained in a BYTE variable are now displayed automatically when using a simple DISPLAY BY NAME, DISPLAY TO or when the BYTE variable is used by a dialog instruction. The BYTE data must be located in a file (LOCATE IN FILE "path") or temp file (LOCATE IN FILE). See IMAGE item definition.
Paged DISPLAY ARRAY supports undefined initial row count: With this feature, when using a Paged DISPLAY ARRAY, it was mandatory to provide the total number of rows in the result set, which required a SELECT COUNT(*) before executing the dialog instruction. The dialog now supports an undefined number of rows, with value -1 in the COUNT dialog attribute. See Record list (DISPLAY ARRAY).
New ui.Interface.setSize() method to to let you define the initial size of the WCI container window. See The Interface class.
New formScroll presentation style attribute for windows. Desupported in V4. See Universal Rendering as standard.
Table 3. SQL databases
Overview Reference
New database drivers List of new database drivers:
New Easysoft driver to connect from UNIX™ to SQL Server. This driver is based on the Easysoft SQL Server ODBC client. See Microsoft SQL Server.
New PostgreSQL 8.4 driver with INTERVAL support: dbmpgs84x. This driver converts Informix-style INTERVALs to native PostgreSQL INTERVALs. See PostgreSQL.
Static SQL column definition supports DEFAULT clause: The syntax of the CREATE TABLE and ALTER TABLE Static SQL statements allows the DEFAULT clause in column definitions.
 num SERIAL,
 name VARCHAR(50) 
 DEFAULT '<undefined>'
See Static SQL statements.
PostgreSQL database driver supports now TEXT/BYTE. See TEXT and BYTE (LOB) types.
New Static SQL syntax for the INSERT statement, which removes the record member defined as SERIAL, SERIAL8 or BIGSERIAL in the schema file:
SCHEMA mydb 
DEFINE record RECORD LIKE table.*
INSERT INTO table VALUES record.*
The LOAD can now raise error -846 when the input file has a corrupted line (missing or invalid field separator, invalid character set, UNIX/DOS line terminators). You can now easily find the invalid line by setting the FGLSQLDEBUG environment variable. The runtime system will display such debug messages with the line number:
| DBI: LOAD: Corrupted data file,
  check line #12345.
ODBC Character type control with SNC driver is now possible by using simple char or wide-char character strings for ODBC, with the following FGLPROFILE entry:
dbi.database.<dbname>.snc.widechar =
See Microsoft SQL Server.
Table 4. Web Services
Overview Reference
The fglwsdl tool supports HTTPS request to retrieve WSDL or XSD on the network. You must specify the X509 certificate and private key using these options:
  • -cert filename : The filename of the X509 PEM-encoded certificate.
  • -key filename : The filename of the X509 PEM-encoded private key associatedto the above certificate.
  • -wCert name : The name of the X509 certificate and its associated private key in the Windows® key store (Windows Only)
See fglwsdl.
The fglwsdl tool allows http authentication and proxy authentication when requesting a WSDL or an XSD on the network, and supports basic and digest authentication. Two options have been added for authentication.
  • -pAuth login password : The login and the password to be used for proxy authentication.
  • -hAuth login password : The login and the password to be used for http or https authentication.
See fglwsdl.

The fglwsdl tool provides a new option that generates:

  • a client stub entirely based on the DOM API
  • calls to a request, response and fault callback function per service

This option is especially useful when you have to communicate with another web service that requires additional information on the XML request, or when it returns additional information that was not specified in the WSDL. For instance, this is the case if you have to communicate with web services using WS-Security. You can manipulate the XML document in the generated client stub using the XML-Signature or XML-Encryption API to perform the security part by hand before it is sent on the network.

The following option has been added for that purpose:

  • -domHandler : Generate function calls to a request, response and fault callback handler, and force the use of DOM in the client stub.
See WS client stubs and handlers.
The COM library is enhanced by a new function called HandleRequest to allow low-level and high-level web services on the same server. See com.WebServiceEngine.HandleRequest.
The COM library is enhanced to perform automatic reply on HTTP GET request when the server requires HTTP authentication, proxy authentication, or returns an HTTP redirect. See com.HttpRequest.setAutoReply.
The XML library supports a new option, xml_useutctime, to serialize any BDL DATE and DATETIME using the UTC format requested in most WS-Security exchanges. See Serialization option flags.
The XML library has been enhanced with two APIs in the CryptoKey class. Due to security issues, the usage of a direct shared symmetric or HMAC key is not recommended; operations are secure using a key derived from a common shared key instead. The XML library has been enhanced with two APIs in the CryptoKey class:
  • Constructor CreateDerivedKey()
  • Method deriveKey()
See Derived keys.
The COM library has been enhanced with two helper APIs in a new Util class. In most Web Service security exchanges, the application must be able to compute digest passwords and use random binary data to detect reply attacks (for instance). The COM library has therefore been enhanced with two helper APIs in a new Util class:
  • Static method CreateDigestString()
  • Static method CreateRandomString()
These methods are desupported since 3.00, use security.Digest.CreateDigestString and security.RandomGenerator.CreateRandomString.
The StAX reader and writer classes have been enhanced with two new methods to set up the XML stream on a TEXT lob. It enables parsing of an XML document in StAX directly from a TEXT with the readFromText() method, and creating a new XML document saved directly as TEXT with the writeToText() method. See The StaxWriter class and The StaxReader class.

The Genero Web Services library has been enhanced to support XML wildcard attributes.

Such wildcard attribute can be set in a XML schema or in a WSDL via the anyAttribute tag. It allows additional attributes belonging to other XML schemas in a main XML schema. The additional attributes are not necessarily known by the main schema.

The fglwsdl tool has been enhanced to recognize the additional attribute and to generate a one-dimensional dynamic array with a new XMLAnyAttribute attribute, and the XML Serializer has been enhanced to handle the new XMLAnyAttribute during the serialization and deserialization process.

A new option called xs_processcontents is supported by the XML Serializer to generate the XML schema of such wildcard attributes with a processContents tag that defines the way a validator will handle them.

See Attributes to customize XML serialization and The Serializer class.

The package contains a new demo called SimplePKI that demonstrates the usage of XML-Encryption in Genero.

It allows several clients to register to a centralized PKI (Public Key Infrastructure) service that generates a unique RSA key-pair per user. The private key is returned to the user during the registration or login, using a derived symmetric key based on the user's password to make it secure. Then any client is able to retrieve the public key of the registered users, and to encrypt XML data only readable by that user.


This demo can easily be adapted in a real-world application if (for instance) all key-pair are stored in a database for persistence.

You can find the demo in the demo/WebServices/simplepki subdirectory or by running the demo application in your installation directory.