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

ローカルデータエリア

現時点では、プログラムで使用するフィールドは、プログラム内の DEFINE DATA ステートメントで定義されています。 このフィールド定義をプログラム外のローカルデータエリア(LDA)に配置し、プログラムの DEFINE DATA ステートメントを使用して、ローカルデータエリアを名前で参照することもできます。 再利用および明確なアプリケーション構造という観点から見ると、通常、プログラム外のデータエリアにフィールドを定義することが推奨されます。

情報を DEFINE DATA ステートメントからローカルデータエリアに再配置します。 以下の演習を完了すると、サンプルのアプリケーションは次のモジュールで構成されます。

Application structure

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


ローカルデータエリアの作成

必須フィールドを指定するデータエリアエディタを起動します。

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

  1. ライブラリワークスペースで、プログラムも含まれているライブラリ(TUTORIAL ノード)を選択します。

  2. コンテキストメニューから、[新規作成]>[ローカルデータエリア]を選択します。

    または:
    次のツールバーボタンを選択します。

    Local data area

    エディタウィンドウが表示されます。

    Editor window

    レベル、名前、フォーマット、および長さは、最初の行で自動的に事前設定されます。

Top of page

データフィールドの定義

次のフィールドを定義します。

レベル 名前 フォーマット 長さ
1 #NAME-START A 20
1 #NAME-END A 20
1 #MARK A 1

これらは、DEFINE DATA ステートメントで前に定義したユーザー定義変数です。

データフィールドは 2 つの方法で定義できます。エディタウィンドウで手動で定義する場合は、データフィールドに正しいフォーマットと長さを定義する必要があります。[インポート]コマンドを使用すると、データフィールドをリストから選択するだけで、正しいフォーマットと長さが自動的に使用されます。 これらの 2 つの方法について、以下で説明します。

データエリアエディタの[挿入]ツールバーにある次のツールバーボタンを設定すると、挿入位置が示されます。 ツールバーボタンが押されているように見える場合、選択したフィールドの後に新しいフィールドが挿入されます(このチュートリアルでは、この状態を前提にしています)。そうでない場合は、選択したフィールドの前に新しいフィールドが挿入されます。

Toolbar button

Start of instruction setエディタウィンドウでデータフィールドを手動で定義するには

  1. 最初の行の[レベル]列にプリセット値 "1" が含まれていることを確認します。

  2. 最初の行の[名前]列のプリセット値を "#NAME-START" に変更します。

  3. 最初の行の[フォーマット]列にプリセット値 "A" が含まれていることを確認します。

  4. 最初の行の[長さ]列のプリセット値を "20" に変更します。

Start of instruction setプログラムからデータフィールドをインポートするには

  1. エディタで、#NAME-START 用に作成した行を選択します。

    注意:
    必要に応じて、Enter キーまたは Esc キーを押して、単一セル選択モードから全列選択モードに切り替えます。

  2. コンテキストメニューから、[インポート]を選択します。

    または:
    次のツールバーボタンを選択します。

    Import data field

    [データフィールドのインポート]ダイアログボックスが表示されます。

  3. [ライブラリ]ドロップダウンリストボックスで TUTORIAL が選択されていることを確認します。

  4. [プログラム]チェックボックスをオンにします。

    ライブラリで現在定義されているすべてのプログラムが、[オブジェクト]リストボックスに表示されます。

  5. PGM01 という名前のプログラムを選択します。

    インポートできるデータフィールドがダイアログボックスの下部に表示されます。

    Import data field

  6. Ctrl キーを押して、[インポータブルデータ]リストボックスで次のフィールドを選択します。

    #NAME-END
    #MARK

  7. [インポート]ボタンを選択します。

    [データフィールドのインポート]ダイアログボックスの[キャンセル]ボタンのラベルが[終了]になります。

  8. [終了]ボタンを選択して、[データフィールドのインポート]ダイアログボックスを閉じます。

    フィールド #NAME-END および #MARK が、エディタウィンドウで #NAME-START フィールドの下に表示されます。

Top of page

DDM からの必須データフィールドのインポート

プログラムの DEFINE DATA ステートメントで前に定義したデータフィールドをインポートします。 フィールドは、Natural データビューからデータエリアエディタに直接読み込まれます。 データビューは、データ定義モジュール(DDM)で定義されたデータベースフィールドを参照します。

データエリアエディタで、インポートしたデータフィールドは、現在選択されているデータフィールドの下に挿入されます。

Start of instruction setDDM からデータフィールドをインポートするには

  1. エディタで、#MARK を含む行を選択します。

  2. コンテキストメニューから、[インポート]を選択します。

    [データフィールドのインポート]ダイアログボックスが表示されます。

  3. [ライブラリ]ドロップダウンリストボックスから[SYSEXDDM]を選択します。

    [DDM]オプションボタンが選択されています。

  4. [オブジェクト]リストボックスで、EMPLOYEES という名前のサンプル DDM を選択します。

  5. Ctrl キーを押して、[インポータブルデータ]リストボックスで次のフィールドを選択します。

    PERSONNEL-ID
    FULL-NAME
    NAME
    DEPT
    LEAVE-DATA
    LEAVE-DUE

    注意:
    フィールド PERSONNEL-ID は、後でサブプログラムを作成するときに使用します。

  6. [インポート]ボタンを選択します。

    [ビューの定義]ダイアログボックスが表示されます。

  7. ビューに対して前に定義した名前(EMPLOYEES-VIEW)を指定します。

  8. [OK]ボタンを選択します。

  9. [終了]ボタンを選択して、[データフィールドのインポート]ダイアログボックスを閉じます。

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

    Local data area

    Type 列は、変数タイプを示します。 ビューは "V" で示され、各グループは "G" で示されます。

    注意:
    データエリアエディタオプションで[展開/圧縮]チェックボックスがオンになっていると、展開/圧縮トグルが(ビューおよび各グループの)最初の列に表示されます。

  10. ローカルデータを格納します。

  11. ローカルデータエリア名の指定を求められたら、「LDA01」と入力します。

    ライブラリワークスペースで、Local Data Areas という名前の新しいノードが TUTORIAL ノードの下に表示されます。 このノードには、格納したローカルデータエリアが含まれています。

Top of page

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

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

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

データエリアエディタをバックグラウンドで開いたままにします。

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

  1. プログラムエディタに戻ります。

  2. DEFINE DATA ステートメントで、LOCALEND-DEFINE 間にある変数をすべて削除します。

  3. LOCAL 行を次のように変更して、ローカルデータエリアへの参照を追加します。

    LOCAL USING LDA01

    プログラムは次のようになります。

    DEFINE DATA
      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
    
  4. プログラムを実行します。

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

  6. Esc キーを押して、出力ウィンドウを閉じます。

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

次の演習「グローバルデータエリア」に進みます。

Top of page