안녕하세요. 이런경우가 반드시 있을건데...검색해보니까 제가 못찾는건지...고수님들 답변 부탁드립니다.
(1) 먼저 테이블 전체 LOCK를 거는 경우 로직 구성.
<style type="text/css">
SPAN {
font-family: "Fixedsys";
font-size: 10pt;
color: #000000;
background: #FFFFFF;
}
.L1S31 {
font-style: italic;
color: #808080;
}
.L1S32 {
color: #3399FF;
}
.L1S33 {
color: #4DA619;
}
.L1S52 {
color: #0000FF;
}</style>
CALL FUNCTION 'ENQUEUE_E_TABLE'
EXPORTING
mode_rstable = 'E'
tabname = 'SFLIGHT'
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
테스트는 SE11에서 SFLIGHT로 들어가서 "수정"버튼을 클릭하는 순간, 이런 메세지를 확인하여.
테이블 전체 Lock은 잠긴걸 확인했습니다.
제가 지금 하려고 하는것, 그리고 아직 해결 못한건...
테이블 전체가 아닌 레코드별로 락을 거는 건데...ㅠㅠ
(2) 테이블 Records 별로 Lock를 거는 로직.
<style type="text/css">
SPAN {
font-family: "Fixedsys";
font-size: 10pt;
color: #000000;
background: #FFFFFF;
}
.L1S52 {
color: #0000FF;
}</style>
LOOP AT lt_sflight INTO ls_sflight.
<style type="text/css">
SPAN {
font-family: "Fixedsys";
font-size: 10pt;
color: #000000;
background: #FFFFFF;
}
.L1S32 {
color: #3399FF;
}
.L1S33 {
color: #4DA619;
}
.L1S52 {
color: #0000FF;
}</style>
CALL FUNCTION 'ENQUEUE_ESFLIGHT'
EXPORTING
mandt = sy-mandt
carrid = ls_sflight-carrid
connid = ls_sflight-connid
fldate = ls_sflight-fldate
x_carrid = ' '
x_connid = ' '
x_fldate = ' '
_scope = '2'
_wait = ' '
_collect = ' '
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
<style type="text/css"> SPAN { font-family: "Fixedsys"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S52 { color: #0000FF; }</style> ENDLOOP.
그리고 실행한후, T-code : SM12 로 가서 조회해보니 아래와 락이 걸린 것 같이 나오네요.
근데 여기서 제가 한숨이 나오는 이유가... SFLIGHT테이블의 KEY인 carrid, connid, fldate로 LOCK OBJCT를 맞게 구성했는데... 왜? 왜? 왜? SE11에서 SFLIGHT로 들어가서 "수정"버튼을 클릭하는 순간, 아무런 꺼리낌(?)없이 잘 들어가지고... 수정후에도 "저장"버튼을 눌러도 아무 이상없이 저장이 잘 되고, se11을 빠져나갔다가 재조회를 해봐도 수정된 사항이 잘 조회된다는 겁니다. 제발 테이블에서 레코드 단위로 테이블 키로 잡아서 LOCK거는 법좀 알려주세요.
lock은 lock을 처리해준 프로그램에서만 처리가 됩니다.
그러니까 se11가서 처리하면 그쪽에는 lock 처리가 안되어 있으니 마음대로 다 되겠죠.
lock은 데이터 자체를 잠궈서 아무것도 못하게 하는 것의 의미 보다는
현재 다른 사람이 작업중이니 "손대지 마시오" 또는 "조회만 하시오" 의 의미로 생각하셔야 합니다.