Irving, Texas – June, 26th 2019 –

GENERO Enterprise 3.20
available now

New features

The Universal Rendering Mode

“Universal Rendering mode” is the flagship feature in the 3.20 release. Currently we maintain four different GUI clients: Genero Desktop Client (GDC), Genero Browser Client (GBC), Genero Mobile for iOS (GMI), and Genero Mobile for Android (GMA). Native rendering on each of these clients introduces inconsistencies between the appearance of the same screen. In fact, not all GUI features are available across all 4 clients, now with the Universal Rendering they are.
Implementing four independent native renderers also creates a considerable amount of redundant engineering effort.
The new Universal Rendering mode gives you the ability to render the same screen identically across all four clients. At the same time it maintains your ability to access the individual GUI API’s via existing front-calls if need be. Below is a series of screenshots showing the same screen rendered in GDC, GBC, GMI, GMA

There are no significant code changes required for Universal Rendering mode. This is because each of the four clients uses the Genero Browser Client rendering engine . In the future we anticipate Universal Rendering mode becoming your default GUI, whether you are rendering to a desktop, browser, or mobile device.

Genero Browser Client

Genero Enterprise ships with version 1.00.53 of the Genero Browser Client.  The Genero Browser Client has its own release cycle with a new release approximately every six weeks. This allows more frequent delivery of new graphical enhancements that can be used both in a Web Browser and in the Genero Desktop, Genero Mobile for iOS, and Genero Mobile for Android clients via Universal Rendering.

Recent enhancements include (click to view)…

Genero Desktop Client

  • The Genero Desktop Client supports Universal Rendering.
  • The Auto-update feature has been enhanced for when the GDC installation requires administrator privileges on Windows.
  • The GDC Monitor can now be viewed in a number of languages

Genero Mobile for Android

  • Genero Mobile for Android supports Universal Rendering
  • Cordova Plugins are now distributed via a GitHub repository rather than with the product, thus allowing them to be maintained outside the normal release cycle
  • Push Notification now managed via Firebase Cloud Messaging (FCM)
  • 64bit Android now available to meet the requirements of Google Play Store

Genero Mobile for IOS

  • Genero Mobile for iOS supports Universal Rendering
  • Cordova Plugins ae now distributed via a GitHub repository rather than with the product, thus allowing them to be maintained outside the normal release cycle
  • Drag n Drop now available to reorder rows in a table using the native iOS user interface


The language syntax has been extended to include concepts seen in other languages. These will improve the functionality, the readability of your code, and make it easier to transition to Genero from other languages.

