Preface
Purpose
Audience
Organization
Using ABL documentation
References to ABL compiler and run-time features
References to ABL data types
Examples of syntax descriptions
Long syntax descriptions split across lines
Complex syntax descriptions with both required and optional elements
Example procedures
Compiling and running the sample classes and procedures
OpenEdge messages
Obtaining more information about OpenEdge messages
Overview
General capabilities and limitations
Capabilities
Limitations
Object model and architecture
Incorporation of the .NET object model
.NET objects on the session object chain
Compile-time access to .NET objects
GUI for .NET run-time architecture
Performance note
Simple example
Accessing and Managing .NET Classes from ABL
Supported features and limitations
Support for .NET classes
Limitations of support for .NET classes
Referencing and instantiating .NET classes
How .NET organizes types for reference
Identifying .NET assemblies to ABL
Referencing .NET class and interface types
Referencing inner classes and interfaces
Referencing arrays of objects
Referencing .NET generic types
Using case sensitivity with .NET objects
Using unqualified .NET type names
Instantiating and managing .NET class instances
Instantiating and obtaining instances of .NET classes
Casting .NET class and interface types
.NET class instances and garbage collection
Accessing .NET class members
Accessing members of .NET interfaces
Accessing static members of a .NET class
Specifying .NET constructor and method parameters
Accessing .NET indexed properties and collections
Accessing .NET indexed properties dynamically
Default indexed properties
Indexed property overloading
Indexed properties in chained references
Working with collections
Handling .NET events
Managing .NET events in ABL
Identifying the events published by a .NET object
Defining handlers for .NET events in ABL
Identifying the signature for an event handler on a third-party .NET object
Identifying the signature for an event handler on an OpenEdge .NET object
Specifying handler subscriptions for .NET events
Managing .NET events from ABL-extended .NET classes
Event handling example
Handling .NET exceptions
Using the ABL error trapping constructs
Using properties and methods on .NET Exception objects
Unique scenarios when handling errors with .NET objects
Raising errors from ABL handlers for .NET events
Handling .NET exceptions raised during display of a .NET form
Raising errors from overridden .NET methods or implemented .NET interface members
Defining ABL-extended .NET objects
Features of ABL-derived .NET classes
Deriving .NET classes in ABL
Accessing inherited members of a .NET base class
Defining new ABL members in a class that inherits from a .NET class
Overriding .NET methods
Overriding .NET abstract properties
Overriding .NET abstract events
Getting type information (reflection)
Managing events for ABL-derived .NET classes
Publishing inherited .NET events
Publishing inherited .NET abstract events
Handling events on controls contained by ABL-derived .NET classes
Features of ABL classes that implement .NET interfaces
Implementing .NET interfaces in ABL
Error handling for ABL-extended .NET classes
Creating and Using Forms and Controls
OpenEdge .NET form and control objects
Commonly-used .NET public form methods, properties, and events
Common .NET public form methods
Common .NET public form properties
Common .NET public form events
Commonly-used .NET public control methods, properties, and events
Common .NET public control methods
Common .NET public control properties
Common .NET public control events
ABL support for managing .NET forms and controls
Initializing and blocking on .NET forms
Preparing to block on .NET forms
Blocking on and processing events for .NET forms
Blocking on non-modal forms
Blocking on modal dialog boxes
Accessing .NET forms using the SESSION system handle
Accessing resource files for .NET forms
Creating custom .NET forms and controls
Sample ABL-derived .NET non-modal form
Sample ABL-derived .NET modal dialog box
Sample ABL-derived .NET MDI form
Sample ABL-derived .NET user control
Binding ABL Data to .NET Controls
ABL and .NET data binding models
ABL data binding
.NET data binding
ABL data binding model for .NET
Extent of integration with .NET controls
Supported .NET controls
Supported ABL data sources
Understanding the ProBindingSource
Constructors
Field lists
Binding to queries
Binding to buffers
Binding to ProDataSets
Special case: unbound class instance
Properties
AutoUpdate and rapid prototyping
Methods
Events
Data binding examples
Query binding example
Buffer binding example
ProDataSet binding example
Programming considerations
1-based or 0-based indexes
Row transactions
Using the Dispose( ) method
Support for Visual Designer
Binding .NET controls to BLOB fields
Binding .NET controls to CLOB fields
Working with the NoLOBs property
Using the .NET DataMember property
Managing data updates
Enabling and disabling updates
Sorting
Using the UltraGrid's BeforeSortChange and AfterSortChange events
Sorting child tables for a recursive data-relation
Using the SortRequest event
Maintaining currency with the Position property
Synchronizing data
Reopening queries
Manipulating result list entries
Using the Refresh methods
Handling user interface events
Checking for updates
Writing screen values to the data source object
Finding the proper child query in a ProDataSet
Using the CreateRow event
Using the CancelCreateRow event
Using the OffEnd event
Using the PositionChanged event
Example of an updatable grid
Definitions
Main block
Internal procedures and functions
Using .NET Forms with ABL Windows
Features for using forms and windows together
ABL session architecture for forms and windows
Shadow windows
FormProxy objects
Embedded windows
Parenting forms and windows to each other
Embedding ABL windows in .NET forms
Elements of an embedded ABL window
Using the ABL features to embed a window
Embedding a single window in an MDI child form
Embedding one or more windows in a .NET form
Behavior of forms with embedded windows
Handling form and window input
Common event handling for forms and windows
Common focus detection for forms and windows
Managing form and window run-time behavior
Configuring common session features
Palette management
Font management
Regional settings: localization
OpenEdge Installed .NET Controls
OpenEdge Controls
Microsoft .NET UI Controls
OpenEdge Ultra Controls for .NET
Using .NET data types in ABL
Overview of .NET data types in ABL
Value types in ABL
Reference types in ABL
General ABL support for .NET types
Support for .NET mapped object and primitive data types
Support for .NET object types
Support for .NET value types as objects
Implicit data type mappings
Implicit array mappings
An ABL INTEGER larger than its .NET destination
Negative ABL values and unsigned .NET destinations
ABL DECIMAL and .NET System.Decimal
Default matching ABL and .NET data types
An ABL INT64 larger than its .NET System.UInt32 destination
An ABL DECIMAL larger than its .NET System.UInt64 destination
ABL DECIMAL and .NET System.Double or System.Single
Explicit data type mappings
Assigning between ABL primitive or array types and System.Object
Passing ABL data types to .NET constructor and method parameters
Indicating explicit .NET data types
Data type widening
Getting .NET data member, property, and method return values
.NET boxing support
Automatic boxing
Manual boxing
.NET null values and the ABL Unknown value (?)
Support for ADO.NET DataSets and DataTables
Accessing and using .NET enumeration types
Enumerations in .NET
.NET enumerations in ABL
Using the Progress.Util.EnumHelper class
Working with .NET generic types
Identifying generic type parameters
Identifying constraints on generic type parameters
Accessing and using .NET arrays
Accessing .NET arrays
Array mapping: conversion between ABL arrays and .NET arrays
Array assignment
Example: Mapping an ABL array to a .NET array
Example: Accessing a .NET array
Notes on using the ProBindingSource
Determining what to bind to the ProBindingSource
Repopulating data in an ABL data source bound to a ProBindingSource
Using the ProBindingSource AddNew( ) and Remove( ) methods
Preface
Using the ProBindingSource AddNew( ) and Remove( ) methods