GENERO Enterprise 4.00 – Available now

Irving, Texas – September, 28th 2021 – Four Js is pleased to announce a new Major Release of Genero Enterprise. The 4.00 release contains many new features that will improve your developer productivity, your applications, and the user experience with your applications.

The list of features highlighted in this announcement are not exhaustive. To find the complete list, please refer to the “What’s New” and “Upgrade” sections in each product’s User Guide. The “What’s New” section lists all the new features in the release. The “Upgrade” section lists product changes you should be aware of when upgrading to a new version.

Universal Rendering

Genero 4.00 standardizes on Universal Rendering (UR) as the user interface for all our front-ends. As well as ensuring a consistent user experience across all our front-ends, this will improve your developer productivity in only having to work with one rendering engine. Standardizing on Universal Rendering allows us to add more enhancements to your user interface tool kit (widgets, containers, attributes, presentation styles, and so on) that are then available to your developers to incorporate into your applications.

The Genero Desktop Client (GDC), Genero Mobile for iOS (GMI), and Genero Mobile for Android (GMA) front-end clients now solely use the Universal Rendering engine, which supersedes the native rendering engines previously provided. The native rendering engines are deprecated with this release. For desktop they continue to be supported in versions 3.10 and 3.20.



GMI (iPad Portrait)

GMA (Tablet Landscape)

Responsive Layout

Genero 4.00 contains a number of syntax enhancements that allows forms to be designed so that they respond to the form factor of the view.

Prior to this release, multiple form specification files (.per / .4fd) were usually needed to support the various form factors required for the deployment of today’s modern applications to desktops, tablets and smartphones. With Responsive Layout, only a single form definition file is necessary. Maintaining a single form greatly simplifies cross-platform screen development.

The STRETCH attribute

The STRETCH attribute can indicate that a widget / container stretch to fill the space available, and has been extended to many widgets and containers. In the two screenshots below, observe how the first field stretches to fill the space available.

Stretching within a Grid will maintain the alignment of widgets. Your form can be designed to stretch data-entry widgets and not stretch labels. In this example, the two columns stretch and stay aligned while the labels do not stretch.

The STRETCH attribute can also be used to indicate which columns stretch within a table. In this screenshot, the Name column stretches to fill available space.

The MEDIA (@) attribute

The media (@) attribute allows specified attribute values to change based on the rendering space available. For example HIDDEN@SMALL hides fields or columns when space is limited.

The FLIPPED attribute

The new FLIPPED attribute allows a TABLE to be rendered in a different format where cells in each row are packed vertically. This is a suitable design to view tables on smaller devices.

The ORIENTATION attribute

The ORIENTATION attribute has been added to VBOX/HBOX containers and allows the orientation to change on smaller devices.

The SPLIT attribute

The new SPLIT attribute allows HBOX containers to show only one container at a time when space is constrained; the user then swipes between adjacent containers.

Landscape – enough room to display both containers

Portrait – Only room to display one container, user swipes between containers

Core language

New syntax has been added to the core language that improves productivity, improves functionality, and includes concepts from other languages that developers will be familiar with.

  • The new Reflection API allows the developer to inspect and modify variables dynamically.  Using this API, the developer can now write more generic library code, reducing the number of lines of code in a Genero application and improving their productivity.
  • The new PACKAGE syntax allows program sources to be organized in a package of modules.  Combined with  IMPORT FGL, this allows your build process to omit the linking operation.  This also allows better code completion and syntax checking while both editing your code and at compile time, making your developers more productive.
  • Regular expressions are now catered for within the confines of the Genero language with the new util.Regexp class.  No longer do you need to use JAVA or C libraries to do advanced character string pattern matching and replacements based on regular expressions.
  • The new VAR keyword and the removal of the requirement to place variables, constant, and type definitions at the top of modules and functions improves developer productivity.  This allows variable, constant, and type definitions to be closer to where they are used.
  • Program variables can now be marked with a $ (dollar sign) in static SQL statements to distinguish them from SQL column names, i.e. SELECT * FROM tab WHERE id=$id As well as making the code easier to read for both the developer and the compiler, this results in improvements for code completion and real time syntax checking of column names and variable names inside static SQL statements.
  • Record usage has been simplified in both function parameters and returns and in expressions.  The use of .* is no longer required in a number of situations. This simplifies code and improves compatibility with code completion tools.
  • More syntax that developers will be familiar with from other programming languages has been incorporated in Genero, making it easier for developers to transition to Genero.
    This includes:

    • IN() operator, i.e. IF position IN("top","bottom") THEN
    • Compound assignment operators, i.e. LET x+=1
    • Raw string literals using backquotes as delimiters, i.e. `ab'cd"ef`

Language Elements for the User Interface

