1.5.2 RDMLの構成

以下のRDMLコード例は、データ入力欄を画面に表示し、入力された顧客データを顧客情報ファイルに書き込む、という処理を行っています。この短い例だけを見ても、LANSA RDMLの第4世代言語としての特徴が現れており、開発効率や保守性の面で優れていることがわかるでしょう。

FUNCTION OPTIONS(*DIRECT)

GROUP_BY NAME(#CUSTOMER) FIELDS (#CUSTNO #NAME #ADDR1 #ADDR2 #CITY #STATE #PHONE)

BEGIN_LOOP

REQUEST FIELDS(#CUSTOMER) DESIGN(*DOWN)

INSERT FIELDS(#CUSTOMER) TO_FILE(CUSTMST)

CHANGE FIELD(#CUSTOMER) TO(*DEFAULT)

END_LOOP

 

単一のFUNCTIONステートメントでひとまとまりのプログラムが記述できます。外部プログラムを呼び出したり、パラメータを設定したりする必要はありません。

GROUP_BYステートメントはフィールドの抽象的な構造を示しており、これを他のRDMLステートメントで使うことになります。#CUSTOMERというフィールドは、#CUSTNO、#NAME、#ADDR1、#ADDR2、#CITY、#STATE、#PHONEの各フィールドを集めてリストにしたものです。以降のステートメントでデータに対する操作(REQUEST、INSERT、CHANGE)では、フィールドを個別に記述せず、まとめて#CUSTOMERとしています。GROUP_BYに新しいフィールドを追加すれば、それだけで#CUSTOMERという記述があるステートメントに反映されます。

REQUESTステートメントは、画面にデータ入力欄を表示するもので、メッセージ表示やエラー処理も含まれています。したがって、この1行のコマンドが、第3世代言語の数百行のコードに相当することになります。ユーザー・インターフェースを完全に制御でき、IBM i の5250端末用、Windowsの稼動するPC用のどちらにも対応できます。画面上の表示形態は、リポジトリの設定と、ステートメントのパラメータ (この例では DESIGN(*DOWN)) により制御されます。

INSERTステートメントは、データを顧客情報ファイルに書き込むためのものです。値の妥当性規則やエラー処理は表に現れていません。これはリポジトリの設定と、INSERT コマンドのパラメータにより制御するようになっています。

CHANGEステートメントには、各フィールドの入力欄の値を省略値にリセットする働きがあります。GROUP_BYステートメントに7つのフィールドが定義されているので、第3世代言語で記述した場合、少なくとも7行のコードが必要になるところです。*DEFAULT は、フィールド値のリセット時、リポジトリに登録された省略値が基本になることを示しています。。このように、省略値をプログラム中に直接記述したり、設定ファイルを参照して省略値を求める処理を記述したりする必要はありません。保守が必要なコード量も少なくて済むことになります。省略値を変更する場合も、リポジトリ側で変更すればよく、RDMLコードには影響ありません。

新しいフィールド(例えば「#POSTCD」)を追加する場合も、GROUP_BYコマンドに記述を追加し、再コンパイルするだけです。このように、LANSA RDMLを使えば、1つの変更につき1行の記述のみ書き替えるだけで済む場合がほとんどです。したがってコードは簡潔であり、保守も容易です。