본문 바로가기

ABAP 프로그래밍 개념/ABAP Data Dictioanry

7. Lock Objects

Lock Object는 응용 프로그램에서 logical locking functionality(로직적으로 어떠한 대상을 잠금을 하기 위한 기능)을 제공하기 위해 사용됩니다. 예를 들어, 동시에 두 명의 사용자가 동일한 문서를 편집하지 못하도록 하려면, 다른 사용자가 이미 문서를 편집 중인 경우에는 사용자가 문서를 열지 못하도록 Lock Object를 구현할 수 있습니다.

Lock Object는 ABAP Data Dictionary에서 정의됩니다. Lock Object는 ENQUEUE와 DEQUEUE라는 두 개의 Function Module을 생성하며, 각각 ABAP 프로그램에서 호출하여 객체를 락(lock)하고 언락(unlock)하는 기능을 수행할 수 있습니다.

1. ABAP Data Dictionary 초기 화면에서 Lock Object 라디오 버튼을 선택하세요. Lock Object의 이름을 입력하고, 생성 버튼을 클릭하세요. Lock Object의 이름은 아래 그림에 표시된 대로 "EZ"로 시작해야 합니다.



2. Dictionary: Change Lock Object 화면에서 테이블 탭을 선택하세요. 기본 테이블의 이름을 입력하고, 락 모드를 선택하세요. 락 모드는 락을 어떻게 구현할지 결정합니다.

3. 아래 옵션들이 주요 테이블 영역(Primary Table Area)에서 Lock Mode로 올 수 있는 내용입니다.

● Write Lock (E): 쓰기 락(배타적 락이라고도 함)이 적용되면, 락이 걸린 데이터는 한 사용자만 표시하거나 편집할 수 있습니다. 다른 Write Lock이나  shared lock 에 대한 추가 요청은 거부됩니다.

● Shared Lock (S): shared lock이 적용되면, 여러 사용자가 데이터에 읽기 모드로 액세스할 수 있습니다. 그러나 한 사용자가 데이터를 변경 모드로 처리하기 시작하면, 두 번째 사용자는 데이터에 대한 액세스 권한이 없게 됩니다. 다른 사용자라도 shared lock에 대한 요청은 허용됩니다. 그러나 Write Lock은 거부됩니다.

● Exclusive but Not Cumulative lock(X) : 동일한 트랜잭션에서 여러 번 요청할 수 있는 Write Lock과 달리, 배타적이면서 누적되지 않는 락은 동일한 트랜잭션에서 한 번만 요청할 수 있습니다. 이후의 각 락 요청은 거부됩니다.

-Optimistic Lock (O): Optimistic Lock은 처음에는 Shared Lock과 동일하게 동작하며, Write Lock으로 변환될 수 있습니다.

-Promote Optimistic Lock (R): 이 옵션은 Optimistic Lock을 Write Lock으로 변환합니다.

-Collision check/Promotion check ('U', 'V', 'W', 'C') : 이는 해당 락('E', 'S', 'X', 'O') 중 하나가 가능한지를 검사하지만, 락을 설정하지는 않습니다.

4. Lock Parameter 탭을 선택합니다. 테이블의 키 필드들이 자동으로 제시됩니다. 도구 모음의 "활성화" 버튼을 클릭하여 락을 확인하고 활성화하세요.

5. Lock Object가 활성화되고난 후에, 시스템은 두 개의 함수를 자동으로 생성합니다(ENQUEUE_
obj name and DEQUEUE_obj name.). 예를 들어, Funciton Module ENQUEUE_EZ_EXAMPLE_1 와 DEQUEUE_EZ_EXAMPLE_1이 생성됩니다.

이 Funciotn Module은 ABAP 프로그램에서 호출이 가능하며, Lock을 설정 & 릴리즈 할 수 있습니다. Lock Parameter는 Lock에 대해 설정 & 릴리즈하기 위한 요청동안 Funciton Parameter이 전달됩니다.

아래 코드는 생성된 Funciotn Module을 사용하여 Lock Object를 구현하는 예제 코드를 보여줍니다. 이 예제에서는 Subroutine REQUEST_LOCK 내에서 ENQUEUE 함수 모듈 ENQUEUE_EZ_EXAMPLE_1을 호출합니다. 이 Function Module에는 락을 설정해야 할 문서 번호를 전달합니다.


락이 설정된 후에는 문서를 업데이트하는 등의 다른 작업을 수행합니다. 문서를 락으로 설정함으로써 다른 사용자가 해당 프로그램을 사용하여 편집 중인 동안 동일한 문서를 편집할 수 없습니다. 마지막으로, 서브루틴 RELEASE_LOCK 내에서 DEQUEUE 함수 모듈 DEQUEUE_EZ_EXAMPLE_1을 호출하여 락을 해제합니다.

우리는 ENQUEUE 함수 모듈을 사용하여 원래 락을 설정한 동일한 문서 번호를 DEQUEUE 함수 모듈에 전달합니다. 락이 해제된 후에는 다른 사용자가 문서를 편집할 수 있게 됩니다.

*&------------------------------------------------------------*
*& Module CHANGE_DOCUMENT INPUT
*&------------------------------------------------------------*
MODULE change_document INPUT.

PERFORM request_lock CHANGING retcode.

 IF retcode IS INITIAL.
  PERFORM update.
 ENDIF.
 
 PERFORM release_lock.
 
ENDMODULE.

*&------------------------------------------------------------*
*& Form REQUEST_LOCK
*&------------------------------------------------------------*
FORM request_lock CHANGING p_retcode.
 CALL FUNCTION 'ENQUEUE_EZ_BILL_DOC'
   EXPORTING
    mode_vbrk = 'E'
    mandt = sy-mandt
    vbeln = vbrp-vbeln
    x_vbeln = ' '
    _scope = '2'
    _wait = ' '
    _collect = ' '
   EXCEPTIONS
    foreign_lock = 1
    system_failure = 2
    OTHERS = 3.
    
 IF sy-subrc <> 0.
   p_retcode = sy-subrc.
 ENDIF.
ENDFORM.
*&------------------------------------------------------------*
*& Form RELEASE_LOCK
*&------------------------------------------------------------*
FORM release_lock .
 CALL FUNCTION 'DEQUEUE_EZ_BILL_DOC'
   EXPORTING
    mode_vbrk = 'E'
    mandt = sy-mandt
    vbeln = vbrp-vbeln
    x_vbeln = ' '
    _scope = '3'
    _synchron = ' '
    _collect = ' '.
    
ENDFORM.

 

반응형

'ABAP 프로그래밍 개념 > ABAP Data Dictioanry' 카테고리의 다른 글

6. Search Help  (0) 2023.06.04
5. Domain  (0) 2023.06.01
4. Type Group  (0) 2023.06.01
3.3 Table Types  (0) 2023.06.01
3.2 Structure  (0) 2023.05.31