Progress OpenEdge (versions 11.4 and higher) supports passing objects between ABL clients and AppServer code.
In this tip, the code demonstrates how an ABL client can pass a temp table that contains an ABL object. The ABL object contains a protected temp table that contains another ABL object field. This provides the option to pass complex data between ABL Clients and AppServers. The Progress.Lang.Object is SERIALIZABLE by default. All other objects must be explicitly marked as SERIALIZABLE to be marshaled.