Preface
Purpose
Audience
Organization
Using this manual
Typographical conventions
Examples of syntax descriptions
OpenEdge messages
Introduction
OpenEdge Application Development Model
Concepts and terminology
External versus internal procedures
AppBuilder objects
What is smart about SmartObjects?
Visible versus nonvisible objects
Widgets
Reading and writing ABL widgets
Inter-object communication: signatures
Anatomy of a database application
Working with AppBuilder
Single-window or multi-window design?
Designing for character-based environments
Building an application in AppBuilder
AppBuilder Interface
Starting and stopping AppBuilder
Starting from the operating system
Stopping AppBuilder
AppBuilder for Web-based applications
AppBuilder main window
Current‑object fields
Status bar
Menu bar
File menu
File→ New
File→ Open
File→ Save
File→ Save As
File→ Save All
File→ Print
Edit menu
Edit→ Undo
Edit→ Cut
Edit→ Copy
Edit→ Paste
Edit→ Duplicate
Edit→ Delete
Edit→ Copy to FIle
Edit→ Insert from File
Edit→ Tab Order
Edit→ Goto Page
Edit→ Assign Widget IDs
Compile menu
Compile→ Run
Compile→ Check Syntax
Compile→ Debug
Compile→ Code Preview
Compile→ Close Character Run Window
Tools menu
Tools→ New Procedure Window
Tools→ New ADM Class
Tools→ TEMP-DB Maintenance Tool
Tools→ Property Sheet
Tools→ Procedure Settings
Tools→ Color
Tools→ Database Connections
Options menu
Options→ Preferences
Options→ Editing Options
Options→ Snap to Grid
Options→ Display Grid
Layout menu
Layout→ Alternate Layout
Layout→ Center Left‑to‑Right in FrameLayout→ Center Top‑to‑Bottom in Frame
Layout→ Even Spacing Left‑to‑rightLayout→ Even Spacing Top‑to‑Bottom
Layout→ Move‑to‑TopLayout→ Move‑to‑Bottom
Layout→ Align
Window menu
Window→ Code Section Editor
Window→ Hide Object Palette
Window→ Properties Window
Window→ OCX Property Editor
Help menu
Help→ OpenEdge Master Help
Help→ AppBuilder Help Topics
Help→ Messages
Help→ Recent Messages
Help→ Cue Cards
Help→ About AppBuilder
Tool bar
Object Palette
Placing objects from the Object Palette
Multiple placements
Changing your mind
Object Palette options
Customizing the Object Palette
The TEMP-DB database
Creating a TEMP-DB database
Using the TEMP-DB Maintenance tool
TEMP-DB control records
Defining a new temp-table
Importing temp-table definitions
Viewing temp-table details
Editing temp-table definitions
Verifying a definition against its source
Rebuilding the TEMP-DB schema
Setting your preferences
AppBuilder preferences
WebSpeed tab
Grid Units tab
Print tab
Widget ID tab
Section Editor preference options
Color Coding Setup dialog box
Alias setup
Options
Workspaces: design windows and source-code editors
Editing source code safely: the Section Editor
Opening the Section Editor
Choosing a section to edit
Using the Section Editor
Cutting, copying, and pasting text
Finding and replacing text
Transforming text
Inserting text from lists
Inserting whole files
Saving your changes
Undoing your changes
Deleting whole sections
Inserting text-string tokens from lists
Database field names
Event names
Procedure/function calls
Preprocessor names
Queries
Object names
Filenames
Configuring look-and-feel: object properties
Inspecting a procedure file
Test-driving your design
Saving your work
Organizer Objects
Introduction to organizer objects
Organizer object roles
Creating a new procedure-based organizer instance
SmartWindows
Configuring SmartWindow visual properties
Opening the property sheet for the underlying window
Minimal configuration changes
Miscellaneous properties (other settings)
Menus
Context‑sensitive help
String attributes, window color, status area font
Advanced properties
SmartDialogs
Configuring SmartDialog visual properties
Minimal configuration changes
Miscellaneous properties (other settings)
Advanced properties
Configuring SmartDialog procedure settings
SmartFrames
Configuring SmartFrame visual properties
Minimal configuration changes
Miscellaneous properties (other settings)
Advanced properties
Configuring SmartFrame procedure settings
Basic windows
Basic dialogs
Basic frames
Creating and placing a frame
Configuring frame properties
Rectangles
Creating and placing a rectangle
Configuring rectangle properties
Minimal configuration changes
Border width (edge pixels)
Geometry
Miscellaneous properties (other settings)
Advanced properties
Simple SmartContainers
Creating and populating a Simple SmartContainer
Placing and configuring a SmartContainer module
As an independent module
As a child module
Creating paged layouts
Page identifiers
Special pages
Design page
Page 0 (zero)
Startup page
Why only SmartObjects?
Paging with SmartFolders
Paging without SmartFolders
Paging whole windows
Data-Access Objects
Introduction to data-access objects
DataViews
SmartDataObjects
Static SmartDataObjects
Dynamic SmartDataObjects
Creating a SmartDataObject master
Design considerations
Creating the master
Editing a SmartDataObject master
Creating a SmartDataObject instance
Configuring a SmartDataObject instance
Selecting database fields for browsing
Creating calculated fields
Data validation limitation
Solving the problem
Forcing server‑side validation
Using the dynamic SmartDataObject
SmartBusinessObject
Creating and placing a SmartBusinessObject
Populating and configuring a SmartBusinessObject
Synchronizing SmartDataObjects using DATA links
Configuring a SmartBusinessObject instance
SmartFilters
Configuring SmartFilter properties
Data
Style
String Operators
Operator View As
Size & Position
Field Properties
Making changes to the data stream
Creating a freestanding query object
Defining and editing queries using Query Builder
Table mode
Join mode
Where mode
Sort mode
Options mode
Editable find, join, and field list criteria
Editable query tuning options
Data-Display/Capture Objects
Introduction to data-display objects
SmartDataBrowsers
Dynamic SmartDataBrowser
Creating a dynamic SmartDataBrowser instance
Static SmartDataBrowser
Creating a SmartDataBrowser master
Configuring SmartDataBrowser properties
Minimal configuration
Query and fields
Geometry
Advanced properties
Editing a SmartDataBrowser master
Creating and placing a SmartDataBrowser instance
Configuring a SmartDataBrowser instance
Scrolling to the last record in the data stream
SmartDataViewers
Creating a SmartDataViewer master
Adding and removing SmartDataViewer fields
Removing SmartDataViewer fields
Adding SmartDataViewer fields
Configuring SmartDataViewer properties
Minimal configuration
Rearranging the layout
Other property changes
Advanced properties
SmartDataFields
Placing and configuring a SmartDataField instance
SmartSelects
Placing a SmartSelect instance
Configuring a SmartSelect instance
Data source
Data
Properties
Optional
Visualization
Displayed field attributes
Geometry
Example: assigning a new sales rep
Basic data browsers
Creating a basic data browser instance
Configuring a basic data browser instance
Minimal configuration
Query and fields
Geometry
Advanced properties
Combo boxes
Creating a basic combo box instance
Configuring a basic combo box instance
Minimal configuration
Size and style configuration
Advanced properties
Operating a basic combo box
Clearing the list buffer
Adding a line item
Adding a user-supplied line item
Deleting a line from the list
Finding a line or item in the list
Creating an ActiveX combo box instance
Configuring an ActiveX combo box instance
Minimal configuration
Additional property configuration
Code configuration
Basic data viewers
Creating a basic data viewer instance
Configuring a basic viewer instance
Multi-line editors
Creating an editor instance
Configuring an editor instance
Minimal configuration
Edit‑buffer size
Help
Geometry
Advanced properties
Fill-ins (single-line editors)
Creating a fill-in instance
Configuring a fill-in instance
Minimal configuration
Internal data format
Help
Geometry
Advanced properties
Radio button sets
Creating a radio-set instance
Configuring a radio-set instance
Minimal configuration
Help
Geometry
Advanced properties
Selection lists
Creating a selection list instance
Configuring a selection list instance
Minimal configuration
Help
Geometry
Advanced properties
Slider controls
Creating a slider-control instance
Configuring a slider control instance
Minimal configuration
Help
Geometry
Advanced properties
Spin controls (ActiveX)
Creating a spin control instance
Configuring a spin‑control instance
Minimal configuration
Optional configuration
Toggle boxes (check boxes)
Creating a toggle box instance
Configuring a toggle box instance
Minimal configuration
Help
Geometry
Advanced properties
Data-Communication Objects
SmartB2BObjects
XML schema and mapping files
Mapping options
Mapping to a column
Mapping to a function in the SmartB2BObject
Mapping to a procedure in the data-access object
Mapping to a function in the data-access object
Mapping to a whole data-access object.
XML schema Mapping Tool
Starting the XML Mapping Tool
Creating an XML map file
Selecting SmartObjects for mapping
Mapping schema nodes
Creating a master SmartB2BObject
Creating and placing a SmartB2BObject instance
Configuring a SmartB2BObject instance
Outgoing instance properties
Incoming instance properties
SmartSender and SmartReceiver objects
Creating and completing a SmartSender master
Placing and configuring a SmartSender instance
SmartRouters
Handling multiple document types
Callable document-handlers
Creating a document-handling package
Creating a document-routing package
SmartProducers and SmartConsumers
Creating and placing a SmartProducer instance
Configuring a SmartProducer instance
Creating and placing a SmartConsumer instance
Configuring a SmartConsumer instance
Batch mode: starting and stopping a SmartConsumer
Stopping a SmartConsumer
The message-handling relationship: internal details
Outbound message and reply-handling process
Outbound message and reply-handling process
Inbound message-handling and reply process
Example of sendHandler code
Example of sendHandler override code
Example of receiveReplyHandler code
Example of receiveHandler code
Example of receiveHandler override code
Example of sendReplyHandler code
Example ofsendReplyHandler override code
Control Objects
Introduction to control objects
SmartToolbars
Placing a SmartToolbar
Configuring a SmartToolbar instance
Creating a new SmartToolbar
Adding a filter-control window
SmartPanels
Creating and configuring a SmartPanel instance
Navigation SmartPanel properties
Save/Update SmartPanel properties
Transaction SmartPanel properties
Basic buttons
Creating a button instance
Configuring a button instance
Minimum configuration
Advanced properties
Setting a button label
Other Objects
Simple (undefined) SmartObjects
ActiveX (OCX) objects
Creating an ActiveX object instance
Generic ActiveX event handlers
ActiveX (OCX) properties data
Static images
Minimal configuration
Help
Geometry
Advanced properties
Static text
Timer objects (ActiveX)
Frequently Used Dialogs
ActiveX control frame properties
Advanced properties
ADM pages manager
Reviewing the list of SmartObjects assigned to a page
Setting the design or startup page
Moving a SmartObject between two pages
Exchanging the contents of two pages
Deleting a SmartObject from a page
Deleting a page and all its SmartObjects
Advanced procedure settings
Advanced properties
Colors selector and editor
Choosing colors
Defining new colors
Custom lists naming
Database field selector
Method library includes list
Procedure settings
Properties window
SmartLinks editor
SmartInfo
SmartObject properties
Creating a SmartObject placeholder
String attributes
Traversal-path editor
Temp-tables maintenance
Text style selector and editor
Choosing a type style
Defining a type style
Multiple Layouts
Why use multiple layouts?
What is a layout?
Two types of layouts
Master layout
Alternate layout
Standard layouts
Layouts at design time
Alternate layout scope
Creating alternate layouts
Selecting a predefined alternate layout
Modifying layouts with layout inheritance
Layout inheritance behavior at run time
Character layout inheritance
Overriding layout inheritance
Layout inheritance behavior at design time
Re-establishing layout inheritance
How multiple layouts work: a look at the code
Run-time properties and AppBuilder settings
Layout cases internal procedure
Enable_UI internal procedure
Alternate layout limitations
Modifiable properties
Text widgets in alternate layouts
Combo boxes in alternate layouts
SIZE-TO-FIT setting
Switching between layouts at run time
Simulating character applications
Running character applications
Character client connection issues
Double-byte characters
Multiple layouts for SmartObjects
Creating SmartObject alternate layouts
Modifying SmartObject layouts
Setting layout options for SmartObject instances
Applying SmartObject layouts at run time
Setting the initial layout
Changing layouts
Customizing AppBuilder
Custom object files and extended features
Creating custom object files
General coding rules
Entry types
Adding a button to the Object Palette
Adding a SmartObject to a palette button pop-up menu
Adding a new template
Adding a widget to a palette button pop-up menu
Sample widget entry
Creating extended features (XFTRs)
The &ANALYZE-SUSPEND directive for XFTRs
The event-mapping comment
The compilable code comment
The ending comment
The &ANALYZE-RESUME directive for XFTRs
How AppBuilder runs XFTR event handlers
AppBuilder's API
Context IDs
Naming convention
AppBuilder’s API summary
Add/remove SmartLinks (adeuib/_ablink.p)
Input parameters
Example
Access section (adeuib/_accsect.p)
Input parameters
Input‑output parameters
Return values
Examples
AppBuilder database table names (adeuib/_dbtbnam.p)
Input parameters
Output parameter
Example
AppBuilder information (adeuib/_uibinfo.p)
Input parameters
Other options
SECTIONS function
HTML-FILE-NAME
BROKERURL
REMOTE
WEBBROWSER
DATAOBJECT
DATAOBJECT-INCLUDE
PALETTE-ITEM
Output parameter
AppBuilder create (adeuib/_uib_crt.p)
Input parameters
Special cases of pc_custom
Output parameter
Return values
AppBuilder delete (adeuib/_uib_del.p)
Input parameter
Return values
AppBuilder dialog (adeuib/_uib_dlg.p)
Input parameters
Input/output parameters
Window save (adeuib/_winsave.p)
Input parameters
Example
Reserved names (adeuib/_namespc.p)
Input parameters
Example using AppBuilder's API
OpenEdge Development:AppBuilder
Example using AppBuilder's API