OpenEdge Advanced Business Language: Difference between revisions

Content deleted Content added
mNo edit summary
No edit summary
 
(48 intermediate revisions by 42 users not shown)
Line 1:
{{Short description|Business application development language}}
{{Infobox Software
{{Promotional|date=January 2023}}
|name = OpenEdge Advanced Business Language (ABL)
{{Infobox software
|screenshot =
| name = OpenEdge Advanced Business Language (ABL)
|caption =
| logo = File:OpenEdge_logo.png
|developer = [[Progress Software Corporation]]
| screenshot =
|latest_release_version = OpenEdge 11.7
| caption =
|latest_release_date = {{start date and age|2017|03|31}}
| developer = [[Progress Software Corporation]]
|operating_system = [[Cross-platform]] (see below)
| latest_release_version = OpenEdge 12.8
|genre = [[Relational database management system|RDBMS]]
| latest_release_date = {{start date and age|2024|01|21}}
|license = Proprietary
| operating_system = [[Cross-platform]] (see below)
|website = http://www.progress.com
| genre = [[Relational database management system|RDBMS]]
| license = Proprietary
| website = {{URL|https://www.progress.com/openedge}}
}}
 
'''OpenEdge Advanced Business Language''', or '''OpenEdge ABL''' for short, is a business application development language created and maintained by [[Progress Software|Progress Software Corporation]] (PSC). The language, typicallyTypically classified as a [[fourth-generation programming language]], usesit utilizes an English-like syntax to simplify software development.<ref name="p2">Campbell, John, ''Programmer's Progress, a guide to the progress language.'' white star software, 1991</ref> The language was called '''PROGRESS''' or '''Progress 4GL''' up until version 9, but in 2006, [[Progress Software Corporation|PSC]] changed the name to OpenEdge Advanced Business Language (OpenEdge ABL), in order to overcome a presumed industry perception that 4GLs were less capable than other languages.<!-- year? --><ref name="introABL">Salvador Vinals, Introducing OpenEdge Advanced Business Language (ABL), PSC whitepaper, 2007</ref> A subset of the language, called ''SpeedScript'', is used in the development of web applications.<ref name="webspeedcomplete">Crawford, G. ''WebSpeed Complete'', Innov8 Computer Solutions, {{ISBN|0-9718679-0-9}}</ref>
 
OpenEdge ABL helps developers to develop applications optionally using its own integrated [[relational database]] and [[programming tool]]s. These applications are portable across computing systems and allow access to various popular data sources without having to learn the underlying [[data access]] methods. This means that the [[end-user]] of these products can be unaware of the underlying architecture.
 
By combining a fourth -generation language and relational database, OpenEdge ABL allows the use of the [[Rapidrapid Applicationapplication Developmentdevelopment]] (RAD) model for developing software. A programmer and even end users can do [[rapid prototyping]] using the integrated and GUI tools of the development environment.
 
==History==
The original Progress 4GL was designed in 1981 as an architecture-independent language and integrated database system that could be used by non-experts to develop business applications by people who were not computer scientists but were knowledgeable in their business ___domain. At that time, business applications were often written in [[COBOL]] (for machines like corporate [[IBM]] mainframes) and sometimes in [[C (programming language)|C]] (for departmental minicomputers running the UNIX operating system). When the IBM PC became popular, it developed a need for business software that could be used on those and other inexpensive computers. The Progress system was created to be used on both IBM PC machines running DOS and on a variety of computers that could run UNIX and [[minicomputer]] operating systems such as [[OpenVMS]].
 
;1984: First Commercial Release (Version 2.2)
 
The original Progress 4GL was designed (in 1981) as an architecture independent language and integrated database system that could be used by non-experts to develop business applications by people who were not computer scientists but were knowledgeable in their business ___domain. At the time, business applications were often written in COBOL (for machines like corporate IBM mainframes) and sometimes in C (for departmental minicomputers running the UNIX operating system). When the IBM PC became popular, there developed a need for business software that could be used on those and other inexpensive computers. The Progress system was created to be used on both IBM PC machines running DOS and on a variety of computers that could run UNIX.
 
;1989: Version 5
;1990: Version 6
;1993: Version 7
;1995: Version 8
;1998: Version 9
;December 10, 2002: Progress Dynamics 2.0 announced - the application environment for the OpenEdge business platform<ref>[http://newsroom.progress.com/phoenix.zhtml?c=86919&p=irol-newsArticle&ID=362695 Progress Dynamics 2.0 announced]</ref>
;February 17, 2004: OpenEdge 10 announced<ref>[http://newsroom.progress.com/phoenix.zhtml?c=86919&p=irol-newsArticle&ID=495816 OpenEdge 10 announcement]</ref>
;2005: OpenEdge Studio packages<ref>[http://www.psdn.com/library/servlet/KbServlet/download/1210-102-1045/woe.pdf Progress OpenEdge Studio]</ref>
:* Progress Version 9
:* Progress WebClient
:* Progress Dynamics Version 2.1
;February 8, 2006: OpenEdge 10.1 announced - addition of object-oriented extensions to ABL, and new auditing service<ref>[http://newsroom.progress.com/phoenix.zhtml?c=86919&p=irol-newsArticle&ID=814427 OpenEdge 10.1 announcement]</ref>
;February 13, 2007: OpenEdge 10.1b announced - adds support for 64-bit data formats<ref>[http://newsroom.progress.com/phoenix.zhtml?c=86919&p=irol-newsArticle&ID=962541 OpenEdge 10.1b announcement]</ref>
;April 15, 2008: OpenEdge 10.1c announced - first business application development platform to support IPv6<ref>[http://newsroom.progress.com/phoenix.zhtml?c=86919&p=irol-newsArticle&ID=1129674 OpenEdge 10.1c announcement]</ref>
;November 3, 2008: OpenEdge 10.2A announced -New OpenEdge GUI for .NET that allows developers to create modern WinForms-style UI's without leaving the OpenEdge environment.
;December 2009: OpenEdge 10.2B release providing improved OpenEdge GUI .Net Integration and additional online database features.
 
'''December 2011''' <br>[http://www.progress.com/en/inthenews/progress-software-un-48648.html OpenEdge 11.0 release] introducing patent-pending multi-tenancy, multi-Cloud deployment options and extended platform support.
 
'''June 2012:'''<br> [http://www.progress.com/en/inthenews/progress-software-an-62602.html OpenEdge 11.1 release] providing performance and productivity tools for the development of SaaS (software as a service) and Cloud applications. It also delivers stronger security coupled with simplified user authentication.
 
'''February 2013:'''<br> [http://www.progress.com/en/inthenews/new-progress-softwar-65552.html OpenEdge 11.2 release] provided enhanced mobility capabilities through: visual designer and UI toolkit for phone and tablet applications, REST support for the OpenEdge application server, JavaScript Data Binding support libraries, and write-once, run anywhere support for iOS and Android;
 
'''Summer 2013:'''<br> OpenEdge 11.3 release
 
'''August 2014:'''<br> [http://knowledgebase.progress.com/articles/Article/000052802 OpenEdge 11.4 release] containing horizontal table partitioning and ABL Unit Testing.
 
''' 17 December 2014:'''<br> [http://knowledgebase.progress.com/articles/Article/000056319 OpenEdge 11.5 release] containing the Progress Application Server for OpenEdge.
 
''' 26 October 2015:'''<br> [https://community.progress.com/community_groups/openedge_general/w/openedgegeneral/2744.openedge-11-6-release-notes OpenEdge 11.6 release] containing WebSpeed built into the Progress Application Server.
 
''' 31 March 2017:'''<br> [https://community.progress.com/community_groups/openedge_general/w/openedgegeneral/2912.openedge-11-7-release-notes OpenEdge 11.7 release] containing CDC and Authentication Gateway (Secure Token Service)
 
==Syntax and semantics==
 
Progress ABL is a strongly typed, late-bound, [[English-like programming language]]. Although initially designed as a procedural language, starting with version 10.1 it was enhanced with [[Object-oriented programming|object-oriented]] grammar elements, which can be mixed with the original procedural style. A block of code may have a transaction scoped to it, in which case database changes will be committed when it completes. An error raised within such a block will undo these changes. These defaults may be overridden by the programmer.
 
Simple programs run without a Graphicalgraphical Useruser Interfaceinterface, but there is syntax to create one programatically;programmatically, or programmers can use the provided tools to build one.
 
==Examples==
 
===Hello Worldworld===
{{Main|Hello world program}}
 
{{main|Hello world program}}
The following ABL code creates a window with the text "Hello, World!" and a button labelled "OK".
<sourcesyntaxhighlight lang="progress">
DEFINE VARIABLE w AS HANDLE NO-UNDO.
 
Line 76 ⟶ 42:
HEIGHT = 5
MESSAGE-AREA = FALSE
STATUS-AREA = FALSE.
 
CURRENT-WINDOW = w.
Line 90 ⟶ 56:
WAIT-FOR "CHOOSE" OF btnOK.
DELETE OBJECT w.
</syntaxhighlight>
</source>
 
A message-box can be used to achieve the same effect:
<sourcesyntaxhighlight lang="progress">
MESSAGE "Hello World!"
VIEW-AS ALERT-BOX INFO BUTTONS OK.
</syntaxhighlight>
</source>
Also, you can useThe <code>ERRORINFO</code> parameter controls the message icons, and can be replaced with <code>WARNINGERROR</code> instead ofor <code>INFOWARNING</code> tofor changedifferent the message iconslooks.
 
The simplestmost basic "Hello, World" program, though, is this:
<sourcesyntaxhighlight lang="progress">
DISPLAY "Hello World!".
</syntaxhighlight>
</source>
 
===SQL <code>SELECT</code> equivalent===
 
The [[SQL]] statement:
<sourcesyntaxhighlight lang="sql">
SELECT * FROM customer;
</syntaxhighlight>
</source>
(along with your chosen language connection and display procedures) can be expressed in Progress / ABL as:
<sourcesyntaxhighlight lang="progress">
FOR EACH customer NO-LOCK:
DISPLAY customer.
END.
</syntaxhighlight>
</source>
 
The END statement is optional in a program of this level of simplicity.
 
===SQL <code>UPDATE</code> equivalent===
 
The SQL statement:
<sourcesyntaxhighlight lang="sql">
UPDATE customer
SET salesman = 'Fred'
WHERE custno = 14;
</syntaxhighlight>
</source>
(again, along with your chosen language connection and display procedures) can be expressed in Progress / ABL as:
<sourcesyntaxhighlight lang="progress">
FOR EACH customer WHERE customer.custno = 14 EXCLUSIVE-LOCK:
ASSIGN customer.salesman = 'Fred'.
END.
</syntaxhighlight>
</source>
..
(Some assumptions have been made about indexing, locking and transaction scoping in order to keep this example simple.)
 
Data access in the ABL is record-based, in contrast to the result-set-based processing found in traditional SQL languages. While SQL operations typically act on sets of records, ABL processes one record at a time, similar to using a cursor in SQL.
==Notes==
 
Record-based processing provides a fine-grained locking model, allowing the developer to apply different lock levels (e.g., EXCLUSIVE-LOCK, SHARE-LOCK, or NO-LOCK) when accessing records.
 
This approach can offer predictable memory usage, especially in environments using shared memory connections, where the application and database reside on the same host. In client-server (networked) deployments, however, each record or block of records fetched typically involves a network round trip. For example, with a default prefetch size of 50 records and a network latency of 50 ms, retrieving 1,000,000 records may result in up to 1,000 seconds of latency. This illustrates a potential drawback of record-by-record access in high-latency environments.{{Citation needed|date=August 2025}}
 
==Application areas==
{{Unreferenced section|date=August 2020}}
The language is used in a wide variety of application areas, some examples:
 
* Mortgage and auto loan origination at US banks
* Rental car reservation systems
* Manufacturing ERP
* Wholesale distribution ERP
* Warehouse systems
* Transportation systems
* Commercial service force dispatching
* Security card systems
* Gaming systems (think Las Vegas, not video)
 
OpenEdge can be used for:<ref>{{Cite web |date=2024-01-26 |title=Use Cases of Progress OpenEdge 2024 |url=https://www.trustradius.com/products/openedge/reviews?qs=product-usage |access-date=2024-06-26 |website=www.trustradius.com |language=en-US}}</ref>
* Microsoft Windows GUI (Graphical User Interface)
* WWW programming (Unix and Windows)
* CHUI (CHaracter User Interface) (Unix and Windows)
* JSON and XML appserver programming (Unix and Windows)
* as well background process programming (Unix and Windows).
 
==Notes==
<references/>
 
==References==
 
* Sadd, J. ''OpenEdge Development: Progress 4GL Handbook'', Progress Software Corporation, {{ISBN|0-923562-04-4}}, {{ISBN|978-0-923562-04-5}}
* Kassabgi, G. ''Special Edition : Using Progress'', Que Publishing, {{ISBN|0-7897-0493-5}}
 
== External links ==
* {{Official Website|https://www.progress.com/openedge}}
* [https://community.progress.com/community_groups/openedge_general OpenEdge Community]
* [https://docs.progress.com/category/openedge-information-hub OpenEdge Resource Hub]
* [https://www.progress.com/openedge/whats-new What’s New in OpenEdge]
* [https://riptutorial.com/progress-4gl Getting started with progress-4gl]
 
[[Category:Object-oriented programming languages]]
[[Category:4GLFourth-generation programming languages]]
[[Category:Data-centric programming languages]]
[[Category:Articles with example code]]