What's New in OpenEdge 12.4
- Last Updated: February 9, 2026
- 12 minute read
- OpenEdge
- Version 12.8
- Documentation
|
OpenEdge Release 12.4 delivers updates and enhancements in the following product areas: |
As of June 2021, OpenEdge discontinued support for the NewRelic plugins for PAS for OpenEdge and the OpenEdge Database. Customers using NewRelic plugins will not be able to access the plugin pages to configure metrics or to the view plugin dashboard. This limitation is a result of the dropped support by New Relic of the OpenEdge plugins as of Wednesday, June 16th, 2021. The official announcement is available from https://discuss.newrelic.com/t/new-relic-plugin-eol-wednesday-june-16th-2021/127267.
DevOps Productivity
Methods as Callbacks
ABL SAX-READER object
ABL developers can now use ABL object-oriented class methods as a callback target for the OpenEdge SAX-READER object. Before this release, only procedures could be used as callback target for the SAX-READER object. Developers can now use an object-oriented solution for handling callback events within their application and avoid mixing procedural and object-oriented code. Overloaded methods can also be specified as callback handlers.
For more information, see the the following topics:
SOAP web services
ABL developers can now use class methods as SOAP header callback targets for SOAP web service operations. Before this release, only procedures could be used as callback target to handle SOAP service callbacks. ABL developers can now register class methods as event handlers to use built-in ABL functionality to run SOAP web service operations asynchronously. This feature allows overloaded methods in ABL classes to be specified as callback handlers.
For more information, see the the following topics:
VAR Statement Enhancements
Support for expressions in VAR statement
Expressions are now supported during variable initialization using the
VAR statement. Expressions can be used to
initialize a scalar variable as well as parameters to a constructor when
initializing a class variable. The ability to use expressions simplifies your code,
allowing you to combine operations into a single statement.
The following example shows defining and initializing scalar variables using expressions:
VAR INT a = 50, b = 20, x = a + b , y = a - b, z = x - y.
The following example shows defining and initializing variables with a built-in function, a user-defined function, and a method as the expression:
VAR DATETIME dtm = DATETIME(TODAY,MTIME).
VAR INTEGER x = myFunction().
VAR INTEGER y = classMethod(output v).
The following example shows defining determinate and indeterminate array variables and initializing them using expressions:
VAR INT[2] w = [123, a + b].
VAR INT[3] x = [funct( ), 123, a + b].
VAR INT[ ] y = [123, a + b].
VAR INT[ ] z = [funct( ), 123, a + b].
The following example shows expressions used as parameters to a constructor:
VAR INTEGER x = 10, y = 20.
VAR point p1 = NEW point (x - 5, y + 5).
VAR point p2 = NEW point (classMethod() - offset, someobject:getylocation()).
For more information, see VAR statement or Learn about the VAR statement.
Support for instantiation and initialization of a class using the VAR statement
In this release of OpenEdge, you can now instantiate a class when you
declare a class variable with the VAR statement
by using the NEW function. This feature
simplifies your code and allows you to do both operations in a single statement.
VAR myclass myobj = NEW myclass("Progress", 2021, ?).
For more information, see VAR statement or Learn about the VAR statement.
Support for array object variable instantiation and initialization using the VAR statement
In this release, you can now create an array of objects using the VAR statement. This feature simplifies your code,
allowing you to combine multiple operations into a single statement.
The following example shows the instantiation and initialization of a determinate array object variable:
VAR StateClass[2] objArrayA = [NEW StateClass(“MA”), NEW StateClass(“NH”)].
The following example shows the instantiation and initialization of an indeterminate array object variable:
VAR StateClass[] objArrayB = [NEW StateClass(“MA”), NEW StateClass(“NH”)].
For more information, see VAR statement or Learn about the VAR statement.
New ABL AGGREGATE statement for server-side processing
This release introduces a new ABL AGGREGATE statement for computing aggregate values on the database
server-side. Previously, aggregate calculations were performed client-side using
both the ACCUMULATE statement and the ACCUM function. Now, you can simply use a single
AGGREGATE statement for the COUNT, TOTAL, and
AVERAGE aggregate operations. The AGGREGATE statement simplifies your code and improves
performance as the computation is done efficiently on the database server-side.
The following example uses the AGGREGATE
statement to calculate the average balance for users in Chicago:
VAR DECIMAL avgBalance.
AGGREGATE avgBalance = AVERAGE(Balance) FOR Customer
WHERE Country EQ 'USA' AND City EQ 'Chicago'.
MESSAGE "Average balance: " avgBalance
VIEW-AS ALERT-BOX.
For more information, see the AGGREGATE statement.
Query expression evaluation behavior change
In this release, the AVM no longer ignores errors that occur when evaluating
a query expression. Previously, if an error occurred, the value of the expression
was set to the Unknown (?) value, and the query
would continue to execute. This behavior affects all statements that involve query
WHERE clauses, such as FOR EACH statements, FIND statements, and OPEN-QUERY
statements. For a dynamic query, the error may not be detected until the first
GET-FIRST/NEXT/PREV/LAST method after the
query is opened. It is possible that mistakes in existing ABL will be uncovered by
this change. Now, any error that occurs is raised and handled by the normal error
handling mechanisms.
Here is an unrealistic, but illustrative, example:
FOR EACH customer WHERE custNum > INTEGER("A"):
...
END.
This code will now raise an error.
Previously, the code resolved to the following:
FOR EACH customer WHERE custNum > ?:
...
END.
To catch the error raised, use a CATCH block in the block containing the FOR
EACH statement (not inside the FOR
EACH block as that block has not actually started yet).
If using this feature causes any issues, you can use the -zNoQryExpErrors startup parameter to revert to the
old behavior. Please note that this is meant to be used as a temporary work-around.
It is possible that by using the startup parameter, you may occasionally return
incorrect data from the query. Progress Software strongly recommends that in the
long-term, you fix your code to avoid any new errors rather than use this
undocumented startup parameter.
.NET Core support
Support for .NET Core has been added to OpenEdge Open Client Toolkit. Open Client for .NET supports .NET framework 4.8, .NET Core 3.1, and .NET Core 5.0. Open Client applications can be run on .NET platforms that support .NET standard 2.0 targeted libraries. Progress Software also supports running Open Client application on Linux .NET core 3.1, Windows .NET core 3.1, and .NET framework 4.8 on Windows.
For more information, see .NET Open Client Support FAQ.
ABL service deployment
An ABL service is a set of business logic that can be accessed through a URL path.
.oeds file that allows you to:- Package an ABL service into one archive file
- Easily deploy your service to a PAS for OpenEdge instance
- Build a custom service quickly
- Easily maintain your service and benefit from CI/CD processes
For more information, see ABL Service Deployment.
Third-party Tools
In OpenEdge 12.4, the following third-party tools that are bundled with Progress Developer Studio for OpenEdge were updated. For more information about all third-party tools packaged with OpenEdge, see the OpenEdge Platform Compatibility Guide.
Infragistics controls update
The "OE Ultra Controls .NET" license ships "Infragistics Ultimate UI for Windows Forms". For OpenEdge 12.4, the version was updated to 19.2.20192.476.
AppBuilder reinstatement
Starting in OpenEdge release 12.0, Progress Software stopped shipping the 32-bit OE Studio product, which included AppBuilder. AppBuilder is a multi-purpose application development environment. It can be used as a visual programming environment to create applications. This release includes AppBuilder in both the 32-bit and 64-bit 4GL Development System products.
For more information, see Learn About AppBuilder.
Continuous Operations
Database maintenance mode
Certain administrative tasks being performed on an active database are complicated by data changing while the task is underway, due to continuing inflight transactions and new logins. Data administration activities like mass load, purge, synchronizing replication source to target or making a large schema change can be easier to perform with data change paused. The solution is to temporarily restrict user activity and perform maintenance tasks without taking the database down.
This release introduces a restricted online mode that enables you to execute maintenance tasks without user activity and with all the buffer pool and helper processes still available, which improves the performance for these tasks. When this mode is enabled only database utilities can connect to the database.
For more information, see Restrict database access.
Automatic database reconnection with OpenEdge Replication
OpenEdge provides a mechanism for clients to automatically connect to an
OpenEdge Replication target database, if the connection to the replication source
database fails. In this release, PAS for OpenEdge agents can now reconnect to the
new replication source when -autoReconnect is
used.
For more information, see Automatic database reconnection with OpenEdge Replication.
Simplified online table truncation
Now you can quickly and efficiently truncate all the data associated with a particular table residing in Type II areas. The data storage space that was occupied by the table is returned to the storage area for reuse by other objects.
In this release, the PROUTIL utility lets you truncate, and optionally move, a table while the database is running, without having to recreate the schema.
For more information, see Truncate tables.
Before-image space management
Space management for the before-image (BI) files was introduced in OpenEdge
12.3 with a mechanism that scans the BI file clusters for committed transactions and
recyclable clusters. In this release, space management has its own before-image
manager process, probim. To run BI space
management in this release, you must set -biscantime to a value greater than zero and run the before-image
manager (BIM).
probim <db-name>For more information, see PROBIM command.
Drop a field online
You can now remove a named field from the schema definition while still being
connected to the database by means of the online Drop Field
transaction. The data of the field in the database table is also effectively removed
in the process without requiring any exclusive lock.
For more information, see Drop a field online.
Cancel SQL queries via JDBC clients
You can now use the JDBC Cancel() API to terminate a SQL query
in a JDBC client. When the JDBC client executes the API, the OpenEdge SQL server cancels
the query and discards all running operations for that query without impacting other
queries or applications. The JDBC Cancel() API can be
used to cancel SQL SELECT queries that are taking
longer than expected.
Improved online schema support for delta.df in Data Dictionary
The Data Administration tool connects the two databases, compares the
schemas, and generates a .df file that contains the
changes required in order for the first database schema to match the second database
schema. This is referred to as the delta.df.
Four sections are added to the new delta.df file. The sections explain the operations that are performed
before and after the deployment of an application:
| Sections | Description |
|---|---|
| PreDeploy | This section contains all non-disruptive
online operations and items such as:
|
| Trigger | This section contains all the trigger definition changes such as add, delete, and modify. The database triggers have r-code and are deployed before the trigger schema changes. The trigger r-code is executed after the PreDeploy changes are made. |
| PostDeploy | This section contains all online disruptive operations. These schema change operations are applied to the production system after confirming that the objects are not used in any other version of the running application. |
| Offline | This section contains all schema change
operations. These schema change operations cannot be carried out
online and therefore require the following exclusive schema
locks on the database:
|
For more information, see Dump incremental delta.df supporting online schema changes.
Default area assignments for database objects (SQL, ABL, Data Dictionary)
By default, ABL and SQL create new data objects in the schema area, and the Data Dictionary creates new database objects in the next storage area after the schema area. To take advantage of the performance capabilities of Type II areas, you can specify a default area for the creation of tables, LOBs, and indexes, so that they are created in a Type II area instead of a Type I area like the schema area. You may also change the default object creation area at any time, whether or not the database is running. Default area assignments eliminate downtime when moving tables, LOBs, and indexes from a Type I to a Type II storage area.
For more information, see Set default storage areas for creating database objects.
You can now use the PROUTIL utility to configure or display default areas.
For more information, see PROUTIL SETOBJECTDEFAULTAREA qualifier.
To create objects in default areas, you can use the Index Editor option, Modify Table option or Field Editor Add option in the Data Dictionary.
For more information, see Schema Menu Reference.
The Data Dictionary displays the default area settings for database objects in the Database Properties screen and the Utilities menu’s Information option.
For more information, see Database Properties.
Security Updates
TLS support for OpenEdge Replication
OpenEdge Replication now supports Transport Layer Security (TLS) for network communication between the source and target databases. This provides OpenSSL encryption for data on the move: data replication between the Replication Server and Replication agent, the Replication Transition process, and coordination of the replication processes.
This is independent of and complementary to OpenEdge Transparent Data Encryption (TDE) which is for data at rest.
For more information, see Transport Layer Security.
TLS Client Authentication from an ABL Socket
OpenEdge now supports client-side TLS authentication from an ABL client socket, in addition to the server-side authentication that was available in earlier OpenEdge versions. The OpenEdge system or security administrator can configure TLS client authentication from an ABL client socket, for a TLS-enabled connection, to any HTTPS server that requires TLS client authentication. Here HTTPS server includes PAS for OpenEdge instances and non-OpenEdge servers such as Apache HTTP Server and Microsoft IIS. This feature enables you to meet the enterprise security policy requirements.
The CONNECT() method of the Socket object connects a socket to the specified TCP/IP port on the specified host.
- -sslAuth Authentication-type
- -sslKeyFile filename | target-database
- -sslKeyPwd password
For more information, see CONNECT( ) method (Socket object).
Online Transparent Data Encryption database policy management
OpenEdge databases that use Transparent Data Encryption (TDE) have an encryption policy for the database master key (DMK) known as the encryption DB policy, for short. You can perform TDE DB policy management tasks on your TDE-enabled databases while the database is running.
- If you deploy your product with a TDE-enabled template database, change the encryption DB policy so that each installation will have a unique set of object encryption keys.
- If your enterprise security policies need larger master keys, or keys with a different algorithm type, change the encryption DB policy.
- If you think that backup copies of both the database and the keystore have been compromised, change the encryption DB policy as insurance.
If you need to change the encryption DB policy for one of the preceding reasons, you can also change the cipher for certain database objects at the same time.
For more information, see Online TDE DB policy management.
Supportability
Graceful emergency shutdown of a PAS for OpenEdge multi-session agent
An emergency shutdown of a multi-session agent is initiated when a severe
error occurs. The shutdown process causes the multi-session agent to redirect all
new requests to a new multi-session agent and records a message in the
syslog (UNIX) or eventlogs (Windows) and
generates a Protrace file. The shutdown process also creates a new file, pasoe-agent-crash-trace-process-id, in the $DLC/WRK/InstanceName/work directory.
The default wait time for the shutdown process is 10 minutes but it can be customized as required.
For more information, see Multi-Session agent initiated graceful shutdown.
Enforced Replication synchronization during database shutdown
In this release, the PROSHUT -replSync option
offers a better way to enforce a guaranteed synchronization of all databases without
any pending transactions after a broker shutdown.
For more information, see Enforce source and target database synchronization during shutdown.
OpenEdge Command Center 1.0
Overview
The OpenEdge Command Center is a cloud-ready OpenEdge management console capable of managing multiple OpenEdge resources and installations across various machines and versions of OpenEdge. OpenEdge Command Center is optimized for managing complex, high scale, hybrid cloud OpenEdge deployments.
The following are some of the features introduced in OpenEdge Command Center 1.0.
Highly available OpenEdge Command Center server
The server powers the web console and APIs of OpenEdge Command Center. It uses a MongoDB database and a file store to store data. You can deploy the server as single node or, if configured for high availability, a multi-node cluster.
For more information, see Install OpenEdge Command Center server in high availability setup.
Lightweight Command Center agents
Command Center agents are lightweight processes that are co-located with the OpenEdge installations of the resources you want to manage. You can use a single agent to manage multiple OpenEdge installations on a computer.
For more information, see Learn about OpenEdge Command Center.
Support for tablet and iPad devices
OpenEdge Command Center provides a modern web console that is developed using latest UI and UX technologies. Administrators can access the console using modern web browsers on their desktops, tablets, or iPad devices.
Self-service dashboard
The dashboard is the console home page of OpenEdge Command Center. It provides resources, such as Getting Started video, banner notifications for "To Do" tasks, quick links, and so on, that helps administrators manage their tasks efficiently.
For more information, see OpenEdge Command Center console dashboard.
TLS support for OpenEdge Command Center components
To establish a secure network channel for communication between the OpenEdge Command Center server, agents, and configuration database, you can enable TLS.
For more information, see Set up TLS.
Built-in user management
- Super administrator
- Administrator
- No access
For more information, see Add a new user.
PAS for OpenEdge management
- Discover new PAS for OpenEdge instances in the environment
- Create, start, stop, and delete PAS for OpenEdge instances
- Configure various properties of PAS for OpenEdge instances
- View ABL applications and manage ABL application deployment
For more information, see Configure and manage PAS for OpenEdge instances.
Open standard REST APIs with Swagger UI documentation
To support customer business needs for application integration and access, OpenEdge Command Center uses open standard REST APIs accompanied with interactive Swagger UI documentation.
For more information, see OpenEdge Command Center REST APIs.