バージョン 4.2.5
 —  ファーストステップ  —

グローバルデータエリア

グローバルデータエリア(GDA)で定義されたデータは、複数のプログラム、外部サブルーチン、およびヘルプルーチンで共有することができます。

グローバルデータエリアにあるデータ要素の値に加えた変更は、そのグローバルデータエリアを参照するすべての Natural オブジェクトに影響を与えます。 したがって、グローバルデータエリアのソースを変更した場合は、そのグローバルデータエリアを参照する、作成済みのすべての Natural オブジェクトをもう一度格納する必要があります。 オブジェクトを格納する順序は重要です。 まず、グローバルデータエリアを格納してから、プログラムを格納する必要があります。 この順序を逆にすると、グローバルデータエリアにある新しい要素を検出できなくなるため、プログラムを格納できなくなります。

プログラムおよび後で作成する外部サブルーチンで共有するグローバルデータエリアを作成します。 グローバルデータエリアのベースとして、作成済みのローカルデータエリアの一部の情報を使用します。

以下の演習を完了すると、サンプルのアプリケーションは次のモジュールで構成されます。

Application structure

このドキュメントには次の演習が含まれています。


既存のローカルデータエリアからのグローバルデータエリアの作成

既存のデータエリアを編集し、それを異なる名前および異なるタイプで保存することにより、既存のデータエリアから新しいデータエリアを作成できます。 元のデータエリアは変更されないまま残り、新しいデータエリアを編集できます。 フィールド #NAME-START および #NAME-END はグローバルデータエリアには必要ないため、削除します。

Start of instruction setグローバルデータエリアを作成するには

  1. プログラムエディタのコマンド行で次のように入力して、ローカルデータエリアに戻ります。

    E LDA01
  2. データエリアを新しい名前で保存するには、データエリアエディタのコマンド行で次のように入力します。

    SA GDA01

    現在のデータエリアが新しい名前 GDA01 で保存されます。 LDA01 という名前のローカルデータエリアは、データエリアエディタに引き続き表示されます。

  3. 次のコマンドを入力して、GDA01 をデータエリアエディタにロードします。

    E GDA01
  4. ローカルデータエリアをグローバルデータエリアに変更するには、次のコマンドを入力します。

    SET TYPE G

    "G" はグローバルデータエリアを表します。

    オブジェクトタイプが "Global" に変わります。 これは、画面の左上に示されます。

  5. 行コマンド .D を使用して、次のフィールドを削除します。

    #NAME-START
    #NAME-END

    行コマンドは、削除するフィールドを含む行の T 列から開始して入力されています。 上記のフィールドは連続した 2 行で定義されているため、行コマンド .D(2) を使用すると、両方のフィールドを同時に削除できます。

  6. 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   
  7. グローバルデータエリアを格納します。

Top of page

ローカルデータエリアへの適合

グローバルデータエリアに含まれるフィールドは、ローカルデータエリアに必要ありません。 したがって、#NAME-START および #NAME-END を除くすべてのフィールドをローカルデータエリアから削除します。

Start of instruction setフィールドを削除するには

  1. データエリアエディタのコマンド行で次のように入力して、ローカルデータエリアに戻ります。

    E LDA01
  2. #NAME-START および #NAME-END を除くすべてのフィールドを、行コマンド .D を使用して削除します。

    ビューのトップレベルのエントリ(ビュー名の前にある "V" で示される)を削除すると、このビューに属するすべてのフィールドが自動的に削除されます。

  3. 変更したローカルデータエリアを格納します。

    ローカルデータエリアが次のように表示されます。

    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

Top of page

プログラムからのグローバルデータエリアの参照

グローバルデータエリアを格納すると、Natural プログラムから参照できます。

定義したグローバルデータエリアも使用するように、プログラムの DEFINE DATA ステートメントを変更します。

Start of instruction setプログラムでグローバルデータエリアを使用するには

  1. データエリアエディタのコマンド行で次のように入力して、プログラムエディタに戻ります。

    E PGM01
  2. 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
  3. プログラムを実行します。

  4. 前(DEFINE DATA ステートメントでグローバルデータエリアを参照していない場合)と同じ結果になることを確認するため、開始名に「JONES」と入力して、Enter キーを押します。

  5. プログラムエディタに戻るには、MORE プロンプトで「EDIT」と入力します。

  6. プログラムを格納します。

次の演習「外部サブルーチン」に進みます。

Top of page