グローバルデータエリア(GDA)で定義されたデータは、複数のプログラム、外部サブルーチン、およびヘルプルーチンで共有することができます。
グローバルデータエリアにあるデータ要素の値に加えた変更は、そのグローバルデータエリアを参照するすべての Natural オブジェクトに影響を与えます。したがって、グローバルデータエリアのソースを変更した場合は、そのグローバルデータエリアを参照する、作成済みのすべての Natural オブジェクトをもう一度格納する必要があります。オブジェクトを格納する順序は重要です。まず、グローバルデータエリアを格納してから、プログラムを格納する必要があります。この順序を逆にすると、グローバルデータエリアにある新しい要素を検出できなくなるため、プログラムを格納できなくなります。
プログラムおよび後で作成する外部サブルーチンで共有するグローバルデータエリアを作成します。グローバルデータエリアのベースとして、作成済みのローカルデータエリアの一部の情報を使用します。
以下の演習を完了すると、サンプルのアプリケーションは次のモジュールで構成されます。
このドキュメントには次の演習が含まれています。
既存のデータエリアを編集し、それを異なる名前および異なるタイプで保存することにより、既存のデータエリアから新しいデータエリアを作成できます。元のデータエリアは変更されないまま残り、新しいデータエリアを編集できます。フィールド #NAME-START
および #NAME-END
はグローバルデータエリアには必要ないため、削除します。
グローバルデータエリアを作成するには
プログラムエディタのコマンド行で次のように入力して、ローカルデータエリアに戻ります。
E LDA01
データエリアを新しい名前で保存するには、データエリアエディタのコマンド行で次のように入力します。
SA GDA01
現在のデータエリアが新しい名前「GDA01
」で保存されます。「LDA01
」という名前のローカルデータエリアは、データエリアエディタに引き続き表示されます。
次のコマンドを入力して、GDA01
をデータエリアエディタにロードします。
E GDA01
ローカルデータエリアをグローバルデータエリアに変更するには、次のコマンドを入力します。
SET TYPE G
"G" はグローバルデータエリアを表します。
オブジェクトタイプが "Global" に変わります。これは、画面の上に示されます。
ESC キーを押して、編集モードに入ります。行コマンド D
を使用して、次のフィールドを削除します。
#NAME-START
#NAME-END
グローバルデータエリアは次のようになります。
Press <ESC> to enter command mode Mem: GDA01 Lib: TUTORIAL Type: GLOBAL Bytes: 351 Line: 1 of: 8 C T L Name of Datafield F Length Index/Comment M * *** Top of Data Area *** 1 #MARK A 1 V 1 EMPLOYEES-VIEW EMPLOYEES 2 PERSONNEL-ID A 8 G 2 FULL-NAME 3 NAME A 20 2 DEPT A 6 G 2 LEAVE-DATA 3 LEAVE-DUE N 2 * *** End of Data Area *** F 1 HELP F 2 CHOICE F 3 QUIT F 4 SAVE F 5 STOW F 6 CHECK F 7 READ F 8 CLEAR F 9 MEM TYPE F10 GEN F11 FLD TYPE F12 |
グローバルデータエリアを格納します。
グローバルデータエリアに含まれるフィールドは、ローカルデータエリアに必要ありません。したがって、#NAME-START
および #NAME-END
を除くすべてのフィールドをローカルデータエリアから削除します。
フィールドを削除するには
データエリアエディタのコマンド行で次のように入力して、ローカルデータエリアに戻ります。
E LDA01
#NAME-START
および #NAME-END
を除くすべてのフィールドを、行コマンド D
を使用して削除します。
ビューのトップレベルのエントリ(ビュー名の前にある "V" で示される)を削除すると、このビューに属するすべてのフィールドが自動的に削除されます。
変更したローカルデータエリアを格納します。
ローカルデータエリアが次のように表示されます。
Command: Mem: LDA01 Lib: TUTORIAL Type: LOCAL Bytes: 85 Line: of: 2 C T Comment * *** Top of Data Area *** 1 #NAME-START A 20 1 #NAME-END A 20 * *** End of Data Area *** F 1 HELP F 2 CHOICE F 3 QUIT F 4 SAVE F 5 STOW F 6 CHECK F 7 READ F 8 CLEAR F 9 MEM TYPE F10 GEN F11 FLD TYPE F12 |
グローバルデータエリアを格納すると、Natural プログラムから参照できます。
定義したグローバルデータエリアも使用するように、プログラムの DEFINE DATA
ステートメントを変更します。
プログラムでグローバルデータエリアを使用するには
データエリアエディタのコマンド行で次のように入力して、プログラムエディタに戻ります。
E PGM01
LOCAL USING
LDA01
の上の行に、次のように挿入します。
GLOBAL USING GDA01
グローバルデータエリアは、常にローカルデータエリアより先に定義する必要があります。そのようにしないと、エラーが発生します。
プログラムは次のようになります。
DEFINE DATA GLOBAL USING GDA01 LOCAL USING LDA01 END-DEFINE * RP1. REPEAT * INPUT USING MAP 'MAP01' * IF #NAME-START = '.' THEN ESCAPE BOTTOM (RP1.) END-IF * IF #NAME-END = ' ' THEN MOVE #NAME-START TO #NAME-END END-IF * RD1. READ EMPLOYEES-VIEW BY NAME STARTING FROM #NAME-START ENDING AT #NAME-END * IF LEAVE-DUE >= 20 THEN PERFORM MARK-SPECIAL-EMPLOYEES ELSE RESET #MARK END-IF * DISPLAY NAME 3X DEPT 3X LEAVE-DUE 3X '>=20' #MARK * END-READ * IF *COUNTER (RD1.) = 0 THEN REINPUT 'No employees meet your criteria.' END-IF * END-REPEAT * DEFINE SUBROUTINE MARK-SPECIAL-EMPLOYEES MOVE '*' TO #MARK END-SUBROUTINE * END
プログラムを実行します。
以前(DEFINE DATA
ステートメントでグローバルデータエリアを参照しなかった場合)と同じ結果であることを確認するため、開始名として「"JONES"」と入力し、ENTER キーを押します。
プログラムエディタに戻るには、MORE
プロンプトで「EDIT
」と入力します。
プログラムを格納します。
次の演習に進みます。外部サブルーチン