안녕하세요. 회사에서 ABAP 유지보수를 하며 ABAP 개발 공부중에 있습니다.
일단 저희 회사에서는 개발/QA/운영 3개 서버로 유지보수 및 운영하고 있으며 문의드릴 사항은 I/F 관련한 내용입니다.
기존에 사용중인 생산/물류 시스템(Legacy)로 SAP에서 I/F 해주는 ABAP 프로그램이 있습니다.
이때, 직접 SAP <-> Legacy로 I/F 하지 않으며, PO라는 EAI를 통해 SAP <-> PO <-> Legacy로 I/F 를 하고 있습니다.
(SAP가 도입되고 현재 회사에서 처음 접하는거라 타 회사에서도 이런식으로 시스템을 운영하는지 모르겠네요 ㅎㅎ)
문제는 개발서버에서는 I/F 테스트가 문제가 없는데.. QA에서는 I/F는 성공적으로 이루어지나 결과를 리턴받으면서 문제가 발생합니다.
1) 데이터 취합 후 I/F 진행 -> 이때 PO로부터 MESSAGE ID를 리턴받음
2) 성공여부를 구분하기 위하여 리턴받은 MESSAGE ID를 조건으로 SXMSPMAST라는 테이블에서 데이터를 조회하여
존재하면 경우에 따라 성공(S), 존재하지 않으면(E)로 구분하고 있습니다.
존재하지 않으면 어떤 구분도 없이 공백으로 처리되기 때문에 성공으로 인지를 못하고 있습니다...ㅠㅠ
문제는 QA서버에서 SXMSPMAST테이블을 조회해보니 데이터가 존재하지 않습니다.(조건에 상관없이 0 엔트리)
그렇기 때문에 어떤 MESSAGE ID를 리턴 받아도 성공으로 판단을 할 수 없기에 I/F는 되었으나, 성공으로는 확인할 수 없는 상황입니다.
확인해보니 개발/운영 서버에는 데이터가 존재하는걸로 봐선 단순히 QA서버에서 뭔가.. 설정이 안되어있지 않을까 싶습니다만..
아무리 검색해도 속시원한 내용이 없네요
* PO 담당자에게 연락해보니 SXMSPMAST라는 테이블은 PO랑은 관계가 없으며, PO는 단순히 데이터 전송 후 결과를 리턴(MESSAGE ID)해줄 뿐
해당 테이블은 아마 SAP시스템에 설정을 해주면 자동으로 채워지는 스탠다드 테이블이라고 하네요..
* 저희 SAP 구축때 참여했던 ABAP 개발자분은 PO에서 채워주는걸껄요..? 하시더라구요 난감합니다 ㅎㅎㅎ
SXMSPMAST 테이블에 값이 존재한다는게 무슨 의미며, 없는 서버와 있는 서버의 차이.. , 무엇을 설정해줘야 할지
도움 요청드립니다!!!
IF 용 RFC나 Class method 에 항상 전달할 내용물이 있는지를 체크합니다
객체지향으로 코딩된 경우 check LO_OBJECT is bound 등으로 체크하거나
더 명확하게 코딩하면 클래스 내에 Metadata (Internal Table) 이 initial 상태인지, 값이 있는지를 확인합니다
절차지향형이나 섞어쓰는 코딩 같은경우에는
Internal Table 이나 변수가 initial 인지, Null 인지, 아니면 값이 존재하는지 등을 체크하는 로직을 넣습니다.
이렇게 하는 이유는 언급하신 바와 같이 아무것도 없는 데이터를 가지고 Interface를 했을때
시스템의 SUBRC 식별자로만으로 판단하기 어렵기 때문입니다. 로그를 추적하기도 어렵구요
언급하신 SXMSPMAST테이블은 XI 모듈에서 주로 다루는데요 XI모듈을 통해서 Interface를 할때 출력되는 메세지들의 마스터 테이블입니다.
영문설명으로 Integration Engine: Message Queue (Master) 이렇게 되어있죠.
이 테이블은 설정에 따라 채워질수도, 시간단위로 지워질수도 있는 그런 테이블입니다. QA서버에 데이터가 없다면, QA서버에서 XI 모듈을 활용한 외부 시스템 혹은 Ms파일 내려받기를 하는등의 트랜젝션(행위, 액션) 이 없었다거나, 반대로 XI모듈 설정을 취소했거나 안했다 등으로 볼 수 있습니다.
될지는 모르겠는데, 운영서버의 SXMSPMAST 데이터를 QA시스템에 임의로 업로드해서 수행을 해보시면 어떨까요?
제가 유추해보건데 본인이 XI모듈 컨설이 아니신것 같으니, 기능이 작동하는지만 보면 테스트 하시는데에는 문제가 없어보입니다만..