skip to main content
OpenEdge Development: ADM and SmartObjects
ADM1 to ADM2 Conversion Utility : Conversion support for ADM SmartObjects in later versions
Conversion support for ADM SmartObjects in later versions
OpenEdge provides a SmartObject conversion utility that aids in converting ADM1 objects to ADM2 objects. Because conversion is optional (recompiled Version 8 SmartObjects will work in later versions), carefully consider whether you have specific development or application needs that require you to convert objects. If you need to convert, make sure to devise a conversion strategy to accomplish your tasks, before beginning the conversion. At a minimum, your conversion strategy should address how you will use the conversion utility and how you will test your final conversion results. Both aspects are critical to the conversion process.
Caution: If you customized any part of the ADM1 method libraries, added local procedures to SmartObjects, added code to a SmartObject instance, or made other customizations, Progress Software Corporation does not guarantee that converted code will work as it did in Version 8. In fact, the conversion utility cannot completely convert most SmartObjects due to the lack of necessary information: a fully functional Version 8 SmartViewer does not contain the information necessary to build a fully functional OpenEdge SmartDataViewer, and the same is true for other SmartObjects.

Progress Software Corporation recommends you use the conversion utility only as an aid, with the understanding you will need to manually adjust your customized SmartObject applications well beyond what the conversion utility provides. Progress Software Technical Support provides only general, high‑level assistance for the conversion of SmartObject applications, not code fixes. For detailed assistance with converting SmartObjects, contact Progress Software Consulting Services.
You can employ many different strategies to attempt your conversion activities; however, Progress Software Corporation recommends that as a first step, you consider converting one window and all its components. Controlling the conversion process in this way helps to identify any difficulties you might encounter with your conversion attempts on a limited scale. This approach also helps to assess your approach to any subsequent conversions.
Testing also is a critical component of the conversion strategy. Progress Software Corporation recommends you define a full complement of test routines to ensure your conversion results meet your expectations.
Keep in mind the conversion utility always requires supplemental human intervention to complete the conversion tasks. The utility does not support a one‑for‑one conversion of files, nor can it be completely effective in converting files; consequently, you must examine the results of your conversion attempts closely and, as described later in this section, take appropriate steps to facilitate the completion of the conversion process manually.
When you create an application, be aware that ADM1 and ADM2 objects cannot coexist in the same design window; at the window level, all objects must be of the same type. Therefore, if you previously created ADM1 objects and now want to use them in OpenEdge with ADM2 objects, consider attempting to convert your ADM1 objects and perform the necessary manual conversion‑related tasks.
Code changes to SmartObject container type objects
All SmartObjects have include files that are built into their templates; for example {src/adm2/containr.i}. In OpenEdge, the ADM has similar include files, but they have different content and different names.
Additional miscellaneous points
The following points refer to SmartObject code in Smart Container files:
*ADM1 Smart Containers have procedures named row‑available and send‑records. These procedures do not appear in an ADM2 SmartObject, because ADM2 SmartObjects pass values instead of records.
*The ADM1 procedure state-changed is not in the ADM2 SmartObjects, because of the new PUBLISH/SUBSCRIBE event model.
*Local-exit is replaced by exitObject.