Preface
Purpose
Audience
Organization
Typographical conventions
Examples of syntax descriptions
Long syntax descriptions split across lines
Complex syntax descriptions with both required and optional elements
Example procedures
OpenEdge messages
Obtaining more information about OpenEdge messages
Introducing the OpenEdge DataSet
Overview
Capabilities
ProDataSets and Microsoft ADO.NET DataSets
Standard ABL components
ProDataSet goals
Architecture
Using ProDataSets
ProDataSets and temp-tables
Temp-tables compared to database tables
Static or dynamic temp-tables
Passing temp-tables
ProDataSet comparison
ProDataSet relations
Data sources
FILL operations
Integrating business logic into ProDataSets using events
Updating a ProDataSet
Typical use cases for ProDataSets
Defining a static ProDataSet
Static ProDataSet and its Data-Relations
Using the REPOSITION Data-Relation
Example with REPOSITION not set
Example with REPOSITION set: loading
Example with REPOSITION set: navigation
Defining an inactive Data-Relation
Getting the handle to a static ProDataSet
Data-Source object
Defining a static Data-Source
Attaching Data-Sources
Example
Data-Source as a separate object
Whether or not to define a query for a Data-Source
When you would not use a Data-Source at all
Attaching a Data-Source to a ProDataSet buffer
Using BUFFER-COPY and BUFFER-COMPARE with a ProDataSet
Populating a ProDataSet
Filling the entire ProDataSet
Partially filling a ProDataSet
Defining a query on a child table
Recursively filling a ProDataSet
Summary of a FILL
Controlling the filling of each table
Testing the Order ProDataSet
Object life cycles with ProDataSets
Summary
ProDataSet Parameters
Passing a ProDataSet as a parameter
Passing a ProDataSet with BY-REFERENCE or BIND
Passing a ProDataSet parameter by reference
INPUT BY-REFERENCE can be like INPUT-OUTPUT
OUTPUT BY-REFERENCE can be like OUTPUT APPEND
ProDataSet instance passed BY-REFERENCE must exist in the caller
Main block references ignored in internal procedures
Specifying BY-VALUE in the called procedure
Importance of optimized code with BY-REFERENCE
Passing a ProDataSet parameter by binding
ProDataSet parameter table
Local parameter passing example
Deleting a dynamic ProDataSet passed as a parameter
Reducing the data to be passed in a parameter
Specifying the session startup parameter for all temp-table parameters
Setting attributes for individual temp-table parameters
Passing a ProDataSet with APPEND
Extending the sample procedure to pass a parameter
ProDataSets Events
Event procedures for ProDataSets
Defining FILL events
Using event procedures in the sample procedure
Summary
Dynamic ProDataSet Basics
Creating a dynamic ProDataSet
Passing ProDataSets
Deleting a dynamic ProDataSet
Specifying member buffers
Creating Data-Relation objects
Creating a dynamic Data-Source
Duplicating ProDataSets with the CREATE-LIKE method
Sample procedure: creating a dynamic ProDataSet
Summary
ProDataSet Attributes and Methods
Accessing the handle of a ProDataSet
Accessing a member buffer of a ProDataSet
Sample procedures: using attributes and methods
Accessing Data-Relations
Using Data-Source attributes and methods
Enhanced query support for ProDataSet buffers
QUERY attribute for Data-Sources, Data-Relations, and buffers
KEYS attribute for buffers
TOP-NAV-QUERY attribute
Session attributes for ProDataSets, Data-Sources, and queries
Other ProDataSet methods
Building a dynamic user interface from a ProDataSet
Using the SYNCHRONIZE method
Sample procedure: adding REPOSITION and SYNCHRONIZE
Summary
Updating Data with ProDataSets
Tracking changes in the temp-tables of a ProDataSet
ROW-STATE attribute
ROW-STATE function
Special restrictions on TRACKING-CHANGES
Creating or defining the before-tables
Locating rows in the before- and after-tables
Extending the sample procedures to track changes
Comparison with change tracking in .NET
Processing changes
GET-CHANGES method
MERGE-CHANGES and MERGE-ROW-CHANGES methods
ACCEPT-CHANGES and ACCEPT-ROW-CHANGES methods
REJECT-CHANGES and REJECT-ROW-CHANGES methods
SAVE-ROW-CHANGES method
DATA-SOURCE-ROWID attribute
MARK-ROW-STATE method
MARK-NEW method
Special support for change conflicts
Using the SAVE-WHERE-STRING attribute
Extending the samples to GET, SAVE, MERGE, and ACCEPT changes
Using the SAVE-ROW-CHANGES method in the update procedure
Using the MERGE-CHANGES method in the window procedure
Setting and using ERROR, ERROR-STRING, and REJECTED
Using the error attributes in the sample procedures
ProDataSet change events
Applying callback procedures programmatically
Advanced Events and Attributes
Query OFF-END Event
Buffer BATCH-SIZE and LAST-BATCH attributes
NEXT-ROWID attribute
RESTART-ROWID attribute
RESTART-ROW attribute
ProDataSet buffer FIND-FAILED event
SYNCHRONIZE event for a ProDataSet buffer
Successive loading of ProDataSet data
Doing a partial ProDataSet FILL to return Order headers
Forcing the ProDataSet to be passed BY-VALUE
Filtering the top-level query based on the user selection
Returning the partial ProDataSet to the client
Retrieving detail for the ProDataSet
COPY-DATASET and COPY-TEMP-TABLE methods
Replace-mode argument
Loose-copy-mode argument
Pairs-list argument
Current-only argument
Name-prefix argument
Using COPY-DATASET with a dynamic target ProDataSet
Using the COPY-DATASET method for successive FILLs
Summary
Batching Data with ProDataSets
Overview
Using the include-field list to limit the fields copied into the table
Setting up an event handler for the OFF-END query event
Setting up an event handler for the FIND-FAILED buffer event
Summary
Advanced Read Operations
ProDataSets as a data access layer
Defining the right internal representation
Defining the right granularity for your ProDataSets
Defining the right top-level table for a ProDataSet
ProDataSets with more than one top-level table
Dynamic versus static ProDataSets
Sharing ProDataSet and temp-table definitions between procedures
Building a data access support procedure
Data access procedure example
Caching complex derived data in a ProDataSet
Summary of the data access procedure
Caching data using a ProDataSet
Using a subset of the tables in a ProDataSet
Writing the server procedure
Building the user interface for the new ProDataSet
Summary of caching data using a ProDataSet
Creating views with ProDataSets as Data-Sources
Sample procedure: creating a view
Summary
Advanced Update Operations
Creating a data access procedure for the Order ProDataSet
Building a business entity procedure to support the ProDataSet
Building general update procedures for client and server
Building the client side change handler
Building the server side change handler
Changing the window procedure to use the new procedures
Running standard validation procedures on update
Summary
Data Access and Business Entity Objects
ProDataSets and the OpenEdge Reference Architecture
Data Access object
Isolating the data source from the internal view of data
Elements of a Data Access object
ProDataSet and temp-table definitions
Data-Source queries
Data-Source definitions
FILL event procedures
Functions to attach and detach the Data-Sources from a ProDataSet
Data retrieval API
Specialized update API
Data Access object template
Business Entity object
Elements of a Business Entity
ProDataSet and temp-table definitions
Relationship to the Data Access object
Attaching the Data-Sources and callbacks
Defining a data retrieval API
Defining a generic update API
Validation procedures for the generic update API
Defining a custom update API
Managing Business Entity instances
Business logic options
Standard validation procedures
Accessing other entities in your business logic
Trigger procedure logic
Including context information in Business Entities
Summary
Preface
Summary