Overall, the fundamental goal is to define a representation of a set of related records that:
Constitute the data for a single business object
Provide a convenient, powerful, and consistent way to separate application data access from the specifics of the underlying data definition or data access mechanism
Define not only the data but the relationships between tables that together make up the object
Can be marshaled between procedures or between sessions as a single object, using a single parameter, extending the way temp-tables and their data are marshaled today
Can be passed as parameters to .NET and other open technologies, and mapped to .NET data objects (and potentially other third-party objects)
Can be represented by a single handle, with all the elements of the ProDataSet accessible through that handle
Can be updated on either client or server in such a way that changes, adds, and deletions are captured, marshaled efficiently to the server, and written to the database or other data source under flexible transaction control
Reuse and combine to the greatest extent possible existing objects in ABL, including queries, buffers, and temp-tables, in order to provide a programming experience that is familiar to today's developers and a convenient extension of existing procedures and programming techniques
Can be represented as either a static or dynamic object, in a way consistent with other objects such as temp-tables
Support events that allow developers to define business logic for the ProDataSet and its elements that is executed consistently and more or less transparently whenever that ProDataSet object is populated or updated
Provide a migration strategy for the SDOs and SBOs of the ADM2 and Progress Dynamics®, improving performance while reusing business logic defined for those objects with minimal change