Genero 2.20 – Cool features for hot apps

Irving, Texas – April 16, 2009 — Four J’s Development Tools Inc. announced today Genero 2.20 – an innovative development and deployment infrastructure for mission critical business applications. This much anticipated release unleashes many new features designed to make ‘best-of-breed’ domain-specific applications.

By enhancing the end-user experience as well as greatly improving the scalability, security and interoperability for ‘Web 2.0‘ developments, Genero 2.20 is a ‘must have’ for developers’ 2009 development schedules. A brand new Java Interface provides tighter integration with other applications especially within a Service Oriented Architecture (SOA) framework.


Table of contents

The User Interface

The TreeView container
Phantom fields
Multi-row list selections
Sorting INPUT ARRAY columns
Picture Flow
Embedded browser
New look ‘n’ feel styles
Qualified Local Actions
INFIELD clause in ON ACTION interactive block
Spell checking in TEXTEDITS
Search in TEXTEDITS
The traditional user interface mode
Other Enhancements

Programmatic Interface

The Java Interface
New built-in data types
New database drivers
Private functions
High-precision math functions for DECIMALs
Other enhancements

Genero Web Services 2.20.04

Language extensions
Miscellaneous

Genero Application Server 2.20.06

Genero application management
Web server integration
Genero Desktop Client HTTP connection management
Web application management

Four J’s License Manager 5.10.3u
Packaging and dependencies

The User Interface

The TreeView container

TreeView is a Business Development Language (BDL) container enabling tree widget structures for the desktop (GDC) and web (GWC) clients. Tree views are implemented using the DISPLAY ARRAY instruction in combination with a form specification file that is bound to a TREE container with specific attributes. Tree view containers are very similar to TABLE containers, except that the first columns are used to display a tree of nodes on the right of the widget:

A sample screen form with TreeView attributes:

LAYOUT
GRID
{

Tree
[name                      |desc     ]
[name                      |desc     ]
[name                      |desc     ]
[name                      |desc     ]
[name                      |desc     ]

}
END
END
ATTRIBUTES
TREE tv : mytree,
PARENTIDCOLUMN=parentid, IDCOLUMN=id,
EXPANDEDCOLUMN=expanded, ISNODECOLUMN=isnode;
EDIT name = FORMONLY.name, IMAGECOLUMN=image;
PHANTOM FORMONLY.image;
PHANTOM FORMONLY.parentid;
PHANTOM FORMONLY.id;
PHANTOM FORMONLY.expanded;
PHANTOM FORMONLY.isnode;
EDIT desc = FORMONLY.description;
END
INSTRUCTIONS
SCREEN RECORD sr( FORMONLY.* );
END

The above screen array produces the following display:

Figure 1. Resulting TreeView output

This creates endless possibilites for creative programming. Below is a sample iTunes® viewer embedded into a Genero program:

Figure 2. Sample iTunes TreeView rendered with the GDC


Figure 3. Sample iTunes TreeView rendered in AJAX with the GWC


Figure 4. Sample iTunes TreeView rendered in XUL with the GWC

[back to “Table of contents”]

PHANTOM fields

The PHANTOM keyword is a new type of form field. Phantom fields are used to define screen-records or screen-arrays, but are not used in the LAYOUT section of the form. Phantom fields are especially useful when implementing TREE containers.

Example:

SCHEMA stores
LAYOUT
GRID
{
Num      Last name
[c1      |c2                         ]
[c1      |c2                         ]
}
END
END
TABLES
customer
END
ATTRIBUTES
EDIT c1 = customer.customer_num;
PHANTOM customer.fname;
EDIT c2 = customer.lname;
PHANTOM customer.company;
END
INSTRUCTIONS
SCREEN RECORD sr(customer.*);
END

[back to “Table of contents”]

Multi-row list selections

DISPLAY ARRAY can now handle multi-row selections.

Figure 5. A muli-row selection in a DISPLAY ARRAY

[back to “Table of contents”]

Sorting INPUT ARRAY columns

Rows may now be sorted during INPUT ARRAYs as well as DISPLAY ARRAYs.

Figure 6. Sorting in an INPUT ARRAY

[back to “Table of contents”]

PictureFlow

Take advantage of the latest PictureFlow style within the TABLE widget to create ‘cool’ interfaces quickly.

Usage:

Users can now make selections via an animated transition effect; the first column of the array is used for the image file name and the rows are sortable with INPUT ARRAY and DISPLAY ARRAY.

Figure 7. PictureFlow – cool styles with existing business logic

[back to “Table of contents”]

An embedded browser

In the past, TextEdits were used to display html data, but they were unable to perform the function of a real bowser. With the styleAttribute

imageContainerType

‘image’ set to "browser", your image container becomes a browser. Instead of setting an image name, set a URL and embed a browser in the heart of the application.

