グローバルデータエリア(GDA)で定義されたデータは、複数のプログラム、外部サブルーチン、およびヘルプルーチンで共有することができます。
グローバルデータエリアにあるデータ要素の値に加えた変更は、そのグローバルデータエリアを参照するすべての Natural オブジェクトに影響を与えます。 したがって、グローバルデータエリアのソースを変更した場合は、そのグローバルデータエリアを参照する、作成済みのすべての Natural オブジェクトをもう一度格納する必要があります。 オブジェクトを格納する順序は重要です。 まず、グローバルデータエリアを格納してから、プログラムを格納する必要があります。 この順序を逆にすると、グローバルデータエリアにある新しい要素を検出できなくなるため、プログラムを格納できなくなります。
プログラムおよび後で作成する外部サブルーチンで共有するグローバルデータエリアを作成します。 グローバルデータエリアのベースとして、作成済みのローカルデータエリアの一部の情報を使用します。
以下の演習を完了すると、サンプルのアプリケーションは次のモジュールで構成されます。
このドキュメントには次の演習が含まれています。
既存のデータエリアを編集し、それを異なる名前および異なるタイプで保存することにより、既存のデータエリアから新しいデータエリアを作成できます。 元のデータエリアは変更されないまま残り、新しいデータエリアを編集できます。 フィールド #NAME-START
および #NAME-END
はグローバルデータエリアには必要ないため、削除します。
グローバルデータエリアを作成するには
プログラムエディタのコマンド行で次のように入力して、ローカルデータエリアに戻ります。
E LDA01
データエリアを新しい名前で保存するには、データエリアエディタのコマンド行で次のように入力します。
SA GDA01
現在のデータエリアが新しい名前 GDA01
で保存されます。 LDA01
という名前のローカルデータエリアは、データエリアエディタに引き続き表示されます。
次のコマンドを入力して、GDA01
をデータエリアエディタにロードします。
E GDA01
ローカルデータエリアをグローバルデータエリアに変更するには、次のコマンドを入力します。
SET TYPE G
"G" はグローバルデータエリアを表します。
オブジェクトタイプが "Global" に変わります。 これは、画面の左上に示されます。
行コマンド .D を使用して、次のフィールドを削除します。
#NAME-START
#NAME-END
行コマンドは、削除するフィールドを含む行の T 列から開始して入力されています。 上記のフィールドは連続した 2 行で定義されているため、行コマンド .D(2)
を使用すると、両方のフィールドを同時に削除できます。
Enter キーを押します。
グローバルデータエリアは次のようになります。
Global GDA01 Library TUTORIAL DBID 11177 FNR 8 Command > + I T L Name F Length Miscellaneous All -- -------------------------------- - ---------- -------------------------> 1 #MARK A 1 V 1 EMPLOYEES-VIEW EMPLOYEES 2 PERSONNEL-ID A 8 /* CNNNNNNN G 2 FULL-NAME /* NAME INFORMATION 3 NAME A 20 /* SURNAME/FAMILY NAME 2 DEPT A 6 /* DDDDSS G 2 LEAVE-DATA /* LEAVE/VACATION INFO 3 LEAVE-DUE N 2.0 /* VACATION DAYS/YEAR ----------------------------------------------------------------- S 8 L 1 |
グローバルデータエリアを格納します。
グローバルデータエリアに含まれるフィールドは、ローカルデータエリアに必要ありません。 したがって、#NAME-START
および #NAME-END
を除くすべてのフィールドをローカルデータエリアから削除します。
フィールドを削除するには
データエリアエディタのコマンド行で次のように入力して、ローカルデータエリアに戻ります。
E LDA01
#NAME-START
および #NAME-END
を除くすべてのフィールドを、行コマンド .D を使用して削除します。
ビューのトップレベルのエントリ(ビュー名の前にある "V" で示される)を削除すると、このビューに属するすべてのフィールドが自動的に削除されます。
変更したローカルデータエリアを格納します。
ローカルデータエリアが次のように表示されます。
SYSGDA 4454: Data area stowed successfully. Local LDA01 Library TUTORIAL DBID 11177 FNR 8 Command > + I T L Name F Length Miscellaneous All -- -------------------------------- - ---------- -------------------------> 1 #NAME-START A 20 1 #NAME-END A 20 ----------------------------------------------------------------- S 2 L 1 |
グローバルデータエリアを格納すると、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
」と入力します。
プログラムを格納します。
次の演習「外部サブルーチン」に進みます。