OI10 Splitter Bars – Ouch and a smile.

splitterOn the whole, my OpenInsight 10 (OI10) Beta 4 conversion has been a major success and I’m now using the application on a daily basis and working on the UI to make it cleaner using the new tools in OI10.

However, one gotcha which we should all already be aware of, is the splitter bars that were introduced in OI9.  In that version, you simply dropped the controls on the form and it did its best to resize controls (usually edit tables).  The downside for me was a flickering screen as the form constantly redrew whilst the bar was being dragged by the user.

In OI10, Carl has introduced a new ‘MOVE’ event which enables developers to very quickly and easily handle the resizing of the controls to best suit the application.  In my example, I have a form with three panels (Groupboxes) and on each panel is an editable.  The panels are then set to autosize and the following code is added to the upper and lower Splitter Bars to managed the moving of the bars as needed.  The code below is taken from the Upper Splitter bar’s MOVE event.

Declare Subroutine Set_Property

// Adjust the window's controls as the user moves the horizontal splitter bar.

   // Get the bar "thickness"
   barH = Get_Property( ctrlEntID, 'HEIGHT' )
   // Get the bar initial position
   barP = Get_Property( ctrlEntID, 'TOP', YCoord )
   // Move the bar
   Set_Property( ctrlEntID, 'TOP', YCoord )

   // How far did the bar Move 
   barM = barP - YCoord
   // Move the upper panel control
   valPanelUpper = @window:'.GRP_ALF30DAYSPLUS'
   Set_Property( valPanelUpper, 'BOTTOM', yCoord - 4 )

   // Move the lower panel control and reset the height
   valPanelLower = @Window: '.GRP_ALF30'
   Set_Property( valPanelLower, "TOP", yCoord  + barH + 4 )
   valPanelHeight = Get_Property(valPanelLower, 'HEIGHT')
   Set_Property( valPanelLower, 'HEIGHT', valPanelHeight + barM )
return 1

Disclaimer: The above code is written by me as a non professional developer.  Whilst it works, it is not optimised, does not include any error trapping and does not promote best practice.  The above code includes comments to explain what it does.

I was initially disappointed that I would have to write code to manage the splitter bars, but now that this is done I really like the way that I have control over the controls that move and that the form no longer flickers when the splitter bars are moved.

For more details about OI10 changes, please check out Carl’s OI10 Blog.




didyouknowoiDid you know… that you can copy entities from one application to another using SYSCOPYAPPS.

Repository entities are prefixed with an application name which makes it difficult to copy items from one application to another.  The SYSCOPYAPPS form is a handy tool to copy specific types of entities or a complete application from one application to another application.


Tech Tips

Did you know…

That the INET Configuration form allows you to configure defaults, handlers, and allowed routines for RUN_OECGI_REQUEST.

When using RUN_OECGI_REQUEST as the “listener” routine for handling web requests, you can configure various routines to check security, handle errors, and do any post-processing. In addition, you can specify which INET routines should be processed.

The INET Configuration form can be accessed from the Application Manager, Tools, INET Configuration.


Did You Know – OECGI3 Failover & Load Balancing.

Did you know……That OECGI3 supports Failover and Load Balancing modes.  These modes make OECGI3 a more robust connection object and allows for extra capacity and/or redundancy to be added to a web application.  The OECGI3 registry setting, MultipleServers, controls whether OECGI3 operates in Failover or Load Balancing mode.

MultipleServers = 0 sets Failover mode
MultipleServers = 1 sets Load Balancing mode

Multiple URL’s and Port’s are entered as comma delimited fields into the ServerURL and ServerPort registry settings.

ServerURL =,
ServerPort = 8088,8089

In Failover mode, you supply OECGI3 with a list of ServerURL’s and ServerPort’s that are available.  OECGI3 attempts to connect to the first ServerURL/ServerPort in the list.  If the connection is unsuccessful then OECGI3 will continue on to the next ServerURL/ServerPort in the list until a successful connection is made.  If all connection attempts fail, then OECGI3 will return the SYSDOWNPAGE page.

In Load Balancing mode, you supply OECGI3 with a list of ServerURLs and ServerPorts that are available.  OECGI3 will randomly choose a ServerURL/ServerPort from the list available, and then attempt to connect to that server.  If the connection fails, OECGI3 will move to the next ServerURL/ServerPort in the list, looping through the list until it is back at the originally selected URL/Port combination, at which point OECGI3 will return the SYSDOWNPAGE page.


Did You Know . . . DBT file.

Did you know…That OpenInsight’s database management system is based on pluggable storage implementations, called filing systems.  The most common example is Linear Hash, which is implemented by the RTP57 filing system function. The configuration information for those filing systems, which primarily defines the set of tables available to an application, is stored persistently (i.e., is not lost when you log out of OpenInsight) in a .DBT file.

In OpenInsight terms, a table is available if it is attached, and thus can be opened. As a result, without additional coding, a table is not available unless it is in the application’s .DBT file. Click here to read further details…