Figure 8. Embedded access to Google® Maps
N.B.
This feature uses the WebKit Open Source project and as such, is not under Four J’s direct control. This kit displays rich text and HTML extremely well, but may exhibit problems with ‘complex’ sites. Important limitations to note are a lack of browser ‘plug-in’ support for Flash, Java and Active X. Future versions will support these features.

[back to “Table of contents”]

New look ‘n’ feel styles

These new

"lookAndFeel"

style attributes allow you to set the style of any Genero Desktop Client application to ‘Vista’, ‘XP’, ‘.netOffice’, ‘Motif’ and many others at the drop of a hat. The default setting is that of the underlying platform being used.

Figure 9. A ‘Vista’ style attribute

Figure 10. A ‘.Net Office’ style attribute

[back to “Table of contents”]

Qualified Local Actions

The Genero Desktop Client may now create “qualified local actions” enabling developers to create ActionViews bound to a specific screen record.

What is a .Local Action.?

A “Local Action” is a mechanism within the Genero Desktop Client that enables or disables tasks that are bound to ActionViews such as toolbars, context menus, buttons etc. that are executed on the user.s workstation.  They are .actions. that are .local. to the end-user, hence their name. These tasks can be for example: .copy., .cut., .paste. and so on. A simple action could be “go to the next row for current array” bound to a button labelled .next row..

Qualified Local Actions

In this release, Genero takes this concept one step further and introduces the notion of .qualified. local actions. That is, the ability to perform an action with a .qualifier.. Now the action bound to the button can more specific to a given context: “go to the next row for array Customers” or “go to the next row for array Orders“. The associated button may now be labelled .next customer” or .next order. and the action performed without the need to write a single line of BDL code, unlike prior releases.

Figure 11. Qualified Local Actions

[back to “Table of contents”]

INFIELD clause in ON ACTION interactive block

The ON ACTION interactive block has been extended with a new INFIELD field-name clause – useful in qualified local actions (see above) – to automatically enable/disable an action when entering/leaving a specified field.

[back to “Table of contents”]

Spell checking in TEXTEDITs

A spelling checker is now included in the TextEdit widget. Using the LGPL Hunspell spell checker found in Microsoft® Office and Mozilla; dictionaries may be downloaded for many different languages. Genero Desktop Client will underline unknown words, and a right click will provoke a ‘pop-up’ with a list of suggestions.

Figure 12. A ‘right click’ within the TEXTEDIT pops up the spell checker

[back to “Table of contents”]

Search in TEXTEDITs

Provide a search capability within the scope of a TextEdit by pressing . This feature is enabled by the “integratedSearch” style.

Figure 13. A ‘right click’ within the TEXTEDIT pops up the spell checker

[back to “Table of contents”]

The traditional (‘compatibility’) mode

There is still a requirement to use character based user interfaces within Genero – either because the end-user client device does not support graphics (as in the case of a cash till or airline reservation application) or because there is a need to quickly migrate a legacy application from Informix 4GL or Business Development Suite. Genero supports two mechanisms for these cases: a ‘console’ mode for use with ‘dumb’ terminals or ANSI 3.64 emulations and a traditional sometimes called ‘compatibility’ mode to get the same rendering as with the BDS/WTK front-end.

Console mode

Console mode is set on a per user basis with the environment variable FGLGUI=0. This mechanism is more familiarly known as the Text User Interface or TUI and was designed for “dumb” terminals.

Traditional mode

Traditional mode exhibits the same behaviour as the ‘WTK’ interface and is set with the FGLPROFILE entry:gui.uiMode = “traditional”

[back to “Table of contents”]

Other enhancements

There are many other useful user interface improvements in Genero 2.20. Click on an item below to learn more:

  • QT4 support – brings better integration with Windows, MacOSX, Gnome, KDE desktops,
  • Scalable Vector Graphics format support for improved graphics resolution,
  • Image Cache mechanism for improved performance,
  • Embedded Genero Report Viewer for streamed, attractive business reports,
  • New frontend functions calls
  • New enhancements in widgets styles
  • Other presentation style enhancements
    Beyond the Picture Flow styles, other presentation styles have been extended:

    • BUTTON form items get a new “buttonType” attribute to define the rendering of the button.
    • MENUs created with the popup option can be placed with the “position” attribute.
    • TABLEs can use the new “tableType” attribute to render data in different ways (picture flow).
  • Front-End Call enhancements
    Frond-End Functions have been extended:

    • New “getwindowid” function in the standard module to get the system window manager id of a window.
    • The “feinfo” function in the standard module has been extended to query the workstation system version, number of screens, and screen resolution.
    • New “launchurl” function in the standard module to open a given url (http, mailto…) with the default installed url handler (e.g. your default browser for http, default mailer for mailto…).
  • New contextMenu action default attribute
    A new Action Defaults attribute named “contextMenu” has been added to allow you to specify whether the menu option is visible in the default context menu. The default value is “yes” – the option is visible whenever the action is visible.
  • New IMAGE attribute in form LAYOUT element
    The LAYOUT element of a form definition can now use the IMAGE attribute to define the icon to be used for the parent Window. This is especially useful in a container-based application to distinguish child programs inside the container.
  • Monitor and shortcut management
  • HTTP protocol
    • Better reliability
    • HTTP connections now count licenses in the same way as a GDC session with an SSH connection

