Preface
Purpose
Audience
Organization
Typographical conventions
Examples of syntax descriptions
OpenEdge messages
Overview
Introduction
SmartObject application benefits
Enhanced code reusability
Customizing SmartObjects
ADM classes
Standard ADM class files and templates
Templates
Custom ADM Class Files
SmartObjects
SmartObject types
The lifecycle of a SmartObject
SmartObject templates and masters
Instantiation
SmartLinks
Properties
Super procedures
External procedures, internal procedures, and functions
Super procedures in the ADM
SmartObjects
SmartObject summary
Accessing SmartObjects
SmartObject instance properties
AppBuilder-maintained procedures
SmartContainers
SmartContainers and their contents
Paging
Pass-through links
SmartWindows
SmartFrames
SmartDialogs
SmartDataObjects
SmartDataObject instance properties
SmartDataObject usage notes
Setting the number of database rows to batch
Checking database records on update attempts
Changing how Progress reloads the RowObject temp-table
The Define Temp-Tables option
SmartDataBrowsers
SmartDataBrowser instance properties
Dynamic SmartDataBrowser instance properties
Static SmartDataBrowser instance properties
Dynamic versus static SmartDataBrowsers
SmartDataBrowser usage notes
The NO-ASSIGN property
Default triggers for SmartDataBrowsers
Scrolling past the end of the result set
Multiple selection
Setting the dynamic SmartDataBrowser field properties
The dynamic SmartDataBrowser SearchField property
Displaying row markers in the dynamic SmartDataBrowser
SmartDataViewers
SmartDataViewer instance properties
SmartDataViewer usage notes
Adding SmartObjects to SmartDataViewers
Inheriting Data Dictionary validation expressions
SmartDataFields
SmartDataField instance properties
SmartDataField usage notes
Creating SmartDataFields
Adding SmartDataFields to SmartDataViewers
SmartPanels
SmartPanel instance properties
Navigation SmartPanel instance properties
Update SmartPanel instance properties
SmartPanel usage notes
Resizing SmartPanels at design time
SmartPanels as toolbars
SmartFolders
SmartFolder instance properties
SmartFolder usage notes
Page 0 in SmartFolders
SmartFilters
SmartFilter instance properties
Data pane
Field Properties pane
Style pane
String Operators pane
Operator View as pane
Size & Position pane
View property
SmartFilter usage notes
Filter link as pass‑through link
SmartToolbars
SmartToolbar instance properties
Style pane
Contents pane
SmartToolbar usage notes
SmartPanels as toolbars
Complex SmartToolbar modifications
SmartSelects
SmartSelect instance properties
Data Source pane
Data pane
Properties pane
Optional pane
Visualization pane
Field Attributes pane
Geometry pane
Define Any Key Trigger on Field pane
SmartSelect usage notes
Event on change instance property
Simple SmartObjects
SmartLinks
SmartLink overview
SmartLink types
Source and target objects
SmartLink events
Container SmartLink
Navigation SmartLink
Page SmartLink
PageN SmartLink
TableIO SmartLink
GroupAssign SmartLink
Data SmartLink
Update SmartLink
Commit SmartLink
Filter SmartLink
Invoking behavior in other linked objects
Pass-through links
Example of setting up a pass-through link
Getting records from an additional source
Using Data SmartLinks
Defining SmartLinks in Progress applications
Defining static SmartLinks
Defining dynamic SmartLinks
Data Management in the ADM
Displaying and browsing data sets
SmartDataObjects
SmartDataViewers
SmartDataBrowsers
Initializing the foreign key fields
Compatibility checking
Signature and field‑list checking at design time
Checking SmartDataBrowser compatibility
Checking SmartDataViewer compatibility
Using Data SmartLinks
Filtering records
Customizing SmartFilters
Connecting to a SmartFilter in another SmartWindow
Using SmartPanels and the SmartToolbar
Using SmartPanels
Navigation SmartPanels
Update SmartPanel
Commit SmartPanel
Customizing SmartPanels
Using SmartToolbars
Customizing SmartToolbars
Transactions and record locking
SmartObject Interactions
General structure of a SmartObject
Directory and file structure
Support include files
Super procedures
Property and prototype include files
Prototype include files
SmartObject file relationships
RUN protocol
RUN statement
Localizing standard SmartObject behavior
ADM properties
ADMProps temp-table and object properties
Get and set functions for object properties
{get} and {set} pseudo-syntax for object properties
Get include file logic
Set include file logic
Using the get and set include files in other Progress code
Special properties
Instance properties
Translatable properties
Functions for accessing properties
Dynamic properties
Advanced ADM Topics
Parameterizing SmartObject instances as variables
Writing local event procedures and functions
Writing a local event procedure
Writing a local event function
Monitoring SmartObject applications
Procedure Object Viewer
Starting the Procedure Object Viewer
Viewing procedure objects
The Application Debugger
Debugger tips
Pro*Spy Plus
AppBuilder requirements for SmartObjects
Using GroupAssign SmartLinks
Developing Your Application's Business Logic
SmartDataObject features and operating characteristics
SmartDataObject query and update operations
Query operations and the RowObject temp-table
Update operations and the RowObjUpd temp-table
Nondata fields in the RowObject and RowObjUpd temp-tables
ADM event procedures and functions in the SmartDataObject
Opening a database query
Dynamic query manipulation
assignQuerySelection( )
addQueryWhere( )
removeQuerySelection( )
columnQuerySelection( )
setQuerySort( )
setQueryWhere( )
Data transfer in queries
Error handling
Initiating update operations
Getting and setting properties
Signaling data availability
SmartDataObjects and SmartLinks
Validation procedures
Data Dictionary validation
Field-level validation procedures
Record-level validation procedures
Transaction-level validation procedures
Database trigger procedures
Running SmartDataObjects in a distributed environment
Setting up the SmartDataObject master for conditional compilation
AppBuilder modifications to the SmartDataObject master
Initializing the SmartDataObject
Managing SmartDataObjects in distributed mode
SmartDataObject deployment files
Service choices and SmartDataObject execution
AppServer session operating modes and SmartDataObjects
AppServer-related SmartDataObject properties
Running SmartDataObjects from a non-Progress client
Batch-mode operations
Single-row operations
Java applications and SmartDataObjects
Developing ADM Extensions
Introduction
Creating a new class at the bottom of the ADM class hierarchy
Planning issues
Creating the new class files
The Basic tab
The Custom Files tab
Creating the class files
Warnings and error messages
Modifying the new class files
Customizing an existing ADM class
Adding application logic to your new or customized ADM class
Custom class files
Design rules
Adding properties
Writing super procedures
References in super procedures to other procedures
Shared super procedures
Examples
Creating the myviewer class
Creating the myviewer class files
Modifying the myviewer standard class files
Customizing the visual class
Copying the visual custom class files
Modifying the visual custom class files
ADM Standard and Custom Class Files
Container class files
Standard class files
Templates
Custom class files
ADM1 to ADM2 Conversion Utility
Conversion support for ADM SmartObjects in later versions
Code changes to SmartObject container type objects
Additional miscellaneous points
Using the ADM1 to ADM2 conversion utility
Accessing the conversion utility
Defining conversion options
Building the list of files to process
Refining the file selections
Performing the conversion
The Conversion Process
Errors and the conversion utility log file
Reviewing conversion results
Customizing the conversion utility
OpenEdge Development:ADM and SmartObjects
Using the ADM1 to ADM2 conversion utility