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.
This is an occasional blog about IET's use of CA Gen for internal development as well as thoughts, tips and techniques on using CA Gen for application development. It is aimed at the CA Gen development professional, so please excuse the jargon and assumed level of knowledge about CA Gen. Reference will also be made to our products to put the development into context, so if you are not familiar with these, please visit the IET web site by clicking on the company logo.
Monday, 23 February 2015
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.
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.
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.
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.
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.

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
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.
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.
Subscribe to:
Posts (Atom)









