Wednesday, 11 March 2015

Drag and Drop

Many users will be familiar with the operation of drag and drop between controls or between applications.  

Rapide now provides drag and drop support for controls within the application as well as full text transfer between applications on desktop applications.  For browser applications, Rapide also provides support from dragging files from the native OS (such as via Windows Explorer) into a Rapide control, automatically transferring the dragged files to the AppServer.


The Rapide Designer is used to define whether a control can act as a Drop Source or Drop Target, or indeed both for the same control.  The Designer also allows you to specify whether to support Copy and/or Move operations.

Various events are triggered during the course of a drag and drop operation, for example when the object is dropped onto the target and at the end of the drag operation.

The Rapide Controls Demo has an example of using Drag and Drop.


Monday, 23 February 2015

Rapide App Server Console

When we recently started a series of web seminars we wanted a system to allow attendees to register for the seminars, receive a calendar reminder and also be able to view recordings of past events.

Since the first four events were on Rapide, we decided to create a new event management system using Rapide. Whilst this is a simple application, it demonstrates some of the powerful capabilities of the product, including frames, row templates and placing images into listbox rows.

Instead of running the application in a traditional application server like JBoss or WebSphere, we decided to use the in-built OSGi server that comes with Rapide. However one issue that cropped up with running a production application was the ability to see who was currently using the system. We wanted to know this so that if we decided to deploy a new version of the application, we could do so without disrupting any users who were currently logged on.

This have rise to a new feature in Rapide called the Application Server System Console. The console lists all of the sessions currently active, when the session was started and last accessed as well as the current p-step name, platform and browser/mobile device version.

The console is available for use with both the OSGi server and also if a Rapide application is deployed using a traditional application server.

It also allows the administrator to prevent new users logging on and also to send messages to currently active users, for example to inform them that the system is about to be updated.



Thursday, 29 January 2015

READ Cursor Properties

One of the properties of a READ statement is the control of cursor generation:


When set to the default value of Both select and cursor, the generated code will first perform a SELECT statement, and if the sqlcode indicates that this resulted in multiple rows, it will then fetch the first row using a cursor.

In the situation where it is likely that more than one row will be returned, this will result in a wasted initial SELECT, so the code will be more efficient if the property is changed to Cursor only and thus avoid the expense of the SELECT.

Similarly, in the case where there can only be one row returned, for example when qualifying on the identifier or a cardinality one relationship, the generation of the cursor results in a larger memory requirement, code size and additional processing for compile and bind steps. In this situation, the code will be more efficient if the property is set to Select only.

For example, using this example data model:

The statement below should have the property set to Select only since a CHILD can only have one parent.


Whereas the statement below which checks to see if a parent has at least one child should have the property set to Cursor only since they can have many children. 

A refinement to the check would be to leave the property as Both select and cursor in this situation of a parent has a average of one child.

IET have developed a check in VerifIEr which will validate the correct and optimum setting of this property. The initial version of this check is for a READ statement that qualifies using a single relationship. In the future we may extend this to cover more complex READ statements. The VerifIEr check also contains a genIE 'Fix' that enables the property to be reset to the optimum value.

Wednesday, 17 December 2014

Multiple Instance Tabs

We have recently been working on a project to convert a Windows GUI application to a browser. The application allows the user to open multiple instances of the same window to detail a customer record.

Viewing multiple windows on a desktop application is common design approach, but this does not translate well to a browser or mobile application because a browser does not have the same window switching facilities of the Windows desktop and mobile interfaces do not support multiple mode-less windows.

A new feature in Rapide called Multiple Instance Tabs provides the solution. They allow multiple instances of the same window or dialog box to be opened at the same time in separate tabs. An example from the Rapide Controls Demo is shown below. Each tab is an instance of the same detail procedure step but instead of appearing as separate windows, they are displayed within a tab control.

Converting a multiple detail window design to a multiple instance tab is quick and easy and requires very few changes to the model.


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.