この記事を読むメリット
- SAPで複数の人が同じデータを安全に扱うために必要な「ロックオブジェクト」の基本的な仕組みと使い方が分かります。
SAPでは、複数のユーザが同時に同じデータを参照・更新する場便が頻繁に発生します。こうした環境では、同一データへの同時変更が原因で整合性が損なわれたり、保存エラーが発生するリスクがあります。
このような問題を防ぐために使用されるのが「ロック」の仕組みです。本記事では、SAPにおける「ロックオブジェクト」の仕組み、ロックモードの違い、登録・使用方法について解説します。
この記事のポイント
ロックオブジェクトとは
SAPにおける「ロックオブジェクト」は、特定のテーブルデータに対する他のユーザの同時変更を防ぎ、データの整合性を保つための仕組みです。
テーブル(標準・アドオン含む)に対して登録・更新・削除を行う際、対象データをロックすることで、他ユーザの同時操作をブロックします。たとえば、1人が請求書を編集中は他のユーザは同じ請求書を編集できません。
- ロックはプログラム内で制御される為、SAE16Nなどを使用して直接テーブルにアクセスした場合には適用されません。この点には特に注意が必要です。
ロックの操作(ENQUEUE/DEQUEUE)
SAPでは、ロックオブジェクトを使ってデータを「ロック」したり「ロック解除」したりできます。
- ENQUEUE_ロックオブジェクト名:データをロックする(他の人が使えないようにする)
- DEQUEUE_ロックオブジェクト名:データのロックを解除する(他の人も使えるようにする)
ロックオブジェクトの登録方法
1、トランザクションコード:SE11の起動
「ロックオブジェクト」を選択し、新しいロックオブジェクト名(通常はEから始まる)を入力して「登録」ボタンを押下します。
2、ロック対象テーブルの指定
内容説明とロックしたいテーブル名(主テーブル)を入力し、ロックモードを設定します。
ロックモード
- E:書込ロック(排他ロック)
→同一データに対して1ユーザのみがアクセス可(他ユーザの照会・編集は不可)
他ユーザからの排他・共有ロックは拒否
同一トランザクション内で複数回ロック可能(累積可)
- S:共有ロック
→複数ユーザが照会モードで同時アクセス可
他の共有ロックは許可されるが、排他ロックは拒否
- X:排他、累積なし ※推奨
→1回のみロック可能(同一トランザクション内でも再ロックは拒否)
他ユーザによるすべてのロック要求を拒否
多重ロック防止に有効なため、安全性の観点から推奨される
3、ロックオブジェクトの設定と保存
ロックするパラメータを指定し、「有効化」ボタンを押下します。
ロックオブジェクトの使用方法
ロックオブジェクトをプログラムから呼び出す
「パターン」ボタンを押下し、CALL FUNCTIONに先ほど作成したロックオブジェクト名の前に「ENQUEUE_」または「DEQUEUE_」を付けたものを入力してEnterを押下します。
プログラム内にロックオブジェクトで定義されたパラメータが記述されたソースコードのフォーマットが自動入力されます。
対象レコードのロック処理
CALL FUNCTION 'ENQUEUE_EZTEST001'
* EXPORTING
* MODE_ZTEST = 'X'
* MANDT = SY-MANDT
* BUKRS =
* ANLN1 =
* X_BUKRS = ' '
* X_ANLN1 = ' '
* _SCOPE = '2'
* _WAIT = ' '
* _COLLECT = ' '
* EXCEPTIONS
* FOREIGN_LOCK = 1
* SYSTEM_FAILURE = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ロック解除処理
CALL FUNCTION 'DEQUEUE_EZTEST001'
* EXPORTING
* MODE_ZTEST = 'X'
* MANDT = SY-MANDT
* BUKRS =
* ANLN1 =
* X_BUKRS = ' '
* X_ANLN1 = ' '
* _SCOPE = '3'
* _SYNCHRON = ' '
* _COLLECT = ' '
.
ロックオブジェクトの注意点
- ロックはシステム全体に影響するため、使い終わったらすぐに解除しましょう。
- ロック競合が起きた場合(ほかの人が既にロックしている場合)は、適切なエラー処理を行う必要があります。
- ロックを使用することで、業務データの整合性を保てますが、過度なロックは処理速度を下げる原因にもなります。
まとめ
「ロックオブジェクト」は、SAPで安全にデータを操作するための重要な制御手段です。特に複数ユーザーが同時にシステムを利用する業務環境では、ロックを適切に設計・使用することで、データ破損や業務トラブルの防止につながります。ロックモードや使用タイミングを正しく理解し、安全な開発・運用を心がけましょう。