In addition to the new syntax for Responsive Layout, new syntax has been added to improve other elements of the user interface.

  • Dynamic dialogs now have the ability to do the equivalent of static dialog statements, via the addition of methods such as ui.Dialog.setDialogAttribute() and ui.Dialog.setActionAttribute(). Most syntax available in a static dialog should now be implementable in a dynamic dialog.
  • New desktopMultiWindow presentation style attribute to control where child programs are launched. Launch child programs in a separate window / browser tab so they can be placed in secondary monitors.
  • New presentation styles showGrid, alternateRows, rowHover improve the rendering appearance and performance of Table and Tree containers.
  • New presentation style attributes for Toolbar rendering that allows you to control position of toolbar and to have more control over how the content is rendered.
  • New AUTOHIDE attribute for Toolbars and TopMenus so that items are hidden if inactive instead of shown as disabled.
  • New keyword NOSWIPE to enable/disable swipe gestures.
  • ROWBOUND action attribute can be used with all front-ends.
  • The fglgallery built-in web component has a new display option FGLGALLERY_TYPE_SLIDESHOW to render multiple images as a slideshow

Genero Studio + Business Application Modelling (GST+BAM)

Genero Studio has been enhanced to support our Low-Code initiatives and the movement away from the linking phase of development.  We also continue to make enhancements to make your development team more productive in their editing and debugging of your applications.

  • Within Business Application Modeler (BAM), Code Events (introduced in Genero 3.20 and improved upon with this release) are the recommended method for adding custom code. They largely replace all use of the POINT and BLOCK method.  Code Events are edited as properties of Business Diagrams.  Working with Code Events makes the code easier to maintain for a developer.
  • Using IMPORT FGL to import modules and packages, rather than linking to libraries, is now recommended. The new Genero (No Link) build rules cater to those applications that do not require linking.
  • The Project View now has the concept of a Configuration Node that allows you to define multiple ways to run an application from within Genero Studio.  In a Genero (No Link) environment, this can include a property as to what module to find the MAIN program block, allowing you to incorporate different test modules in with your sources.  It can also be used to define different sets of command line parameters so that the developer can quickly execute the application using different options.
  • When debugging, a developer can now select what variables to fetch and only display these selected variables.  This improves the performance of the debugger, particularly with code that has a large number of variables.
  • Genero Studio provides a new option to convert the encoding of an file opened in the Code Editor.


Command lines tools such as fglcomp, fglform, fglrun have had options added to improve developer productivity.

  • When compiling, the output directory can now be specified by the use of new option -o / --output-dir i.e. fglcomp -o ../bin filename.4gl
  • When compiling, multiple @argfile arguments can now be specified, allowing you to incorporate some modularity in the use of the @argfile functionality.
  • Improve developer productivity by having case consistency in your code base, a new option in the compiler, -W case can be used to detect symbol names that do not match their definitions exactly, and the --fix-case option can be used to correct these instances.
  • In conjunction with the new syntax of prefixing program variables with $ in static SQL statements, a new option in the compiler -W column can be used to detect invalid column names in SQL statements. The --mark-host-variables can be used to inject the $ prefix into your code. With the new $ prefix in place, code completion and syntax checking can now function within static SQL statements.

SQL Databases

The database libraries shipped with Genero have been enhanced to support the latest releases of the databases we support.  Where possible, enhancements have been made to provide better emulations and to take advantage of new functionality available within each database.

  • Support for PostgreSQL version 13 and 14.
  • Support for Oracle version 21c.
  • Improved INTERVAL data type mapping with Oracle® DB.
  • Better SERIAL/BIGSERIAL emulation with PostgreSQL, using a RETURNING clause after INSERT statements. Native emulation now supports start values.
  • UTF-8 database collations in SQL Server CHAR/VARCHAR columns
  • Conversion of CHAR/VARCHAR/TEXT  to national character equivalent types with SAP HANA®, IBM® Netezza® and IBM DB2® LUW.
  • A new method base.SqlHandle.setParameterType() allows you to write improved generic code and be explicit about the datatype of an SQL parameter.

Genero Web Services (GWS)

Genero Web Services continue to have functionality added that improves both the developer experience creating web services as well as the functionality of the Web Service itself.

  • The format of the URLs used with RESTful web services has been modified.  The new format enhances the way that resources are found and includes the application configuration (.xcf) filename and an optional group name, similar to the URLs of web applications.
  • You can version your RESTful web services using the new WSVersion Versioning allows multiple versions of the same web service to be maintained with minimal coding, This minimizes the impact of upgrading on clients that consume a web service.
  • There is now support for all HTTP verbs including HEAD, OPTIONS, TRACE, and PATCH.
  • Error handling of RESTful Web Services has been improved so that error information can be returned to the client.
  • Code generated by fglrestful and fglwsdl now utilizes IMPORT FGL and does not require linking.
  • Named types are generated in OpenAPI specification based on the BDL TYPE keyword.

Genero Application Server (GAS) and Genero Application Server for Java (JGAS)

