!--a11y-->

例として論理データベース TEST_LDB を検討してみましょう。

SELECT-OPTIONS: SLIFNR FOR
LFA1-LIFNR,
SBUKRS FOR LFB1-BUKRS,
SGJAHR FOR LFC1-GJAHR,
SBELNR FOR BKPF-BELNR.
*-------------------------------------------------------*
* 論理データベース TEST_LDB
のデータベースプログラム
*-------------------------------------------------------*
PROGRAM SAPDBTEST_LDB DEFINING DATABASE TEST_LDB.
TABLES: LFA1,
LFB1,
LFC1,
BKPF.
*-------------------------------------------------------*
* 選択画面の初期化 (PBO の前に処理)
*-------------------------------------------------------*
FORM INIT.
....
ENDFORM.
"INIT
*-------------------------------------------------------*
* 選択画面の PBO (常に選択画面
* の前)
*-------------------------------------------------------*
FORM PBO.
....
ENDFORM. "PBO
*-------------------------------------------------------*
* 選択画面の PAI (常に ENTER の後に処理)
*-------------------------------------------------------*
FORM PAI USING FNAME MARK.
CASE FNAME.
WHEN 'SLIFNR'.
....
WHEN 'SBUKRS'.
....
WHEN 'SGJAHR'.
....
WHEN 'SBELNR'.
....
ENDCASE.
ENDFORM. "PAI
*-------------------------------------------------------*
* イベント GET LFA1
の呼び出し
*-------------------------------------------------------*
FORM PUT_LFA1.
SELECT * FROM LFA1
WHERE LIFNR IN SLIFNR.
PUT LFA1.
ENDSELECT.
ENDFORM. "PUT_LFA1
*-------------------------------------------------------*
* イベント GET LFB1
の呼び出し
*-------------------------------------------------------*
FORM PUT_LFB1.
SELECT * FROM LFB1
WHERE LIFNR = LFA1-LIFNR
AND BUKRS
IN SBULRS.
PUT LFB1.
ENDSELECT.
ENDFORM. "PUT_LFB1
*-------------------------------------------------------*
* イベント GET LFC1
の呼び出し
*-------------------------------------------------------*
FORM PUT_LFC1.
SELECT * FROM LFC1
WHERE LIFNR = LFA1-LIFNR
AND BUKRS
= LFB1-BUKRS
AND GJAHR
IN SGJAHR.
PUT LFC1.
ENDSELECT.
ENDFORM. "PUT_LFC1
*-------------------------------------------------------*
* イベント GET BKPF
の呼び出し
*-------------------------------------------------------*
FORM PUT_BKPF.
SELECT * FROM BKPF
WHERE BUKRS = LFB1-BUKRS
AND BELNR
IN SBELNR
AND GJAHR
IN SGJAHR.
PUT BKPF.
ENDSELECT.
ENDFORM. "PUT_BKPF
PROGRAM 命令には追加 DEFINING DATABASE TEST_LDB があります。これは、論理データベース TEST_LDB に所属するデータベースプログラムを定義します。
構造のノードは、適切なテーブル作業領域を生成する TABLES 命令により宣言されます。また NODES 命令を使用して、データベーステーブルをノードとして定義できます。論理データベースのノードがデータベーステーブルでなければ、NODES 命令を使用する必要があります。インタフェース作業領域は、データベースプログラムとユーザが 共有して、データを渡すインタフェースとして動作します。ここで「ユーザ」という用語は、論理データベースがリンクされている実行可能プログラムか、または汎用モジュール LDB_PROCESS を指します。
サブルーチンの INIT と PBO は、選択画面を初期化します。
PAI サブルーチンでは、選択画面でユーザ入力の権限チェックを加えることができます。また信憑性または値範囲のチェックも可能です。チェックが失敗すれば、エラーダイアログに書き込むことができます。その後選択画面の対応する項目は、ふたたび入力の準備ができます。
PUT_<node> サブルーチンは、ユーザにより入力された選択基準にしたがってデータベーステーブルを読み取り、実行可能プログラム内の関連するイベントを開始します。このプログラムは、論理データベースの基本構造の表示のみを目的としています。レスポンス時間を改善する再設定は含まれません。サブルーチンが呼び出される順序は、論理データベースの構造により決定されます。