
R/3
システムは、複数のユーザによる同じデータレコードへの同時アクセスを、 ロック機構によって同時に処理します。対話式のトランザクションをプログラムするとき、汎用モジュールが呼び出されてロックの設定、解除が行なわれます ( ロック依頼の汎用モジュールを参照してください ) 。これらの汎用モジュールは、 ABAP ディクショナリ内のロックオブジェクトの定義から自動的に生成されます。ロックオブジェクトの構造
ロック依頼でデータレコードがロックされるテーブルは、そのキー項目とともにロックオブジェクトに定義されます。テーブルが選択されるとき、
1 つのテーブル ( 一次テーブル ) が最初に選択されます。外部キー関係を使用して、別のテーブル ( 二次テーブル ) を追加することができます ( 外部キーの条件を参照してください ) 。ロック引数
ロックオブジェクトのテーブルのロック引数は、テーブルのキー項目で構成されます。
ロックオブジェクトのロック引数項目は、ロックオブジェクトの定義から生成されるロックを設定、解除するための汎用モジュールの中で入力パラメータとして使用されます。これらの汎用モジュールが呼び出されるとき、ロックを設定または解除するテーブル行は、これらの項目に特定の値を定義して指定されます。こうした値を総称にすることもできます。つまり、ロック引数項目は、ロックするテーブル行のサブセットを定義します。
ロックオブジェクトの最も単純なケースは、ロックオブジェクトがただ1つのテーブルで構成され、ロック引数はそのテーブルの一次キーである場合です。1つのロックオブジェクトに複数のテーブルを含めることもできます。つまり、
1 つのロック依頼は、テーブルの 1 つのレコードだけでなく、論理オブジェクト全体をロックすることができます。こうした論理オブジェクトは、たとえば、ヘッダテーブルの 1 つのエントリとポジションテーブルの N 個のエントリで構成される文書にすることができます。
ロックオブジェクトが
RFC 権限とともに定義されていれば、対応するインタフェースを介して他のシステム内のプログラムからロックを設定することもできます。ロックオブジェクト内の各テーブルには、
ロックモードを割り当てることができます。ロックモードは、ロックされたテーブルレコードへ他のユーザがアクセスできる方法を定義します。
フライトモデルのテーブル
SFLIGHT
には、航空会社の予定フライトすべてが保存されています。項目
SEATSMAX
には空いている座席数が含まれています。項目
SEATSOCC
にはすでに予約された座席数が含まれています。カスタマに対して
(
旅行代理店または航空会社のカウンタによって
)
座席の予約が行われる場合は、十分な空き座席があるかどうかを確認する必要があります。予約が行われると、予約座席数が加算されます。このメカニズムでは、
2 つのカウンタが同時に同じ予約を行なったり、予約の超過が発生しないようにする必要があります。これは、ロックオブジェクト
ESFLIGHT を登録することで防止することができます。このロックオブジェクトには、テーブル SFLIGHT だけを含めます。これにより、予約するときにフライトをロックすることができます(ロックオブジェクトから生成される汎用モジュールを使用)。別のカウンタがこのフライトに対して席を予約しようとすると、ロックによって予約の超過が回避されます。以下も参照してください。
ロックオブジェクトの例 ロックオブジェクトの登録 ロックオブジェクトの削除