[back to “Table of contents”]

Programmatic Interface

The Java Interface

Import Java classes for instantiation from within Genero programs.

Purpose

The Java Interface opens access to an extensive catalog of free and commercial Java programs as well as providing a seamless mechanism to integrate within corporate networks and SOAs. Java methods can be called in line from Java objects referenced within BDL along side native BDL typed values such as INTEGER, DECIMAL, CHAR.

Example use of the Javatm Interface:

$ cat pattern.4gl
{
* Output:
Match: www
Match: java
Match: s
Match: com
}

IMPORT JAVA java.util.regex.Matcher
IMPORT JAVA java.util.regex.Pattern

MAIN
-- Match lowercase words.
DEFINE mat Matcher
DEFINE pat Pattern
LET pat = Pattern.compile("[a-z]+")
LET mat = pat.matcher("www.java2s.com.");
WHILE mat.find()
DISPLAY "Match: ", mat.group()
END WHILE
END MAIN


$fglcomp pattern && fglrun pattern
Match: www
Match: java
Match: s
Match: com

Not supported with the Java Interface

  • Use of generic classes such as java.util.Vector
  • Calls to BDL (FGL) modules from within a Java program
  • Sharing database connections between Java and Genero BDL
  • Use of Java Graphical Objects within Genero BDL forms

[back to "Table of contents"]

New built-in data types

This release introduces three new built-in data types:

  • TINYINT (8 bit signed integer)
  • BIGINT (64 bit signed integer)
  • BOOLEAN (8 bit boolean TRUE/FALSE)
  • The BIGSERIAL and SERIAL8 Informix specific types are also supported

[back to "Table of contents"]

New database drivers

The following database drivers are now supported:

  • dbmmys60x for a MySQL 6.0.x client (2.20.01)
  • dbmsqt3xx for an SQLite 3 library (2.20.01)
  • Support for TEXT/BYTE in MySQL driver
    It is now possible to use TEXT/BYTE data with MySQL with the dbmmys drivers.

[back to "Table of contents"]

Private functions

One of the idiosyncrasies of the Informix® 4GL language is the global scope afforded to symbol and report names within functions. This results in developers using unique names and the creation of conventions such as pre-fixing a function name by a module name. The introduction of thePRIVATE keyword in this release removes this limitation by granting local scope to symbol names within the function containing the declaration.

Usage:

PRIVATE FUNCTION Checkname(name)
...
END FUNCTION

[back to "Table of contents"]

High-precision DECIMAL math functions

The following built-in functions have been added for precision math computing with DECIMALs:

  • FGL_DECIMAL_TRUNCATE()
  • FGL_DECIMAL_SQRT()
  • FGL_DECIMAL_EXP()
  • FGL_DECIMAL_LOGN()
  • FGL_DECIMAL_POWER()

[back to "Table of contents"]


Other enhancements

Automatic source documentation generator

The fglcomp compiler has been extended with a new --build-doc option for generating BDL source documentation.

 

MAN pages for BDL (FGL) commands

On UNIX platforms, you can now use man pages for BDL (FGL) tools like fglcomp and fglform:

 $ man fglcomp

Note that on some platforms, you must set the MANPATH environment variable to $FGLDIR/man.

Adding a timestamp to 42m modules

fglcomp has a new option (fglcomp --timestamp) to write the compilation timestamp to the generated 42m p-code module. If present, fglrun -b returns the timestamp. Use compilation timestamps only if really needed; every new compiled .42m module will be different, even if the source code has not changed.

Disabling Front-End protocol compression

Front-End protocol compression can now be disabled with a new FGLPROFILE entry. This is especially useful in fast networks to save processor time.

 gui.protocol.format = "block"

New environment variable for program resource files

To work around conflicts with the Informix database path specification in DBPATH, you can now use the FGLRESOURCEPATH environment variable to specify search paths for program resource files like forms.

New built-in functions to handle text selection

New built-in functions are now available to control the part of the text that is selected in the current field:

  • fgl_dialog_getselectionend()
  • fgl_dialog_setselection()

Database user authentication callback function

When using the DATABASE instruction, it is now possible to define an FGLPROFILE entry specifying a callback function, which returns a username and password to be used for the database connection.

