Wednesday, 29 October 2014

Rapide Extension Library for JasperReports

We have recently been working on a project that is migrating an application from MVS to the web. The existing application has a number of reports that are developed as COBOL EABs and they wanted to migrate them to use the opensource JasperReports library.

To assist in running a JasperReport from Rapide and avoid the need to code the report execution in Java, we have developed a new Rapide Extension Library. This allows you to create a JasperReport object, pass in parameters and run the report to produce the output in a variety of formats, for example PDF, HTML or XML. The DataSource provided for the report can either be a JDBC datasource or Rapide can pass records directly to the report from Gen views.

Below is an example of a PDF report produced using JasperReports. The report design was produced using the Jaspersoft Studio which is an Eclipse tool that is a powerful and easy to use report designer. The only other thing needed to produce the report was a few lines of Gen action diagram code that invokes the report via the Rapide Extension Library.


We are also thinking about a name for this technology and are considering calling it Report Object Binding for JasperReports, or ROB Jasper for short ;-)


Tuesday, 7 October 2014

Runtime Translation Facility

A key aspect of the design of Rapide was to enable the development of multi-lingual applications without needing to design a separate window design for each language. This becomes especially important when you want your application to support many languages and the translation will probably be performed by different people and who will not be skilled in CA Gen development.

The solution we adopted was to give each string (literals, prompts, exit state messages, etc.) a string ID and then externalise the actual string values into a separate string property file which could be translated into multiple languages and then the correct translated string file used at runtime based on the user's locale.

Because the strings are stored outside of the model, the translations can be performed by someone who has the necessary translation skills without also needing to use the Gen toolset.

A string translation tool is available with Rapide that can be used by a non-developer, but one issue with this is that the strings are not presented in the context of the application which can make translation difficult if you cannot see the strings on the actual window.

To make it easier to translate the application, Rapide now provides a Runtime Translation Facility.

When enabled, the Rapide runtime provides a right-click facility when you are actually executing the application in a browser or desktop environment on most types of controls in order to dynamically enter translation strings for the item clicked on.  

This can vastly simplify the process of translation for the majority of UI designs, providing an intuitive method of translating.

In the example below, whilst the user is running in a French locale, the text is only available in English.

With the Runtime Translation Facility enabled, they can right-click on a text string and provide the translation.


The window immediately reflects the changed string. These runtime translations are stored in a file containing the changed strings which can then be merged back into the translated strings in the development machine to become part of the next release of the application. 




Thursday, 4 September 2014

Variable Height Grid Cells

Whilst developing a sample chat application to demonstrate push notification on mobile devices, I thought it would be a nice touch to have the messages displayed in variable height cells with the option to change the background colour to indicate who wrote the message.

Rapide now implements this feature for grid style listboxes. The grid cell height automatically adjusts to the content whilst the background colour is set using a an attribute value in the group view.


Friday, 22 August 2014

Push Notification for Mobile Devices

The next release of Rapide will support Push Notification for mobile devices. Push Notification allows your device to receive messages via the Apple Push Notification service (APNs) for iOS and Google Cloud Messaging (GCM) for Android.

If the App is not active the device can display a notification message in the standard notification area and for iOS also set a badge number and play a sound to notify the user that some action is required in the app.



Message received for the sample RapChat app on an iPAD. Clicking on the message opens the app.

Message received for the sample RapChat app on an Android tablet

Swipe down the message area. Clicking on the message opens the app.



Friday, 8 August 2014

Badge Numbers on iOS

On iOS devices, it is common to use a badge number to draw the user's attention to items that need actioning, for example unread emails. A Rapide app can now set and clear a badge number via the Rapide mobile API.


Friday, 4 July 2014

Pull to Refresh Control

  For mobile platforms, a common user interaction to refresh a list of data is to pull down from the top of the listbox. 

The next release of Rapide will support a "Pull to Refresh" action for listboxes and row templates. When the user pulls down from the top of the listbox, a specified event is triggered in the procedure step and a message plus spinning icon informs them that the data is being refreshed.



Thursday, 3 July 2014

Paged Navigation

The next release of Rapide will support an enhanced style of navigation called Paged Navigation.

This style is very common on mobile devices, with the example below shows the navigation between four pages. Notice how the top banner of the page indicates the current page title and also has a button to return. 




The runtime automatically keeps track of the previous page without the need for any additional code to process the return flow to the previous page when the user presses the back button. 

The behaviour is customised to the standard behaviour of each platform by using native controllers for each platform.

On iOS Paged Navigation is implemented using a View Controller and a Navigation Bar to display the page title and back button. In addition you can include toolbar buttons onto the Navigation Bar (top) or Navigation toolbar (bottom) by simply defining a toolbar in the Gen window design.

Similarly on Android a native ActionBar control is used where the system back button returns to the previous page and the navigation bar back button to the top page.

Wednesday, 2 July 2014

Rapide Paginator Control

The next release of Rapide sees the introduction of a new widget - the Paginator control.

The Paginator can be used to control navigation between pages for a grid/row template listbox and also for an entire window or primary dialog box.

For a listbox, you simply specify that the Paginator control is to be used and the Rapide runtime will automatically populate the control with the number of pages and the current page indicator.

For a primary window/dialog box, you can specify the placement of the control and bind it to two numeric views - one that specifies the number of pages and the second the current page.

When the user swipes between pages, an event is called in the procedure step and the designer can decide how to process the page change event, for example by changing the data displayed.

In the example below, the user can swipe between different products, with the Paginator control at the bottom giving them a visual indicator of how many products are available.


Wednesday, 25 June 2014

Rapide Block Mode Option

We are developing a new feature for the next release of Rapide called the Block Mode option. This will allow you to generate a web and/or mobile application directly from the Gen block mode screen designs.

This new feature is aimed at Gen applications that are currently using block mode (3270) screens but wish to implement a more modern user interface for a browser or mobile device.

In the past this transformation has required a rework of the UI to use a Gen GUI window design. Because there are several key features of block mode screens that are not supported in the Gen GUI (for example enterable listboxes with more than one column), the conversion to a GUI/Web interface also requires changes to the models and also the behaviour of the application.

Whilst these are not insurmountable issues, they do involve additional development, testing and user training which can add up to a substantial cost, especially for large applications.

With the Rapide Block Mode option, the user interface is generated directly from the screen design, with the option for additional enhancements via the Rapide Designer.

Rapide has been enhanced to support various aspects of a Gen block mode application that have not been required for a GUI design, for example:

  • enterable listboxes via the Overlay Control feature
  • ability to add additional rows into a listbox via the Auto New Row feature
  • support for MAKE and SET NEXTTRAN statements executing on the server when the application uses a client/server architecture
  • support for mapping function keys to push buttons and override accelerator keys

Tuesday, 3 June 2014

Enterable Listboxes

In the previous post, the new Rapide feature of overlay controls was introduced, which allows editable cells in listboxes. These will allow the user to modify the contents of existing rows in a listbox, but what about adding new rows?

A normal Gen listbox does not allow enterable lists unless the listbox only contains one column. To overcome this limitation, a new feature in Rapide called "Auto New Row" has been introduced. When enabled, an additional blank row is automatically added into the listbox. If the user enters data into one or more cells, the row is added to the export group view and a new 'auto row' is added.

In the example below, there are four rows in the group view, with a blank row available for the user to enter data into.