!--a11y-->

このセクションでは、データベーステーブルから容易にデータを読み取れるようにする 2 つのメソッド、論理データベースとコンテキストについて説明します。この 2 つのメソッドは、別個の ABAP プログラムでオープン SQL 命令をカプセル化します。
論理データベースは、データベーステーブルからデータを読み込む特殊な ABAP プログラムです。論理データベースは実行可能 ( タイプ 1) プログラムによって使用されます。実行時に、論理データベースと実行可能プログラム ( レポート) を 1 つの ABAP プログラムと見なすことができます。その ABAP プログラムの処理ブロックは、事前定義された特定の順序で、実行時環境によって呼び出されます。
ABAP ワークベンチのツールを使用して論理データベースを編集し、プログラム属性を入力するときに、その論理データベースを実行可能プログラム ( レポート) にリンクします。論理データベースと一緒に使用できる実行可能プログラム ( レポート) に制限はありません。リリース 4.5A 以降は、論理データベースを単独で呼び出すこともできます。
次の図に論理データベースの構造を示します。これは 3 つのセクションに分割することができます。
論理データベースの構造によって、アクセス可能なデータベーステーブルが決まります。この構造は、外部キー関係によって定義されたデータベーステーブルの階層を採用しています。また、構造によってテーブルの検索順序も制御されます。
論理データベースの選択部分によって、データを選択するための入力項目が定義されます。実行時環境では、論理データベースにリンクされた実行可能プログラムを実行するときに、これらの入力項目が選択画面に表示されます。対応する項目も ABAP プログラムで利用できます。これにより、たとえば、選択画面でその項目の値を変更して、デフォルト値を挿入することができます。
論理データベースのデータベースプログラムは特殊なサブルーチンのコンテナであり、その中で、データベーステーブルからデータが読み込まれます。これらのサブルーチンは、実行時環境で、事前定義された順序でレポートプロセッサによって呼び出されます。
次の図に、論理データベースにリンクされた実行可能プログラムを実行するときに呼び出される主要な処理ブロックを示します。
実行時環境の呼出は、論理データベースの構造と実行可能プログラムの定義に依存します。論理データベースの構造によって、論理データベースの処理ブロックの呼出順序が決まります。これは、次に実行可能プログラムで GET イベントブロックを呼び出します。この GET イベントブロックは、論理データベースの構造での読込深さを決定します。実行可能プログラムの宣言部分の TABLES 命令または NODES 命令によって、論理データベースに定義された入力項目のうち、どれを選択画面に含めるかが決定されます。またこれらの命令によって、論理データベースと実行可能プログラム間でデータを受け渡すためのインタフェース作業領域も定義されます。
R/3 システムデータベースに実際にアクセスするには、PUT_<TABLE>> サブルーチン内の OPEN SQL 命令を使用します。読み込まれたデータは、インタフェース作業領域 (TABLES 命令を使って定義済) を使用して実行可能プログラムに渡されます。いったんデータが論理データベースプログラムに読み込まれると、実行可能プログラム ( レポート) は GET イベントブロックでそのデータを処理することができます。この手法により、データ読込とデータ処理が分離されます。
論理データベースは主として、データベーステーブル内のデータにアクセスするコードを再使用可能にするために使われます。あらゆるアプリケーションに対して論理データベースが用意されています。論理データベースは最適なパフォーマンスが実現できるように設定されており、権限チェックや検索ヘルプなどの追加機能も組み込まれています。読み込みたいデータベーステーブルが論理データベースの構造にほとんど一致しており、システムプログラムのフロー ( 選択 - 読込 - 処理 - 照会) がアプリケーションの要件を満たす場合には、論理データベースを使用するようにしてください。
アプリケーションプログラミングでは、比較的小さい基本データセットを使用して追加データを導出することがよくあります。この基本データは、たとえば、ユーザが画面上で入力したデータの場合もあります。データベース内の関係リンクを使用して、この基本データにもとづいて追加データを読み込んだり、ABAP 命令を使用して基本データからさらに値が計算されます。
データ間の一定の関係を常に同じ書式で使用して、個別プログラム内で、または一連のプログラム全体で追加データを取得することがよくあります。つまり、結果がすでにシステムに登録されているにもかかわらず、特定のデータベースアクセスや計算が繰返し実行されます。このために不要なシステム負荷が発生しますが、これはコンテキストを使用して軽減することができます。
コンテキストを定義するには、ABAP ワークベンチに組み込まれているコンテキストビルダを使用します。コンテキストはキー入力項目、項目間の関係、その他の項目と、他の項目から導出可能な値で構成されます。コンテキストは、テーブル間の外部キー関係、汎用モジュール、または他のコンテキストによって、これらの派生項目をリンクすることができます。
アプリケーションプログラムでは、コンテキストのインスタンスを使って作業します。同一コンテキストの複数のインスタンスが使用できます。アプリケーションプログラムは SUPPLY 命令を使ってコンテキスト内のキー項目に入力値を書き込み、DEMAND 命令を使ってインスタンスから派生項目を照会することができます。
各コンテキストには、アプリケーションサーバ上でクロストランザクションバッファが設定されています。値に関してインスタンスを照会すると、コンテキストプログラムは最初に、適切なバッファに対応するキー項目を持っているデータレコードを検索します。データレコードが 1 つ見つかると、そのデータがインスタンスにコピーされます。見つからない場合には、書き込まれたキー項目値からデータが導出され、その結果のデータレコードがバッファに書き込まれます。