Getting the current active dialog

A new class method is now available to get the current active dialog: ui.Dialog.getCurrent().

SAX Document Handler specification in START REPORT

The START REPORT instruction now supports a new clause to specify the XML SAX Document Handler to process XML output with the TO XML HANDLER syntax.

Automatic Code Completion with VIM

If you have vim 7 installed, you can now use .per and .4gl code completion within your preferred editor.

Report definition file generation

Use the --build-rdd option to generate a report definition file (.rdd)

Improved FGLSQLDEBUG output

When setting the FGLSQLDEBUG environment variable with this release, the SQL command header, the command name and the current BDL source line executed BEFORE entering the ODI driver are all displayed. If the driver code crashes or stops the process with an assertion, it is now easy to identify the last executed SQL instruction. Prior to this release, SQL debug output would only be displayed if the ODI driver code was executable without a fatal crash. Additionally, ODI driver specific debug messages are now displayed AFTER the SQL command header to make the debug output more readable.

[back to "Table of contents"]

Genero Web Services 2.20.04

This release introduces a new Security API based on the W3C XML-Security specification.

[back to "Table of contents"]

Language extensions

[back to "Table of contents"]

Miscellaneous

  • The fglwsdl tool will generate WSDL based stubs using the new BDL types BOOLEAN, TINYINT and BIGINT

Click here for more information on GWS 2.20.04.

[back to "Table of contents"]

Genero Application Server 2.20.06

This relese introduces a new "connectors" framework to integrate with web servers anddramatically improve scalability and performance.

 

[back to "Table of contents"]

Genero application management

  • Genero Application monitor enables the monitoring of running applications and services
  • Better Picture Component definition (PATH as.xcf element) to ease deployments

[back to "Table of contents"]

Web Server integration

  • A multi-threaded core scales the Genero Application Server (GAS) to fluctuating incoming demand.
    • This release represents a major architectural step forward, providing a solution that allows tight gasd integration in standard application servers, and an easy deployment process. Multi-threaded capabilities adapt gasd capabilities to the Application Server.

Figure 14. A multithreaded GAS engine
improves throughput and deployment flexibility

    • This architecture is based on a core reusable component, the GAS Engine, that is encapsulated to fit the different targeted servers - IIS or CGI-based Web servers. The GAS Connector is a pluggable component, available for each targeted application server. Interaction between the core GAS Engine and the different GAS Connectors is centralized in two interfaces:
      • the GAS Engine Interface - informs the GAS Engine of a pending HTTP request
      • the GAS Container Interface - informs the GAS Connector of a computed response for a given pending HTTP request
    • The connector adapts the 'external world's' model to the 'GAS model', so respecting the current GAS events-driven architecture. Genero Application Server is instantiated depending upon the receiving environment
  • New pluggable Genero Application Server component for IIS : GAS ISAPI
  • New pluggable Genero Application Server component for web servers : GAS FastCGI

[back to "Table of contents"]

Genero Desktop Client HTTP connection management

  • HTTP connections now count licenses in the same way as a GDC session with an SSH connection
  • GDC 2.20 Active X is now pre-installed and ready for use.

[back to "Table of contents"]

Web application management

  • Treeview support and other UI improvements described in the section on User Interface
  • A new XUL Snippet Set
    • The new XUL snippet set offers a desktop-like rendering. This snippet activates when used with a Prism user agent. You can also activate XUL snippets in any Firefox browser using the DUA_XUL output map.

Figure 15. The XUL snippet offers a desktop rendering within a browser

  • A new frontcall framework allowing to support all BDL frontcalls or implement your own set.
  • SVG and SWF (flash) support for image widget
  • PDA and PAGE Snippet sets are merge in a new single BASIC snippet sets

Click here for more information on GWS 2.20.06.

[back to "Table of contents"]

Four J's License Manager 5.10.3u

License Manager provides a network management solution for all types and versions of Genero licenses. By centralizing license management across a network in this way, updates are simplified, usage is mutualised ensuring that every available license is accessible to all users.

With this release, License Manager requires an additional maintenance key, which controls whether the license is under maintenance or not. In order to run Genero 2.20, License Manager 5.10.3j or greater must be installed. Learn more.

[back to "Table of contents"]

Packaging and dependencies

  • Genero BDL 2.20.04 (FGL)
  • Genero BDL 2.20.04 including Web Services (FGLGWS)
  • Genero Desktop Client 2.20.10 (GDC)
  • Genero Application Server 2.20.06 (GAS)
  • License Manager 5.10.3j or greater

Best Regards,
Four J.s Development Tools

[back to top]

® iTunes is a registered trademark of Apple Inc.
Google is a registered trademark of Google Inc.
Informix is a registered trademark of International Business Machines Corp.
Java is a trademark of Sun Microsystems Inc