©
2001 Progress Software Corporation. All rights reserved.
Progress
®
software products are copyrighted and all rights are reserved by Progress Software Corporation.
This manual is also copyrighted and all rights are reserved. This manual may not, in whole or in part, be
copied, photocopied, translated, or reduced to any electronic medium or machine-readable form without
prior consent, in writing, from Progress Software Corporation.
The information in this manual is subject to change without notice, and Progress Software Corporation
assumes no responsibility for any errors that may appear in this document.
The references in this manual to specific platforms supported are subject to change.
Progress, Progress Results, Provision and WebSpeed are registered trademarks of Progress Software
Corporation in the United States and other countries. Apptivity, AppServer, ProVision Plus, SmartObjects,
IntelliStream, and other Progress product names are trademarks of Progress Software Corporation.
SonicMQ is a trademark of Sonic Software Corporation in the United States and other countries.
Progress Software Corporation acknowledges the use of Raster Imaging Technology copyrighted by
Snowbound Software 1993-1997 and the IBM XML Parser for Java Edition.
©
IBM Corporation 1998-1999. All rights reserved. U.S. Government Users Restricted Rights — Use,
duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
Progress is a registered trademark of Progress Software Corporation and is used by IBM Corporation in the
mark Progress/400 under license. Progress/400 AND 400
®
are trademarks of IBM Corporation and are used
by Progress Software Corporation under license.
Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the
United States and other countries.
Any other trademarks and/or service marks contained herein are the property of their respective owners.
.
Product Code: 4533
Item Number: 81101;9.1C
May 2001
Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii
Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii
Audience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii
Organization of This Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii
Volume 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii
Volume 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxv
How to Use This Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxvii
WebSpeed Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxvii
Typographical Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxviii
Syntax Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxix
Example Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xliii
Progress Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xlvi
Other Useful Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xlvii
Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xlvii
Development Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xlix
Reporting Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . l
4GL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . li
Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . li
DataServers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . lii
SQL-89/Open Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . lii
SQL-92 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . liii
Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . liii
WebSpeed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . liv
Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . lv
1. Introducing the Progress 4GL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–1
1.1 What Is a 4GL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–2
1.1.1 A Powerful Application Builder . . . . . . . . . . . . . . . . . . . . . . . . . 1–2
1.1.2 More Complex Applications Supported . . . . . . . . . . . . . . . . . . 1–3
Contents
iv
1.1.3 Less Development Effort Required . . . . . . . . . . . . . . . . . . . . . . 1–4
1.1.4 Less Platform Knowledge Required . . . . . . . . . . . . . . . . . . . . . 1–6
1.2 Progress—The Flexible and Complete 4GL . . . . . . . . . . . . . . . . . . . . . . 1–6
1.2.1 Flexibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–7
1.2.2 Consistency. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–7
1.2.3 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–10
1.2.4 Interoperability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–10
1.2.5 Connectivity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–11
1.2.6 Portability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–11
1.2.7 Localizability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–12
1.3 Understanding Progress Syntax and Semantics . . . . . . . . . . . . . . . . . . . 1–12
1.3.1 Elements of Progress Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . 1–12
1.3.2 Blocks and Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–15
1.3.3 Block Context and Resource Scope . . . . . . . . . . . . . . . . . . . . . 1–16
1.3.4 Compile-time Versus Run-time Code . . . . . . . . . . . . . . . . . . . . 1–19
1.4 Compile-time Versus Run-time Execution . . . . . . . . . . . . . . . . . . . . . . . . 1–26
1.4.1 Compile-time Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–26
1.4.2 Run-time Execution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1–27
2. Programming Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2–1
2.1 Procedure- and Event-driven Programming . . . . . . . . . . . . . . . . . . . . . . 2–2
2.2 Flow of Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2–2
2.2.1 Program Execution in a Procedure-driven Program . . . . . . . . . 2–2
2.2.2 Program Execution in an Event-driven Program . . . . . . . . . . . 2–5
2.3 Program Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2–8
2.3.1 Program Structure in a Procedure-driven Program. . . . . . . . . . 2–8
2.3.2 Program Structure in an Event-driven Program . . . . . . . . . . . . 2–9
2.4 When to Use the Procedure-driven and Event-driven Models . . . . . . . . 2–12
3. Block Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–1
3.1 Blocks and Their Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–2
3.1.1 REPEAT, FOR, and DO Blocks . . . . . . . . . . . . . . . . . . . . . . . . 3–2
3.1.2 Procedure Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–2
3.1.3 Trigger Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–3
3.1.4 EDITING Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–3
3.1.5 Block Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–3
3.1.6 Looping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–5
3.1.7 Record Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–6
3.1.8 Frame Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–7
3.1.9 Record Scoping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–10
3.1.10 Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–17
3.1.11 Error Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–18
3.2 Procedure Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–19
3.3 External Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–20
Contents
v
3.3.1 Procedure Filenames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–20
3.3.2 Standard Execution Options . . . . . . . . . . . . . . . . . . . . . . . . . . 3–21
3.3.3 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–21
3.3.4 Procedure Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–23
3.3.5 Procedure Context and the Procedure Call Stack . . . . . . . . . . 3–23
3.3.6 Shared Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–25
3.3.7 Procedure Handles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–28
3.4 Internal Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–30
3.4.1 Internal Procedure Definition . . . . . . . . . . . . . . . . . . . . . . . . . . 3–30
3.4.2 Internal Procedure Execution . . . . . . . . . . . . . . . . . . . . . . . . . 3–31
3.4.3 Internal Procedure Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–31
3.4.4 Standard Execution Options . . . . . . . . . . . . . . . . . . . . . . . . . . 3–31
3.4.5 Internal Procedures and Encapsulation . . . . . . . . . . . . . . . . . . 3–32
3.4.6 Shared and Local Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–33
3.4.7 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–35
3.4.8 Internal Procedures and the Call Stack . . . . . . . . . . . . . . . . . . 3–37
3.5 Persistent and Non-persistent Procedures . . . . . . . . . . . . . . . . . . . . . . 3–37
3.5.1 Advantages of Persistent Procedures . . . . . . . . . . . . . . . . . . . 3–38
3.5.2 Creating Persistent Procedures . . . . . . . . . . . . . . . . . . . . . . . . 3–38
3.5.3 Working with Persistent Procedures . . . . . . . . . . . . . . . . . . . . 3–39
3.5.4 Deleting Persistent Procedures . . . . . . . . . . . . . . . . . . . . . . . . 3–41
3.5.5 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–42
3.5.6 Persistent Procedure Context and Shared Objects . . . . . . . . 3–44
3.5.7 Run-time Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–45
3.5.8 Transaction Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–45
3.5.9 Condition Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–46
3.5.10 CURRENT–LANGUAGE Changes . . . . . . . . . . . . . . . . . . . . . 3–46
3.6 User-defined Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–47
3.6.1 Locally Defined User-defined Functions . . . . . . . . . . . . . . . . . 3–48
3.6.2 Externally Defined User-defined Functions . . . . . . . . . . . . . . . 3–51
3.6.3 Remotely Defined User-defined Functions . . . . . . . . . . . . . . . 3–52
3.7 Procedure Overriding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–52
3.7.1 Feature Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–53
3.7.2 Super Procedure Prototyping . . . . . . . . . . . . . . . . . . . . . . . . . 3–55
3.7.3 Programming Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3–57
4. Named Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–1
4.1 Feature Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–2
4.2 Programming Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4–3
5. Condition Handling and Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5–1
5.1 Progress Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5–2
5.2 Rules About UNDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5–3
5.2.1 Infinite Loop Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5–4