!--a11y-->
R/3
システムデータベースにある大量のデータのなかには、追加情報を導出するために使用できる少数の一連の基本データがかならずあります。たとえば、リレーショナルデータベースモデルでは、データベーステーブルのキー項目がそれにあたります。アプリケーションプログラムが処理を続行するのに追加情報が必要な場合、それが少数の基本データのなかに存在することがよくあります。この基本データをもとに追加データを読み込むときは、データベース内のリレーショナルリンクがよく使用されます。さもなければ、追加値がリレーショナルリンクから
ABAP 命令を使用して計算されます。追加データを取得するために、1つのプログラム内部、または全部のプログラムで、データ間の特定の関係が同じ書式で必ず使用されるということがよく起こります。このことは、結果がシステム内にすでに存在するにもかかわらず、特定のセットのデータベースアクセスや計算が繰り返し実行されることを意味します。コンテキストを使用することによって無用なシステム負荷を避けることができます。
コンテキストは、キー入力項目、これらの項目間の関係、そして項目から導出できる別の項目からなる、
ABAP ワークベンチ内のオブジェクトです。コンテキストは、テーブル間の外部キー関係、汎用モジュール、またはその他のコンテキストによってこれらの導出される項目をリンクすることができます。ユーザはコンテキストを ABAP ワークベンチ(トランザクション SE33 )で抽象的に定義し、コンテキストのインスタンスを ABAP プログラムでの実行時オブジェクトとして使用します。ABAP
ワークベンチでは、コンテキストは項目とモジュールで構成されます。これらの項目はキー項目と導出項目に分かれます。モジュールは項目間の関係を説明するものです。技術的には、コンテキストは特殊な
ABAP プログラムです。コンテキストは以下の場所に保存することができます。
アプリケーションプログラムでは、コンテキストのインスタンスを使用します。同じコンテキストのインスタンスは複数使用することができます。アプリケーションプログラムは、
SUPPLY 命令を使ってコンテキスト内のキー項目に対する入力値を供給し、 DEMAND 命令を使ってインスタンスから導出項目を照会することができます。各コンテキストはアプリケーションサーバにクロストランザクションバッファを持ちます。値に対するインスタンスを照会すると、コンテキストプログラムはまず最初に該当するバッファで対応するキー項目を含むデータレコードを検索します。そのデータレコードが存在すると、データがインスタンスにコピーされます。存在しなければ、コンテキストプログラムは供給されたキー項目値からデータを導き、そのデータレコードをバッファに書き込みます。
プログラムのなかで、すでにキー項目のあるインスタンスに新しいキー項目が入力されると、すでに導出されている値がすべて無効になります。これらの値が再度供給されるのは、次に照会されるときです。