These concepts include:

  • Method declaration, to define functions acting on a user-defined type e.g.
    TYPE rectangleType RECORD
          height, width FLOAT
    FUNCTION (this rectangleType) area() RETURNS FLOAT
        RETURN this.height * this.width
    DEFINE r rectangleType
    LET r.height = 3
    LET r.width = 4

    DISPLAY r.area()    # will display 12

  • INTERFACE typeis a way to achieve polymorphism within the Genero language.  An interface describes the behavior of a type, by declaring the list of methods that can be called for associated types.  The code using a variable declared with as an interface can then act on different typed variables for which these methods exist e.g.
    TYPE shapeType INTERFACE
         area() RETURNS FLOAT

    DEFINE r rectangleType
    DEFINE c circleType

    LET s[1] = r
    LET s[2] = c

    FOR i = 1 TO s.getLength()
       DISPLAY s.area() -- calls appropriate area method
  • trimWhiteSpace() : New methods to trim all white-space, the existing family of trim() methods only trim the space character which is inconsistent with other languages  e.g.
    DEFINE s STRING = "nt Some text nt"
    DISPLAY "["||s.trimWhiteSpace()||"]"
    -- displays without tabs or newlines “[Some text]”
  • Passing records by reference to functions now available through the use of a new keyword, INOUT.
    Simplifies code and reduces memory footprint e.g.
    FUNCTION init(r RECORD INOUT) # new keyword
    LET = 0
    END FUNCTION    # note: no RETURN required at end
    LET = 100
    CALL init(r)    # note: no RETURNING or .*
    DISPLAY # will display 0
  • Named parameter calls : When calling a function, values can be preceded by the parameter name,
    therefore making the code easier to read e.g.
    CALL ch.openClientSocket(
         host: "localhost",
         port: 4711,
         mode: "u",
         timeout: 0)
  • Support for circular dependency of modules with IMPORT FGL
  • RETURNS () : Can now specify that a FUNCTION explicitly RETURNS no parameters, and therefore generate an error at compile time if a developer attempts to return a parameter.  You can now add a RETURNS clause to every function and tighten your code e.g.
         RETURN TRUE  # this line will fail at compile time
  • Variable initializers: DEFINE instruction now allows you to assign an initial value to variables,
    therefore condensing your code e.g.
    DEFINE flag CHAR(1) = “Y”
    • SQL Databases

      • Support for recently released database servers Oracle 18c and PostgreSQL 11
      • IBM Informix IDS 14.10 with SDK Client 4.50 is now supported
      • Support of INFORMIX Trusted Connections
    • New Tools

          • A code beautifier tool to reformat .4gl source modules and improve the readability and consistency of your .4gl sources. It will include functionality for case, indentation  and white-space.

            main                     |  MAIN
            call foo()               |      CALL foo()
            IF level1 THEN           |      IF level1 THEN
            DISPLAY “foo”            |          DISPLAY “foo”
            IF level2 THEN           |          IF level2 THEN
            display “bar”            |              DISPLAY “bar”
            END IF                   |          END IF
            END IF                   |      END IF
            end main                 |  END MAIN

                              without indentation                              with indentation


      • REST high level services following the openapi specification:
        The Genero Web Service engine has been enhanced with a mechanism to ease development of a high level REST web service. You can implement RESTful Web services using function attributes.
        PUBLIC FUNCTION add(
             a INTEGER ATTRIBUTE(WSQuery)
             b INTEGER ATTRIBUTE(WSQuery),
            RETURNS (INTEGER)

    is called by http://host:port/gas/ws/r/MyService/add?=a=3&b=8

      • Genero Web Service provides a new tool called fglrestful to generate Genero stub files from an openapi specification.
        You can refer the following site to get more information :
        Openapi is a de-facto standard to describe RESTful web services.

      • XML serializer is case sensitive
        From FGLGWS 3.20 on, the XML serializer is case sensitive, same as the JSON serializer. This means that the serializer uses the case of the variable name as defined in the 4GL file.


In Genero 3.20, we will also introduce an Identity Provider integrated to the GAS and ready to use with minimal settings. This will bring authentication and authorization mechanism to your apps. Genero Identity Provider relies on the Genero Application Server, SSO feature, OAuth standard and OpenID-Connect standard.


  • You now have an autologout of the authentication server when a Web application is closed.
  • A new element called END_URL has been added to the APPLICATION element to specify an URL that the user agent redirects to at end of the Web application.
  • A new Concat operator on the xcf ENVIRONMENT_VARIABLE element allows to concatenate environment variables such as FGLPROFILE or FGLLDPATH.


  • GGC is now a centralized backend to provide better load testing.
    In Genero 3.20, we reviewed the GGC design to make this use case more efficient. BDL scenarios will no more instantiate directly GGC through the Java bridge but will connect to a GGC backend using channels.

    The GGC v1 has been removed from the FGLGWS bundle. When migrating to GGC v2 from GGC v1, you will need to review your scenarios source code or regenerate them from GUIlogs.

  • New client features available in your test scenarios
    • Multi row selection
    • Matrix
    • Builtin function call such as get_file and put_file
    • Implement your own function call
    • SSO handler for Genero Identity Provider


  • Remote development with local sources.
    Genero Studio 3.20 provides a new remote development architecture, where sources are local to the workstation and synchronized to the server for compiling and run. This architecture provides better performances when working remotely on slow networks.
  • Code quality tools
    New quality control tools help teams to keep their code as ‘state-of-the-art’, consistent and error free by providing compile time checks directly while coding. Each developer will be able to maintain good coding practices defined by the team. The tool will:

    • Enforce coding conventions : function and variable naming rules …
    • Detect potential errors
    • Detect deprecated syntax
    • Guide during migration process
  • New Business Application Modeling templates
    New BAM templates include enhanced data modelling for reporting data with the addition of aggregates, advanced parameter passing, column aliases, number of occurrences, ordering of data sources and the ability to enter custom SQL. In Forms and Web services, it now support TEXT & BYTE fields.
    Furthermore, it also provides a new ‘events’ mechanism as an alternative to defining custom code inline of the source code by hand . These new events isolate the custom source code in a separate file making it less dependent on the generated code and more readable.
  • Form Designer : new STACK container
    The new experimental STACK layout is now available in the form designer using a new STACK container. The STACK container can contain FOLDER, GROUP or TABLE containers.
    STACK allows the developer to list the items to appear, and then the front-end client will auto-arrange the fields (and a title), based on the native front-end and space available.
    Existing text forms (.PER) can of course be imported to the form design to switch to graphical design.
  • Exporting as .PER text form for any form is also now available.
    Other enhancements of Form Designer include:

    • improved Copy/Paste management
    • previewer includes toolbars and topmenus
    • Fontawesome images support

  • New Dark theme
    As dark themes gain popularity with the Windows 10 October release and its introduction in macOs 10.14, Genero Studio adds a new dark theme as well for the comfort of your eyes.
  • GBC customization made easy
    Genero Browser Client customizations can now be run and packaged in an uniform way when Universal Rendering is set. The customization will be used during development no matter if Application Server is used or not and no matter the front end (GDC, GBC, GMA, GMI). It will also be packaged as a default in Mobile apps (Android or iOS)


  • Ergonomics enhancements : The report designer benefits from a few but important enhancements to make the use of the design view more intuitive.
    • Sizing handles were simplified by getting rid of the 2 modes and directly provide handles to resize either by keeping the aspect ratio or not.
    • Table Control has been enhanced to be able to select the table from the design view. It permits direct access to table properties and adds new actions to insert new columns and rows directly from the design view.
  • In the design view, only containers where drag ‘n’ drop is possible are highlighted

  • Header/Footer design has been made clearer by displaying only one of the page types (first, odd, even, any, last…) at the time as headers and footers
  • Paragraph and rich text : A new paragraph container provides simplifications in the layout, permitting the use of new line, non-breakable spaces and auto-wrap of text without the need of sub-containers as layout nodes. Also, the text now allows rich text (fonts, colors, bold, italic, underline…) in a single text object.
  • New DateFormatBox object: In order to improve the date formatting options, the Report Writer introduces a new DateFormatBox drawable object in the designer and new RTL expression classes to manage dates and calendars. Also, when producing Excel documents, the DateFormatBox provides a better export of dates as they are now recognized as cells of Date type in Excel with the appropriate formatting.
  • Data Designer enhancements: The data designer permits using custom SQL to enter advanced SQL queries.
  • Multiple REPORTs in one design: When gathering data for reports, the REPORT instruction permits splitting the code into reports and sub-reports. This is to take advantage of the integrated sorting and grouping of the REPORT instruction. However, this introduces a constraint in the report design: each REPORT instruction requires a separate graphical design. With the multiple REPORT feature, the user now has the choice of designing all in a single report design and hence provide a better overall view of the document.
  • Simplified setup: The Genero Report Engine setup via the reporting API is now simplified by providing default configuration. The GRV for HTML5 (aka. Web Viewer) is now preconfigured for applications running with the GAS. The distributed mode, which is the preferred mode for running the Report Writer in production, can now be activated with an environment variable GRESERVER without requiring a change in the source code
  • WYSIWYG Excel: The production of Excel documents has been reviewed to optionally provide a better WYSIWYG rendering of the document. The layout is now closer to the PDF and displays borders, background colors and could eventually be printed with a better visual aspect, even though is it not the recommended format for printing.

You can refer to the “What’s new in 3.20” and “Upgrading” section of ALL of our products documentation to get more detailed information about these functionalities and others.

These packages are now available from the web site

 Four Js Genero customers with valid maintenance contracts have free access to the new releases.

Best Regards,
The Four Js Development Team