2017 01 05

Author: Raimundas Voveris

As a Progress team member I am very often asked – what is Progress? Are you programming? Progress is an ancient programming language and you support some legacy systems, right?

Throughout this blog I will try to answer each of these frequently asked questions.

In short, Progress is huge technology comprised of programming language (ABL), DataBase Management System (DBMS), Application server, front-end (web, mobile) development framework, IDE and many complementary products for different developer and customer needs. Let me to mention that in 2006 Progress corporation renamed it’s technology from Progress into OpenEdge. So in different resources you may find Progress technology referenced as OpenEdge. These descriptions are synonyms more or less. Below I will provide some details on different elements of Progress technology.


The core of Progress technology is an ABL (Advanced Business Language) programming language. Key features of this programming language:

  • It supports both procedural and object oriented programming (OOP) styles. When Progress was born it was a procedural programming language. When OOP was introduced – both programming models are supported so you may find both classes and procedure in the source.
  • DB can be accessed directly from the ABL. Directly in the language can be provided CRUD statements. From the code can be controlled records locking, index usage, records fetching order and many other DB related actions. As a result it is easy predictable how records will be fetched from the DB and provided for UI or services.
  • ABL supports three types of user interfaces:
  • GUI for .NET. This ABL client presents a UI that provides native support for .NET forms, .NET controls, and .NET foundation classes, which can be directly viewed, communicated with, and manipulated using event-driven and object-oriented programming syntax.
  • GUI. This ABL client presents a UI in graphical widgets, including windows, dialog boxes, and graphical controls that are supported with an event-driven programming model.
  • chUI (character UI). This ABL client presents a UI in character-based widgets for very simple display and for data entry. There is an opinion that such kind of UIs are used in legacy systems only. For operations intensive systems chUI clients are more preferable ones comparing to Web or GUI applications, as data entrance rate is greater several times. It may be useful, for example, for a manufacturing-floor application in which a simple display and controls are required.
  • ABL supports a unique data structure so called “temp table”. Its’ structure is like real database table just data resides in RAM. Being of the same structure like database table it is very easy to manipulate data in the code. As well it’s very convenient data structure to interchange data between different architectural layers, e.g. DB access and business logic.
  • One of the mostly used statement in ABL is a “FOR EACH”. It’s like a “SELECT” statement in SQL. As it was mentioned above in this statement can be provided parameters to control records locking, fetching order or concrete index usage.
  • Variables are treated as a DB records as a result takes part in transactions management. On transaction roll-back variables values can be rolled back into ones that were before transaction.
  • Each Progress version supports constructions used in previous versions. As a result program written 20 years ago is fully compatible with newest version of Progress installation. You may get some compilation warnings that some statements are deprecated or some other stuff should be replaced by new constructs, but code should work without greater problems.


Another but not minor component of Progress technology is Progress Database management system. Some DB features to mention:

  • It’s is not SQL DB, but not noSQL either. Progress is relational DB. Comparing to Oracle or some other vendor, relations constraints are not preserved in DB metaschema. Tables relations integrity should be ensured by tables triggers, i.e. it’s developer’s responsibility to keep DB integrity in order.
  • SQL support. Despite of the fact Progress DB is not a SQL DB – data can be accessed using SQL statements directly from native ABL interpreter. Additionally ODBC and JDBC are supported.

Progress DB is enabled by many enterprise features:

  • Horizontal table partitioning – large tables can be physically allocated into different physical storages, based on some search criteria. This way improving query performance for very large tables.
  • Availability. After imaging technology enables data restoration in case of disks failure in the precision in part of the second.
  • Multi-tenancy. A multi-tenant database is a database that provides support to a number of separate and distinct groups of users, referred to as tenants. Multi-tenant applications have taken an increasingly larger foothold in the database marketplace largely due to the emergence of SaaS as a deployment strategy.
  • Transparent data encryption. As part of an overall security strategy, provides for data privacy while the data is “at rest” in Progress database, regardless of the location of the database and who has a copy of it.
  • Two phase commit. This feature enable distributed transaction integrity when there are more than one DB.


One of core elements of the Progress technology is Progress Application Server. Application server executes ABL code, access DB and provides mutual communication for ABL and non ABL clients. It is implemented based on Apache Tomcat servlet container. Progress AppServer provides access to ABL services for following client types:

  • ABL client. Native client support
  • Open client. Open Clients are written in C#, VB.NET, or Java.
  • Web services client. Clients written in a variety of languages (ABL, Java, C#, VB.NET, JavaScript, HTML) can access an ABL application’s services if the application has been built to provide web services. Application server instance supports transport for SOAP and REST access.

Using Progress AppServer technology, system business logic and data access can completely encapsulated from outer world and communication is to be implemented out of the box.


Several years ago it was quite hard to write mobile and web browser based applications using tools provided by Progress. Life for developers have changed when Progress acquired Telerik company in Oct-2014. Telerik provides a complete framework and tools for browser based and mobile development. After Telerik acquisition Progress technology enables a full stack enterprise system development


To write, test, debug ABL code and do many other stuff OpenEdge developer studio may be used. The IDE based on Eclipse is very convenient developer tool to use. With a huge variety of Eclipse plugins and Progress integration, it makes it easy to code ABL in it. IDE also includes complete Progress development stack configuration in it. That means using additional plugins you can design and draw mobile application, set up application server configuration, design DB and launch all the stuff on your local computer quite easily. All you might need for development is available in a single tool – OpenEdge Developer Studio.


Developing new system or redesigning the legacy one, Progress recommends to use the reference architecture provided in the picture below. In each architectural layer Progress technology can be applied.


Possibly the most popular question – why Progress is not known? Despite of the Progress technology is to be used all over the world it’s popularity is not the same as Java or .Net is. Reasons can be sought in many aspects – Progress is not an open source technology, it’s not widely spread in universities, technology is oriented into enterprises etc. By the way technology is widespread in America’s market. Despite of it’s popularity there are many enterprise systems based on Progress technologies, especially in financial secto