BDL 2.40 new features

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

Table 1. Core language
Overview Reference
The NVL() operator allows you to write the equivalent of an IF expr IS NOT NULL THEN RETURN expr ELSE RETURN default END IF statement in a single scalar expression. See NVL().
The IIF() allows you to write the equivalent of an IF bool-expr THEN RETURN true-value ELSE RETURN false-value END IF statement in a single scalar expression. See IIF().
A new global program option has been added, OPTIONS SHORT CIRCUIT, to instruct the runtime system to evaluate Boolean expressions by using the short-circuit evaluation (also called minimal evaluation) method. See OPTIONS (Compilation) and Controlling semantics of AND / OR operators.
Table 2. User interface
Overview Reference
New ON INSERT, ON APPEND, ON UPDATE and ON DELETE interaction blocks are now allowed in DISPLAY ARRAY dialogs to implement list modification, as an alternative to the traditional INPUT ARRAY dialog. These new triggers simplify the programming of modifiable record lists. See DISPLAY ARRAY modification triggers.
The new find and findnext actions of DISPLAY ARRAY and INPUT ARRAY can be used by the user to search rows where a field value matches the value entered in the find dialog box. See Find function.
The DISPLAY ARRAY dialog now supports a built-in seek feature to quickly find rows where a field value starts with the character typed by the user. See Keyboard seek.
Define a summary line for TABLEs by using AGGREGATE form fields. Values can be automatically computed or can be calculated and displayed by program See AGGREGATE item definition.
Using the terminfo database for text terminal mode (FGLGUI=0) by setting INFORMIXTERM=terminfo.

See Using a text terminal.

Table 3. SQL databases
Overview Reference
New database drivers are provided. List of new database drivers:
The fglcomp compiler now supports SQL ... END SQL blocks for compliance with IBM Informix® 4GL. See SQL ... END SQL.
The Static SQL syntax has been extended to allow the FIRST, LIMIT, SKIP and MIDDLE SELECT projection clause options. See Static SQL statements.
The CASE operator is now allowed in Static SQL statements. See Static SQL statements.
The syntax of DDL (Data Definition Language) statements in Static SQL now allows the IF NOT EXISTS and IF EXISTS clauses. See Static SQL statements.
The transaction instruction set has been completed with SAVEPOINT and ROLLBACK WORK TO SAVEPOINT. See SAVEPOINT and ROLLBACK WORK.
Control shadow column extraction with fgldbsch. See fgldbsch.
A new FGLPROFILE entry parameter has been added to control the ORACLE DATE fetch into CHAR/VARCHAR variables. See DATE and DATETIME data types.
Support for the ROWVERSION data type of SQL Server (2008 and +) has been added. See SQL Server ROWVERSION data type.
Table 4. Web Services
Overview Reference
The Genero Web Service engine has been enhanced to support a part of SOAP 1.2 protocol, restricted to the SOAP POST feature only. It does not support the SOAP 1.2 encoding feature, as it is prohibited by the WS-I Basic Profile 2.0.

To allow the SOAP 1.2 protocol in your Genero Web service application, call the setFeature() method of your web service to enable SOAP 1.2 support.

The same Web service can provide both the SOAP 1.1 and SOAP 1.2 protocol.

You can also specify the SOAP role of your Genero application if you pass the new SoapModuleURI option to the WebServiceEngine setOption() method in order to identify the headers the SOAP engine has to understand.

See com.WebService.setFeature, com.WebServiceEngine.SetOption, and WebServiceEngine options.
The Genero Web Service engine has been enhanced to support the WS-Addressing 1.0 specification. To enable WS-Addressing 1.0 specification in your Genero Web service application, call the setFeature() method of your web service with "TRUE" or "REQUIRED" as a parameter. See com.WebService.setFeature.
The Genero Web Service engine has been enhanced to support stateful services.
There are two kinds of stateful services:
  • Based on WS-Addressing: independent from the transport protocol used to to convey the state between the client and the server.
  • Based on HTTP cookies: depends on the transport protocol to convey the state between the client and the server.

