インフリー技術情報発信ブログ

ERP(SAP)導入コンサルティング、ABAP開発、ホームページ制作、WEBシステム構築などを手掛ける、株式会社インフリーです。

排他処理について その3

前回の予告では、ロックモードとロックキー指定用パラメータについてでしたが、
ロックキー指定用パラメータについてのみになります。

 

まずは、アドオンテーブル:ZT01のロックオブジェクト:EZT01を登録したとします。

         ○アドオンテーブル定義
                 アドオンテーブル:ZT01
                           プライマリーキー 品目コード:MATNR
                                                   プラント  :WERKS

このとき、ロックモジュールには、ロックキー指定用パラメータには、以下の4つが定義されます

          ○ロックキー指定用パラメータ
                    MATNR
                    WERKS
                    X_MATNR
                    X_WERKS

例えば、品目コード:M00001 プラント:W001でロックをかけたい場合は、
下のように、ロックモジュールをコールします

    CALL FUNCTION ’ENQUEUE_EMRKPF’
      EXPORTING
        MODE_RKPF      = ‘E’
        MATNR          = ‘M00001’
        WERKS          = ‘W001’
      EXCEPTIONS
        FOREIGN_LOCK   = 1
        SYSTEM_FAILURE = 2
        OTHERS         = 3.

ロックに成功すると、リターンコード(SY-SUBRC)にゼロが設定されます。また、ロックテーブルに
下表のようにエントリが追加されます。このロックエントリは、トランザクション:SM12で確認できます。

6a0128758dc1c4970c0133f587edb3970b-800wi

汎用モジュールをコールした時、ロックテーブルのエントリを見て、キーが一緒だった場合、
指定したリターンコードが設定されます。(上記の例では、「1」)

ロックしたユーザは、システム変数の「SY-MSGV1」に格納されているので、
メッセージ等で使用する場合はこちらを使いましょう。

ロックを解除したいときは、同じように解除用のロックモジュールをコールします

      CALL FUNCTION ’DEQUEUE_EMRKPF’
        EXPORTING
           MATNR          = ‘M00001’
           WERKS          = ‘W001’.

 

では、品目コード:M00001 プラント:初期値でロックをかけた場合・・・

ロックテーブルには、下表のようにロックエントリが追加されます。

201010_02

プラントの場所には「*」が設定されます。これは、ワイルドカードなので、

この後、品目コード:M00001 プラント:W001でロックをかけようとした場合、ロックエラーとなります。
品目コード:M00001 プラント:W002であっても、同じです。

初期値をロックキーとしたい場合には、以下のようにロックモジュールを呼びます。

    CALL FUNCTION ’ENQUEUE_EMRKPF’
      EXPORTING
        MODE_RKPF   = ‘E’
        MATNR          = ‘M00001’
        WERKS          = SPACE
        X_WERKS       = ‘X’
      EXCEPTIONS
         FOREIGN_LOCK   = 1
         SYSTEM_FAILURE = 2
         OTHERS         = 3.

 

このとき、ロックエントリは、下表のようになります。

201010_03

初期値がロックキーと認識されているため、この後、品目コード:M00001 プラント:W001でロックをかけようとした場合、ロックエラーになりません。

ロックモジュールの「X_~」のパラメータは、初期値をロックキーとするかどうかのフラグです。

 これが必要となる状況は限られるため、ほとんど使いませんが、頭の片隅に覚えておくといいかもしれません。 

さて、今回は、ここまででなんとなく、SAPの排他処理のイメージがつかめたでしょうか。

インフリー技術情報発信ブログ © 2013 Frontier Theme