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.
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
The Java Interface
New built-in data types
New database drivers
Private functions
High-precision math functions for DECIMALs
Other enhancements
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
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
Multi-row list selections
DISPLAY ARRAY can now handle multi-row selections.
Figure 5. A muli-row selection in a DISPLAY ARRAY
Sorting INPUT ARRAY columns
Rows may now be sorted during INPUT ARRAYs as well as DISPLAY ARRAYs.
Figure 6. Sorting in an INPUT ARRAY
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
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.
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
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
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.
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
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
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”
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
- Better HTML formatting (including hyperlinks) support in labels, edits, textedits
- Folder tabs position
- Action frame decoration
- MDI in a tabbed container
- Other presentation style enhancements
Beyond the Picture Flow styles, other presentation styles have been extended: - 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
- Customized login box
- Command Line new options to ignore settings, record logs
- Import and export of shortcuts
- Read Only stored settings option in “Advanced”
- HTTP protocol
- Better reliability
- HTTP connections now count licenses in the same way as a GDC session with an SSH connection
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: comNot 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
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
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.
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
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()
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.
Genero Web Services 2.20.04
This release introduces a new Security API based on the W3C XML-Security specification.
Language extensions
- XML Signature API
- XML Encryption API
- String encryption and decryption
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.
Genero Application Server 2.20.06
This relese introduces a new "connectors" framework to integrate with web servers anddramatically improve scalability and performance.
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
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
- 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:
- New pluggable Genero Application Server component for IIS : GAS ISAPI
- New pluggable Genero Application Server component for web servers : GAS FastCGI
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.
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.
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.
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
® 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