To create a stateful web service, call com.WebService.createStatefulWebService() with a simple BDL variable or a dedicated W3CEndpointReference record to handle the service state.

You can also take a look at WS-Addressing and at the following links for additional information: JAX-WS, Oracle and Stateful based on cookies.

See com.WebService.CreateStatefulWebService and Stateful web services.
The Genero Web Service engine has been enhanced to support SOAP faults in RPC and Document style services.

On the server side, you can define BDL variables that will be thrown as SOAP faults to a web service client using the SOAP 1.1 or SOAP 1.2 protocol.

The fglwsdl tool has also been enhanced to generate client and server stubs according to the SOAP fault described in the WSDL.

  • Method createFault()
  • Method addFault()
  • Method SetFaultDetail()
  • Tool fglwsdl
See The com package (com.WebService.createFault, com.WebOperation.addFault, com.WebServiceEngine.SetFaultDetail) and fglwsdl.

The Genero fglwsdl tool generates a new Endpoint record per service in the client stub to configure the client behavior at runtime without the need to modify the generated code.

This feature requires regeneration of the client stub and modification of the server location assignment if used in your application (See also Web Services changes).

See Change WS client behavior at runtime.
The Genero fglwsdl tool has been enhanced to support WS-Addressing 1.0, the SOAP 1.2 protocol and to handle operation faults in SOAP 1.1 and SOAP 1.2.

The generated client and server stub will handle WS-Addressing 1.0, SOAP 1.2 protocol and manage soap faults as defined in the WSDL.

The following options have been added:

Options related to SOAP:
  • -soap11 : Generate only client and server stubs supporting the SOAP 1.1 protocol.
  • -soap12 : Generate only client and server stubs supporting the SOAP 1.2 protocol.
  • -ignoreFaults : Do not generate soap faults.
Options related to WS-Addressing:
  • -wsa <yes|no> : Force support of WS-Addressing 1.0. if yes, disable support of WS-Addressing 1.0, if no, otherwise support WS-Addressing 1.0 according to the definition in the WSDL.
Other options:
  • -alias : Generate FGLPROFILE Logical names in place of URLs for all client stubs.
  • -extDir : Add all schema files located in a directory and ending with .xsd as external schemas.
  • -CA : Validate HTTPS certificate against a certificate authority list.
See fglwsdl.
The XML-Signature and XML Encryption API of the XML library have been enhanced with new built-in methods to ease compatibility with the WS-Security specification:
  • Method getSignatureMethod()
  • Method getThumbprintSHA1()
  • Method getSHA1()
See XML security classes.
The XML library has been enhanced to support XML parsing from PIPE and saving to PIPE:
  • Method loadFromPipe()
  • Method saveToPipe()
  • Method readFromPipe()
  • Method writeToPipe()
See The xml package (xml.DomDocument.loadFromPipe, xml.DomDocument.saveToPipe, xml.StaxReader.readFromPipe, xml.StaxWriter.writeToPipe)
The Genero Web Services service library has been enhanced to support global SSL/TLS security configuration in FGLPROFILE for HTTPS communication.

You can now define the SSL/TLS certificate and private key to be used for all secured connections with the following entries and still use a dedicated SSL/TLS configuration if needed for a particular server.

  • Entry security.global.certificate
  • Entry security.global.privatekey
  • Entry security.global.keysubject (Windows only)
  • Entry security.global.protocol
See Web services configuration.
A universal unique identifier function, CreateUUIDString(), has been added to the COM library. This funciton generates a universal unique identifier in BDL. This method is desupported since 3.00, use security.RandomGenerator.CreateUUIDString as replacement.
The Genero Web services library has been enhanced with two new serializers:
  • xml.Serializer.DomToStax() converts a Dom node to a Stax writer
  • xml.Serializer.StaxToDom() converts a Stax reader to a Dom node
See xml.Serializer.DomToStax and xml.Serializer.StaxToDom.