Genero v2.10 now available

Irving, Texas – December 6, 2007 — Four Js Development Tools is pleased to announce the release of Genero v2.10. This important release comprises several breakthrough features that improve on the language and render user interaction more intuitive.

Genero v2.10

Breakthrough features

Genero v2.10 is an important milestone for Four Js and the I-4GL developer community in general, due to the introduction of a new multiple dialog grammar to further simplify the development of user interfaces.

Why do we call this grammar multiple dialogs? For the simple reason that it enables the developer to combine the power of each Genero dialog class within a single form; prior to this release each dialog had to be singular, that is, it produced its own form that deactivated any  preceding forms.

Use of multiple dialogs will improve the readability of your code and shorten it by as much as a third, leading to more intuitive user interfaces. Multiple dialogs is a much anticipated feature, don’t miss your chance to try it first!

Multiple dialogs
– an important extension to the family of input dialog statements: INPUT,DISPLAY ARRAY, MENU, CONSTRUCT and PROMPT.

By using this new DIALOG statement, it is now possible to combine the power of all these statements into a single form.


 INPUT BY NAME currtable 
 DISPLAY  ARRAY afields TO a.* 
 DISPLAY ARRAY cfields TO c.* 
 ON  CHANGE currtable CALL on_change_currtable() 
 ON ACTION right CALL  right(DIALOG) 
 ON ACTION allright CALL allright(DIALOG) 
 ON ACTION allleft CALL  allleft(DIALOG) 
 -- show all chosen columns in  the terminal 
 FOR i=1 TO cfields.getLength() 
 DISPLAY  sfmt("table:%1,column:%2",cfields[i].ctable,cfields[i].ccol) 

For a description of how DIALOG improves the user interface, refer to the Roadmap presentation below (slides 8-16).

The TRY exception handler – introduces a more elegant means of handling exceptions without introducing the GOTO statement.


TRY [ statement ...] [  CATCH [ statement ...] ] END TRY

Any statement in the TRY block will be executed until an exception is hit, after which program control is passed to the CATCH block. If no exception is hit, then program execution continues afterEND TRY. TRY statements can be nested.

The statement is a pseudo statement, because it does not instruct the compiler to generate code. It is therefore not possible to set debugger break points at TRY/code>, CATCH or END TRY.

Before TRY, the traditional mechanism of handling exceptions was via the WHENEVER ERROR GOTOstatement as follows:


< -- 4GL statements 
 GOTO no_error
 LABEL catch_error: 
 -- 4GL  statements catching the error 
 LABEL no_error:

WHENEVER ... RAISE statement
– This statement defines an alternate exception handling mechanism when not using TRY. If an error occurs, the current function will be returned and the same error will be encountered again. If the exception occurs in the main function, the exception cannot be processed by the caller function, so the Dynamic Virtual Machine (runtime system) will stop the program.

– to be used to send a specific action when the user double-clicks on a row in a TABLE or SCROLLGRID.

A new MS SQL SERVER NATIVE CLIENT DRIVER (SNC) – to be used with MS SQL Server 2005 instead of the MSV driver and ignores table columns of a given type in fgldbsch. Thefgldbsch tool now supports a new X conversion code to ignore table columns of a specific data type. This is useful for ROWID-like columns such as MS SQL Server's UNIQUEIDENTIFIER columns.

SQL INTERRUPT ON – is now supported for all databases providing a mechanism to cancel long running queries. In the past, this was only available for Oracle, PostgreSQL and Informix. This feature is now also supported by Genero db 3.80 (FY07 Q3), MS SQL Server 2005 (SNC driver only) and IBM DB2 UDB. Neither MySQL nor Sybase ASA provide an SQL INTERRUPT facility. When an SQL statement is interrupted, FGL sets SQLCA.SQLCODE to -213. See documentation (SQL Programming) for more details.

STACK TRACE – the class method base.Application.getStackTrace() returns the stack trace of the program flow. This can be useful for debugging applications.

The CLIENT SOCKET interface in channel – the base.Channel built-in class now provides a client socket connection with the openClientSocket() method.

N.B. this function is ONLY provided to establish a client connection to a server. Data flow is based on the current character set (locale) and only works with ASCII-based protocols or when the server uses the same character set as the application. See Channels documentation for more details.

NULL POINTER EXCEPTIONS – in order to avoid fatal NULL pointer errors caused by trying to call an object method with a variable that does not reference an object (ie. contains a NULL, error–8083), trap this exception with WHENEVER ERROR.

Click here for more details on these new features.

Genero Web Client v2.10

Major work has been undertaken to the  rendering engine of the Genero Web Client (GWC) in order to minimize the differences with the Genero Desktop Client (GDC) and support all widgets. In addition support is provided for the following features:

  • Multiple dialogs
  • An AJAX framework
  • Single Sign-On (SSO)
  • File transfer
  • User configurable forms for browser specific tuning:
  • Embed HTML and CSS code
  • Standard configurations provided:
    • ‘Web 2.0’: Internet Explorer, Firefox, Safari, Opera
    • ‘Mobile’: PDA, smartphone
  • All GDC widgets supported

N.B. .4st style files, COM objects and Canvas not supported

Genero Web Services v2.10

The Genero XML Extension Library (XML) - is a new feature providing classes and methods to perform low level functions:

XML manipulation with a W3C Document Object Model (DOM) API,
- XML manipulation with a Streaming API for XML (StAX),
- validation of DOM documents against XML Schemas,
- serialization of 4GL variables in XML,
- creation of XML schemas corresponding to 4GL variables.

Low-level XML over HTTP client communication (COM)

- The Genero Web Services COM library provides two classes: HTTPXmlRequest and HTTPXmlResponse to perform low-level XML over HTTP communications on the client side. This allows communication between applications using the core Web technology, taking advantage of the large installed base of tools that can process XML over HTTP as well as SOAP over HTTP.

- Specific streaming methods are also available to improve the communication by sending XML to the network even if the serialization process is not yet finished, as well as for the deserialization process.

Generating a low-level client stub from WSDL

- The fglwsdl tool generates all client stubs with the low-level HTTPXmlRequest andHTTPXmlResponse classes of the COM library to perform HTTP communications. The low-level generated stub also takes advantage of the streaming methods, if Document Style or RPC-Literalweb services are performed. In the case of RPC-Encoded web services, streaming is not possible because nodes can have references to other nodes in the XML document, requiring the entire document in memory to perform serialization or deserialization.

Generation of data types from XML schemas (XSD)

- Genero Web Services Extension provides an enhanced fglwsdl tool that is able to generate 4GL data types from an XML schema. The data types can then be used in your application to be serialized or deserialized in XML. The resulting XML is a valid instance of that XML schema, and validation with an XML ‘validator’ will succeed.
Best Regards,
Four Js Development Tools