궁금한게 있어서요.. 아무리 찾아봐도 속시원한 답변을 못 찾아서 글을 남깁니다.
BDC 를 수행하면 BDCMSGCOLL 에 RETURN MESSAGE 가 담기잖아요.
BDCMSGCOLL 값을 보고 성공인지 에러인지 WARNING 인지 알수 있는대요..
이 BDCMSGCOLL 의 MSGID, MSGNR 는 어떻게 지정하는건가요?
예를들어, 제가 아래와 같이 CALL TRANSACTION VA01 을 수행하고 그 결과를
G_MESSAGE_IT 에 받고나서 이 값에 따라서 화면에 성공인지 실패인지를 보여줄건대요.
다른 로직들을 보면
MSGID = **, MSGNR = *** 이면 성공
MSGID = **, MSGNR = *** 이면 실패.
이렇게 알더라구요..
그런데 이 MSGID, MSGNR 가 어떤게 성공이고 실패인지 어떻게 아는거죠?
따로 이것들만 저장해놓는 테이블데이터가 있나요? 그걸 참조해서 아는건가요?
CALL TRANSACTION 'VA01' USING bdcdata
MODE p_mode
UPDATE 'S'
MESSAGES INTO g_message_it.
IF g_message_it-msgid = 'V1' AND g_message_it-msgnr = '311'.
g_vbeln = g_message_it-msgv2.
ENDIF.
댓글 6
-
버미!
2010.08.03 16:53
-
맑은하늘
2010.08.03 17:59
보통은 msgty 이 'A', 'E', 'X' 이면 실패 아니면 성공으로 하는데요.
가끔 S(success) 타입을 던져주는데 오류인 경우가 있거든요.
그래서 최종 성공 메세지를 보고 BDC_MESSAGE 에 해당 메세지가 있을 경우 성공으로 인식을 합니다.
해당 메시지는 해당 Transaction을 실행해보면 최종적으로 나오는 메세지를 보고 판단합니다.
최종출력된 메시지를 클릭하면 id, number 등 메시지 정보를 볼수 있구요.
"저장했습니다", '오더 xxxx 를 생성했습니다" 등..
-
특정단어
2010.08.03 18:11
실제로 VA01 을 실행해서, 정상적으로 오더가 생성되면 메시지가 뜹니다.
이 메시지의 상세정보를 보면 메시지 클래스와 메시지 번호가 나옵니다. 프로그래머들은 그 번호를 참조해서 프로그램을 합니다.
이런 정보는 DB에 있는 것이 아니라(뭐 ABAP 코드 자체가 DB에 저장되지 않느냐? 하시면 할 말 없습니다만 ^^) 스탠다드 ABAP 프로그램에 해당 메시지를 호출하는 구문이 들어있습니다.
VA01과 VA02를 수행했을 때, 각각의 성공메시지는 또한 서로 다른 메시지 번호를 가지고 있습니다.
이렇게 특정한 메시지 클래스와 메시지 번호를 묶어서 핸들링하는 이유는, BDC 프로그램을
N 모드로 돌린다면 대개의 경우 sy-subrc만 보고도 성공인지 실패인지 알 수 있지만,
A 모드로 돌린다면 에러가 난 경우에도 sy-subrc가 0으로 세팅되고, msgty 역시 'S'로 들어오는 경우가 발생하기 때문입니다.
이런 경우는, 에러나 경고 발생 후, 사용자의 입력값 수정에 의해 해당 상황이 종료된 경우, 실제로 정상적인 오더 생성이 되지 않았지만 리턴값은 그렇게 변경되는 경우입니다.
이 경우에도 메시지 클래스와 메시지 번호 쌍으로 검사를 하면, 정상적으로 오더 생성이 완료되었을 때 보여지는 메시지는 검출되지 않습니다.
정리하면:
어떤 상황에서도, 원하는 BDC 작업이, "정상적으로" 완료되었는지 확인하기 위해서 SY-MSGID와 SY-MSGNO 쌍을 이용하여 검사를 수행합니다.
-
무한루프
2010.08.03 19:30
네.. 답변 감사합니다. 제가 BDC 가 제대로 수행되었는지 알기 위해서는 실제 BDC 를 정상적으로 돌려서 해당 SY-MSGID, SY-MSGNO 를 알아내어 로직에 넣어줘야 겠군요. SY-MSGID = ***, SY-MSGNO = *** 인 경우는 성공.. 으로 본다. 이런식으로요. ^^ 많은 도움 되었습니다.
-
야생이
2010.08.04 18:06
BDC 레코드를 뜰 때 최종적으로 저장을 눌러 처리되면
마지막 화면에 SY-MSGID , SY-MSGNO, 메세지등이 모두 보입니다.
그것을 이용하시면 편해요.
-
김기만
2010.08.05 22:54
아래 펑션 써보셔요.. sy-msg 함수입니다.
좋은 하루 되셔요!
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = SY-MSGID
MSGNR = SY-MSGNO
MSGV1 = SY-MSGV1
MSGV2 = SY-MSGV2
MSGV3 = SY-MSGV3
MSGV4 = SY-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = E_MESSAGE-MSGTX.
^^
BDc 리턴 메시지 보시면 MSGTY에 성공이면 S, 에러면 E로 떨어집니다.
참고하세요..