Genero Application Server 4.00 and Genero Application Server for Java 4.00 are compatible with HTTP/2.  Configuring your Web Server to use HTTP/2 will result in improved speed of pages loading in web browsers.

  • The license counting mechanism has been improved so that all applications started from the same browser count as one for licensing purposes.
  • A new monitoring concept has been added that allows you to monitor the performance of web services.  You can set alerts so that you can be notified if certain events occur with web services.  Data can be collected and you can retrospectively analyze the performance of your web services.
  • The management of reverse proxy servers, load balancers, and integrated cloud solutions has been improved to use X-Forwarded headers.

Genero Identity Provider (GIP)

The Genero Identity Provider (GIP) has been enhanced so that it can more readily be used in production environments. You can easily migrate from GIP 3.20 to 4.00 and change from SQLite to any other supported ODI database, without any data loss.

  • The GIP now supports any database engine supported by Genero.
  • Custom properties that can be retrieved by any application protected by the GIP can be set in the profile service by the administrator.

Genero Report Writer (GRW)

Improvements to Genero Report Writer have focused on the Genero Report Designer and the developer experience.

  • Expanded mode is a new view in the Genero Report Designer that allows the developer to view all containers, their parent-child relationship, and their layout direction.
  • Highlight Repeating Regions is a new view in the Genero Report Designer that allows the developer to identify repeating elements in a report.
  • The act of selecting a data object from the data view and dropping it onto a report has been reviewed. Report objects now include two new properties Field Name and Role that are populated when data objects are taken from the Data View and dropped onto a report. Changing the Field Name or Role will automatically modify other properties that were set when the object was originally placed on the report, an improvement on the previous actions of either having to delete the object and drop it back onto the report with new settings, or adjusting the related properties individually
  • There are PDF reports that require some pages in portrait and others in landscape. It is a common need for individual charts, images and tables that are wider than tall to be printed on landscape. Now, when generating a PDF, individual pages can be rotated. This allows the bulk of a report to be portrait, yet have an individual page to be landscape
  • The GS1 QR barcode (gs1-qr-code) is now available
  • GS1 Symbol Specification Tables as used by a number of different barcodes are now supported so that the barcode is rendered as per the GS1 standard

Genero Ghost Client (GGC)

The Genero Ghost Client has had functionality added that improves the testing process.

  • When recording an application log file, you can now capture the application state at any given point by taking a snapshot (a particular keystroke). When generating a test scenario, you can then use the --check-on-snapshot to only generate tests at the time a snapshot was taken.  This cuts down on the number of tests, as the generated code will only have tests for when you want a test to be taken rather than at each user interaction.
  • Stress testsperformed using the new ggc admin --instance-count and --instance-delay options allow you to run multiple instances of the same GGC test at the same time.
  • New methods allow you to get information about the Abstract User Interface (AUI) tree within your tests.
  • New methods allow you to provide at runtime some user data to adapt your test executions.

Genero Desktop Client (GDC)

The Genero Desktop Client (GDC) now uses Universal Rendering as its sole rendering option.

  • To facilitate debugging of Universal Rendering, the GDC can be configured to launch the Chrome debugger as soon as a webview is started.

Genero Mobile (GMI / GMA)

Universal Rendering is the sole rendering option available with Genero Mobile for iOS and Genero Mobile for Android.  The Responsive Layout initiatives mentioned above improve the Universal Rendering user experience in these smaller devices.

Genero Browser Client (GBC)

The  Genero Browser Client version number has been brought up to 4.00 to match the Genero Enterprise version number.  A number of the enhancements to GBC have already been mentioned above as part of Responsive Layout and the Language additions, and the License Counting enhancements mentioned in Genero Application Server.  There are a number of internal performance improvements, particularly within the Table container and around the typeahead concept; your end users should have a better user experience as a result.

  • The Application panel layout has been reviewed to better identify multiple applications and the stack of multiple windows in an application.
  • Messages and Errors can be dismissed by swipe gestures and by tapping anywhere in the box (as opposed to a tap of the cross icon).
  • A clipboard service has been created to better manage copy and paste operations.
  • The use of the new customization build tool “gbc build” that replaced the use of “grunt” has been further improved.

Four Js License Manager (FLM)

There is a new Four Js License Manager (FLM) 6.00 released at the same time as Genero Enterprise 4.00.  The licensing tools have been rebuilt in order to make several improvements in performance and functionality.

  • Improved logging
  • The movement of licensing information from fglprofile to the new fgllicense file, giving greater portability to fglprofile files.
  • With configuration, fglWrt and greWrt 6.00 are compatible with packages of BDL version 3.10 or higher.

Supported Versions

For the purposes of the Four Js Development Tools Service Level Agreement, this version 4.00 is officially the Current Version Support (CVS). Prior Version Support (PVS), defined as the prior 2 minor releases, is now defined as version 3.20 and 3.10. Customers using Genero Enterprise versions 3.00 and earlier are strongly encouraged to upgrade to 3.10 or later to receive maintenance and support. Due to the faster moving world of mobile environments, it is recommended that Genero Mobile development is always done on the latest version, Genero Mobile users should therefore migrate to Genero 4.00.