How to run an OpenEdge Application Inside the Web Browser


OpenEdge Application To the Web

Client-server applications are expensive and tough to maintain. Working on an entirely new web application alternative becomes unfeasible if your time is limited or your resources are scarce. 

Save time and money by webifying your application with Thinfinity VirtualUI in a few easy steps. This tutorial will teach you how to integrate your existing Progress OpenEdge application with Thinfinity VirtualUI, our application virtualization solution that provides instant web access for proprietary software.

Integrate extensive applications, which include several .w/.p programs, by adding one line of code to the main program. Changes applied are inherited by all the programs included in your application’s source code. This simple change enables anywhere access to your application without testing or refactoring.

Keep in mind that VirtualUI manages to achieve this by retaining the exact same behavior as the application’s source code remains unmodified; thus, you can keep running it with the Client Networking application as you are used to. 

Learn how to integrate your proprietary OpenEdge application with Thinfinity VirtualUI with the steps listed below:


Progress OpenEdge Applications on Thinfinity VirtualUI

Note: This tutorial applies to OpenEdge applications versions 8,9,10,11,12, and up.

Demo applications

To simplify the demo application to show the integration of the VirtualUI libraries with OpenEdge 4GL, we develop it on C:\OpenEdge\VirtualUI\ using Developer Studio 12.2. VirtualUI_AppBuilder and VirtualUI_dotNET projects, and test.pdf file used on apps, which can be located in that folder:

OpenEdge Application to the Web - VirtualUI Folder

Both app demos provided show the same basic functionality:

  • Define the file dialog usage based on the two available modes: VirtualUI built-in (StdDialogs=false) or using system dialogs (StdDialogs=true).
  • Upload files from browser machine to Server. A Server directory can be used as destination; if empty, the application temp directory is used.
  • Event handling for OnUploadEnd. The rest of the VirtualUI events can be handled in the same way.
  • Download files from Server. In the demos, the user selects a file from a FileOpen dialog browsing the Server file system.
  • Preview a PDF file on the browser.


Using VirtualUI on OpenEdge

VirtualUI can be used on OpenEdge applications in two ways:

  1. Using a COM object.
  2. Using a .NET class library.


The Thinfinity VirtualUI .NET class library is a .NET wrapper that allows programmers to natively access its events and methods. Choose each integration method depending on the OpenEdge environment you are using.


Using a COM object

The project VirtualUI_AppBuilder is an AppBuilder application that uses this method.

The VirtualUI library provides ActiveX classes and interfaces registered on installation. The main class is VirtualUI.

VirtualUI handle is declared in wWin.w code:




This is created and started on the StartVirtualUI function, called as follows:



    /* Create VirtualUI instance:*/

    CREATE "VirtualUI.VirtualUI" VirtualUI NO-ERROR.



        /* Start VirtualUI: if installed*/



        /* Enable events:*/



        RETURN TRUE.






Also, events are enabled. The parameter is the prefix for procedure handlers: in this case, it is “VirtualUI”, so the event handlers must be declared as “PROCEDURE VirtualUI.EVENTNAME”. The event handler for OnUploadEnd, fired when an upload is finished, is declared in the following form:


  PROCEDURE VirtualUI.OnUploadEnd:





Using a .NET class library

The project VirtualUI_dotNET is a GUI for .NET application that uses VirtualUI from a class library.

The class library Cybele.Thinfinity.VirtualUI.dll, built from Cybele.Thinfinity.VirtualUI.sln, exposes the VirtualUI SDK for C# (Thinfinity.VirtualUI.cs) provided in VirtualUI Development Environment installation.

Once the class library is added to the project, all classes and interfaces are on Cybele.Thinfinity namespace can be used on applications.


VirtualUI object is declared in the main form (Form1.cls):




And created and started on StartVirtualUI() method, which is called from the form constructor:



      /* Create VirtualUI instance:*/

      m_VirtualUI = NEW Cybele.Thinfinity.VirtualUI().


      /* Start VirtualUI:*/



      /* Attach event handlers:*/




Also, the event handler for OnUploadEnd is attached. This is fired when an upload is finished.


  METHOD PRIVATE VOID VirtualUI_UploadEnd(INPUT sender AS System.Object, INPUT e AS Cybele.Thinfinity.UploadEndArgs ):

      MESSAGE "Uploaded file:" e:Filename VIEW-AS ALERT-BOX INFORMATION BUTTONS OK TITLE "UploadEnd".



Running on Server

To run the demos on VirtualUI Server, create the application profiles with the following parameters (check paths):

VirtualUI_dotNET app:

  • Program path: C:\Progress\OpenEdge\bin\prowin.exe
  • Arguments: -p wWin.r -nosplash
  • Start in folder: C:\OpenEdge\VirtualUI\VirtualUI_dotNET


VirtualUI_AppBuilder app:

  • Program path: C:\Progress\OpenEdge\bin\prowin.exe
  • Arguments: -p RunForm1.r -nosplash
  • Start in folder: C:\OpenEdge\VirtualUI\VirtualUI_AppBuilder


On production machines, the parameter -rr must be added to the arguments. If you have developer licenses, this parameter is not supported, and the Procedure Editor is shown after the main application form closes (see for more information).


Running on dev mode

To run in dev mode, under Progress Developer Studio:

1. Start VirtualUI Development Server.

2. Access on the web browser.

3. Uncomment the lines included in the demos source files:

/* To run in dev mode, under Progress Developer Studio, uncomment these lines:*//*VirtualUI:Enabled = TRUE.

  VirtualUI:DevMode = TRUE.

  VirtualUI:DevServer:Enabled = TRUE.*/

4. Run application from Progress Developer Studio. The application will run on a desktop and on a web browser.

If you found this article interesting and want to know more about Thinfinity VirtualUI,
you can contact us or schedule a 15-minute demo call with one of our Sales Engineers.

Leave a comment

Privacy Preferences
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.