現時点では、プログラムで使用するフィールドは、プログラム内の DEFINE DATA
ステートメントで定義されています。 このフィールド定義をプログラム外のローカルデータエリア(LDA)に配置し、プログラムの DEFINE DATA
ステートメントを使用して、ローカルデータエリアを名前で参照することもできます。 再利用および明確なアプリケーション構造という観点から見ると、通常、プログラム外のデータエリアにフィールドを定義することが推奨されます。
情報を DEFINE DATA
ステートメントからローカルデータエリアに再配置します。 以下の演習を完了すると、サンプルのアプリケーションは次のモジュールで構成されます。
このドキュメントには次の演習が含まれています。
必須フィールドを指定するデータエリアエディタを起動します。
ローカルデータエリアを作成するには
ライブラリワークスペースで、プログラムも含まれているライブラリ(TUTORIAL ノード)を選択します。
コンテキストメニューから、
を選択します。または:
次のツールバーボタンを選択します。
エディタウィンドウが表示されます。
レベル、名前、フォーマット、および長さは、最初の行で自動的に事前設定されます。
次のフィールドを定義します。
レベル | 名前 | フォーマット | 長さ |
---|---|---|---|
1 | #NAME-START |
A | 20 |
1 | #NAME-END |
A | 20 |
1 | #MARK |
A | 1 |
これらは、DEFINE DATA
ステートメントで前に定義したユーザー定義変数です。
データフィールドは 2 つの方法で定義できます。エディタウィンドウで手動で定義する場合は、データフィールドに正しいフォーマットと長さを定義する必要があります。
コマンドを使用すると、データフィールドをリストから選択するだけで、正しいフォーマットと長さが自動的に使用されます。 これらの 2 つの方法について、以下で説明します。データエリアエディタの[挿入]ツールバーにある次のツールバーボタンを設定すると、挿入位置が示されます。 ツールバーボタンが押されているように見える場合、選択したフィールドの後に新しいフィールドが挿入されます(このチュートリアルでは、この状態を前提にしています)。そうでない場合は、選択したフィールドの前に新しいフィールドが挿入されます。
エディタウィンドウでデータフィールドを手動で定義するには
最初の行の[レベル]列にプリセット値 "1" が含まれていることを確認します。
最初の行の[名前]列のプリセット値を "#NAME-START" に変更します。
最初の行の[フォーマット]列にプリセット値 "A" が含まれていることを確認します。
最初の行の[長さ]列のプリセット値を "20" に変更します。
プログラムからデータフィールドをインポートするには
エディタで、#NAME-START
用に作成した行を選択します。
注意:
必要に応じて、Enter キーまたは Esc キーを押して、単一セル選択モードから全列選択モードに切り替えます。
コンテキストメニューから、
を選択します。または:
次のツールバーボタンを選択します。
[データフィールドのインポート]ダイアログボックスが表示されます。
[ライブラリ]ドロップダウンリストボックスで TUTORIAL が選択されていることを確認します。
[プログラム]チェックボックスをオンにします。
ライブラリで現在定義されているすべてのプログラムが、[オブジェクト]リストボックスに表示されます。
PGM01
という名前のプログラムを選択します。
インポートできるデータフィールドがダイアログボックスの下部に表示されます。
Ctrl キーを押して、[インポータブルデータ]リストボックスで次のフィールドを選択します。
#NAME-END
#MARK
ボタンを選択します。
[データフィールドのインポート]ダイアログボックスの ボタンのラベルが になります。
[データフィールドのインポート]ダイアログボックスを閉じます。
ボタンを選択して、フィールド #NAME-END
および #MARK
が、エディタウィンドウで #NAME-START
フィールドの下に表示されます。
プログラムの DEFINE DATA
ステートメントで前に定義したデータフィールドをインポートします。 フィールドは、Natural データビューからデータエリアエディタに直接読み込まれます。 データビューは、データ定義モジュール(DDM)で定義されたデータベースフィールドを参照します。
データエリアエディタで、インポートしたデータフィールドは、現在選択されているデータフィールドの下に挿入されます。
DDM からデータフィールドをインポートするには
エディタで、#MARK
を含む行を選択します。
コンテキストメニューから、
を選択します。[データフィールドのインポート]ダイアログボックスが表示されます。
[ライブラリ]ドロップダウンリストボックスから[SYSEXDDM]を選択します。
[DDM]オプションボタンが選択されています。
[オブジェクト]リストボックスで、EMPLOYEES という名前のサンプル DDM を選択します。
Ctrl キーを押して、[インポータブルデータ]リストボックスで次のフィールドを選択します。
PERSONNEL-ID
FULL-NAME
NAME
DEPT
LEAVE-DATA
LEAVE-DUE
注意:
フィールド PERSONNEL-ID
は、後でサブプログラムを作成するときに使用します。
ボタンを選択します。
[ビューの定義]ダイアログボックスが表示されます。
ビューに対して前に定義した名前(EMPLOYEES-VIEW
)を指定します。
ボタンを選択します。
[データフィールドのインポート]ダイアログボックスを閉じます。
ボタンを選択して、ローカルデータエリアが次のように表示されます。
Type 列は、変数タイプを示します。 ビューは "V" で示され、各グループは "G" で示されます。
注意:
データエリアエディタオプションで[展開/圧縮]チェックボックスがオンになっていると、展開/圧縮トグルが(ビューおよび各グループの)最初の列に表示されます。
ローカルデータを格納します。
ローカルデータエリア名の指定を求められたら、「LDA01」と入力します。
ライブラリワークスペースで、Local Data Areas という名前の新しいノードが TUTORIAL ノードの下に表示されます。 このノードには、格納したローカルデータエリアが含まれています。
ローカルデータエリアを格納すると、Natural プログラムから参照できます。
定義したローカルデータエリアを使用するため、プログラムの DEFINE DATA
ステートメントを変更します。
データエリアエディタをバックグラウンドで開いたままにします。
プログラムでローカルデータエリアを使用するには
プログラムエディタに戻ります。
DEFINE DATA
ステートメントで、LOCAL
と END-DEFINE
間にある変数をすべて削除します。
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
プログラムを実行します。
前(DEFINE DATA
ステートメントでローカルデータエリアを参照していない場合)と同じ結果になることを確認するため、開始名に「JONES」と入力して、Enter キーを押します。
Esc キーを押して、出力ウィンドウを閉じます。
プログラムを格納します。
次の演習「グローバルデータエリア」に進みます。