グローバルデータエリア(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」と入力します。
プログラムを格納します。
次の演習に進みます。外部サブルーチン