It is possible. There are not as many possibilities in OpenEdge as in languagaes like Java or C#, but since version 11 it has basic functionality.
To use reflection look at Progress.Lang.Object
which has a method GetClass()
that returns an instance of Progress.Lang.Class
.
These are the members of Progress.Lang.Class
from the OpenEdge Help (Version 11.1, should be the same for all 11.x versions):
In earlier versions of OpenEdge the reflection capabilities were even worse. But it was possible to invoke methods and create instances dynamically.
You should also have a look at the DYNAMIC-NEW
statement and the DYNAMIC-INVOKE
function.