MOVE ITAB-BNFPO TO IT_ITEM_DEL-PREQ_ITEM.
MOVE 'X' TO IT_ITEM_DEL-CLOSED.
APPEND IT_ITEM_DEL.
CALL FUNCTION 'BAPI_REQUISITION_DELETE'
EXPORTING
NUMBER = ITAB-BANFN
TABLES
REQUISITION_ITEMS_TO_DELETE = IT_ITEM_DEL
RETURN = IT_RETURN.
WAIT UP TO 1 SECONDS.
COMMIT WORK.
LOOP를 돌면서 이와 같이 간단한 BAPI를 실행합니다. 근데 매번마다 WAIT하면 시간이 너무 오래 걸립니다.
꼭 WAIT해줘야 하나요? 안해준다면 문제가 생기는지?
답변부탁드립니다.
댓글 6
-
andy
2009.08.28 18:52
-
Bizzard.Chul
2009.08.28 19:52
감사합니다.
어떤 경우에 wait를 사용해야 되나요?
-
서연아빠
2009.08.28 20:28
Bapi 평션중에는 몇가지 주위할 것이 있는데..
먼저 Lock 관련입니다.
BAPI 가 실행 중일때 특정 OBJECT를 LOCK을 거는 경우가 있는데..
평션이 실행된후에 약간의 시간이 지난후 LOCK이 풀리는 경우가 있습니다. 그래서 WAIT를 잡아주는 거구요
또한 그런 경우가 발생하는 것중에는 평션이 실행되었어도 내부의 BDC 등은 아직 실행중인 경우도 있습니다.,
그리고 물론 BAPI중에는 내부에 BDC를 포함하는 경우도 있구요...
-
Bizzard.Chul
2009.08.29 01:07
감사합니다.
-
요요
2009.08.29 01:10
보통은 WAIT UP TO 1 SECONDS.
COMMIT WORK.
또는 COMMIT WORK AND WAIT. 를 쓰시기도 합니다.
BAPI 에 대한 COMMIT 펑션이 있으니 찾아서 쓰시면 되구요.
일반적인 커밋 펑션은
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
을 사용합니다.
BAPI 마다 COMMIT 하는 펑션이 다른 경우도 있으니
해당 BAPI 에 대한 적절한 COMMIT 펑션을 찾아서 쓰시면 될 거예요.
WAIT UP TO 1 SECONDS. 처럼 대기시간을 갖는 경우는
처리후 후속처리로 지금 실행한 결과 데이터를 검색해서 사용할 경우,
새로운 세션을 생성하여 처리할 경우,
외부에서 호출(RFC 등)하였을 경우 기타등등이 있습니다.
개별 처리라면 굳이 대기시간을 줄 필요는 없을 것 같네요.
위 바피 펑션은 구매요청번호 건당 처리하는 것으로 봐서 처리후 후속작업이 있으신것 같네요
그렇지 않으시다면 REQUISITION_ITEMS_TO_DELETE 에 해당 번호를 모두 넣고 한번에
돌리셔도 될거예요. ^^;
-
Bizzard.Chul
2009.08.29 02:55
감사합니다.
wait 를 하지 말고, BAPI에서 리턴 값을 받아서, 정상 처리 되면,
바로 커밋을 하는 로직으로 바꾸심 될 듯 합니다.