OpenEdge Advanced Business Language、略してOpenEdge ABL は、 Progress Software Corporationが作成および保守しているビジネス アプリケーション開発言語です。一般的に第 4 世代プログラミング言語に分類され、ソフトウェア開発を簡素化するために英語のような構文を使用しています。[ 1 ]この言語はバージョン 9 まではPROGRESSまたはProgress 4GLと呼ばれていましたが、2006 年にPSC は、第 4 世代プログラミング言語は他の言語よりも機能が劣るという業界の認識を払拭するために、OpenEdge Advanced Business Language (OpenEdge ABL) に名称を変更しました。[ 2 ]
OpenEdge ABLは、開発者が独自の統合リレーショナルデータベースとプログラミングツールをオプションで使用してアプリケーションを開発できるように支援します。これらのアプリケーションは、様々なコンピューティングシステム間で移植可能であり、基盤となるデータアクセス方法を学習することなく、様々な一般的なデータソースにアクセスできます。つまり、これらの製品のエンドユーザーは、基盤となるアーキテクチャを意識する必要がありません。
OpenEdge ABLは、第4世代言語とリレーショナルデータベースを組み合わせることで、ソフトウェア開発におけるラピッドアプリケーション開発(RAD)モデルの利用を可能にする。
オリジナルの Progress 4GL は、1981 年に、コンピュータの専門家ではないものの、それぞれのビジネス分野に精通した人々がビジネス アプリケーションを開発できるように、アーキテクチャに依存しない言語と統合データベースシステムとして設計されました。当時、ビジネス アプリケーションはCOBOL ( IBMの企業向けメインフレームなどのマシン用) で記述されることが多く、C (UNIX オペレーティングシステムを実行する部門ミニコンピュータ用) で記述されることもありました。IBM PC が普及すると、これらのコンピュータやその他の安価なコンピュータで使用できるビジネス ソフトウェアの必要性が高まりました。Progress システムは、DOSを実行する IBM PC マシンと、UNIX やOpenVMSなどのミニコンピュータオペレーティングシステムを実行できるさまざまなコンピュータの両方で使用できるように作成されました。
Progress ABLは、厳密な型付けと遅延バインディングを備えた、英語に似たプログラミング言語です。当初は手続き型言語として設計されましたが、バージョン10.1以降、オブジェクト指向の文法要素が追加され、元の手続き型スタイルと組み合わせることが可能になりました。コードブロックにはトランザクションのスコープを設定でき、その場合、トランザクションの完了時にデータベースの変更がコミットされます。このようなブロック内でエラーが発生すると、これらの変更は取り消されます。これらのデフォルト設定は、プログラマーが上書きできます。
シンプルなプログラムはグラフィカルユーザーインターフェースなしでも動作しますが、プログラムでグラフィカルユーザーインターフェースを作成するための構文が用意されているか、プログラマーは提供されているツールを使用して構築することができます。
以下のABLコードは、「Hello, World!」というテキストと「OK」というラベルのボタンが表示されたウィンドウを作成します。
変数w をハンドルNO-UNDOとして定義します。ウィンドウを作成します。幅= 50 、高さ= 5 、メッセージエリア= FALSE 、ステータスエリア= FALSE を割り当てます。現在のウィンドウ= w 。DEFINE BUTTON btnOK LABEL "OK" SIZE 12 BY 1.2 . FORM "Hello World!" VIEW-AS TEXT AT COL 20 ROW 2 btnOK AT COL 20 ROW 4 WITH FRAME f SIZE 50 BY 5 NO-BOX THREE-D .フレームfを表示します。フレームfでbtnOK を有効にします。btnOKの「選択」を待ちます。オブジェクトwを削除します。メッセージボックスを使用しても同様の効果が得られます。
メッセージ「Hello World!」アラートボックスとして表示情報ボタンOK 。このINFOパラメータはメッセージアイコンを制御し、異なる外観にするために、ERRORまたはに置き換えることができます。WARNING
最も基本的な「Hello, World」プログラムは次のとおりです。
「こんにちは」と表示します。SELECT相当SQL文:
SELECT * FROM customer ;(選択した言語接続および表示手順とともに)Progress / ABLでは次のように表現できます。
各顧客に対してNO-LOCK :顧客を表示します。終了。UPDATE相当SQL文:
UPDATE customer SET salesman = 'Fred' WHERE custno = 14 ;(繰り返しになりますが、選択した言語接続と表示手順とともに)Progress / ABLでは次のように表現できます。
顧客番号が14 である各顧客に対して、排他ロックを使用して、顧客担当者を'Fred'に割り当てます。(この例を簡潔にするため、インデックス作成、ロック、トランザクションスコープに関していくつかの前提条件を設けています。)
ABLにおけるデータアクセスは、従来のSQL言語に見られる結果セットベースの処理とは対照的に、レコードベースです。SQL操作は通常レコードのセットに対して行われますが、ABLはSQLのカーソルと同様に、一度に1つのレコードを処理します。
レコードベースの処理は、きめ細かなロックモデルを提供し、開発者はレコードにアクセスする際に、異なるロックレベル(排他ロック、共有ロック、ロックなしなど)を適用できます。
このアプローチは、特にアプリケーションとデータベースが同じホスト上に存在する共有メモリ接続を使用する環境において、メモリ使用量を予測可能にすることができます。しかし、クライアント/サーバー(ネットワーク)環境では、取得するレコードまたはレコードのブロックごとに、通常はネットワークの往復が発生します。たとえば、デフォルトのプリフェッチサイズが50レコード、ネットワーク遅延が50ミリ秒の場合、100万レコードを取得すると、最大1,000秒の遅延が発生する可能性があります。これは、高遅延環境におけるレコードごとのアクセスの潜在的な欠点を示しています。
この言語は幅広い分野で利用されており、その例をいくつか挙げると以下のとおりです。
OpenEdge は以下の用途に使用できます: [ 3 ]