2024년 8월 24일 토요일

ABAP에서 비동기 프록시 호출시 COMMIT WORK를 왜 넣어줘야 할까?

아웃바운드 프록시에서 PO를 호출할때 COMMIT WORK구문을 안넣고 호출하게 되면 SXI_MONITOR이나 SXMB_MONITOR 모니터링 화면에서 아래와 같은 오류가 확인되며 PO는 호출이 안됨
“하얀색 깃발의 Message recorded (commit missing)”

COMMIT WORK

  • PO로 비동기 아웃바운드 메시지를 보내려면 해당 구문이 필요
  • ABAP에서 구문을 실행하면 데이터베이스에 커밋(변경사항을 저장)된다고 함 → 커밋하기전에 일시적으로 메모리에만 저장된다고 함
  • 커밋 구문이 없어도 프로그램이 끝날때 저장된다고 함 → ABAP Proxy 인터페이스 호출은 다를수 있을것 같음 
  • 사용자가 데이터베이스, 트랜잭션 등 변경한 내용을 영구적으로 저장할수 있게 함
  • 반대로 ROLLBACK WORK가 있는데 실행하면 커밋되지 않는 변경사항이 롤백된다고 함
  • SAP Logical unit of work(LUW)를 종료시킴
  • BAPI에서도 커밋워크가 사용된다고 함

ABAP Proxy-PO에서 커밋

  • 인바운드 프록시 경우 커밋이 필요하지 않음 → 암묵적으로 처리된다고 함
  • 인바운드 프록시 로직 구현시 명시적 커밋/롤백 작업은 SAP에서 권장하지 않는다고 함-SAP Note 1954060 및 2268877
  • 동기 아웃바운드 프록시에서는 커밋워크를 안해도 호출이 됨

비동기 아웃바운드 프록시 흐름

  1. 아웃바운드 프록시 호출
  2. 페이로드 XML변환 → XI메시지 생성
  3. 비동기 XI메시지 데이터베이스 생성
  4. 큐에 넣에 커밋워크 후에 아웃바운드 처리를 트리거 → 커밋워크와 프로그램 관련 LUW 끝
  5. 큐에 있는 XI메시지 처리 관련 LUW 시작
  6. DB에서 XI메시지를 읽어 XI아웃바운드 어댑터 호출
  7. 오류가 발생되면 암묵적으로 커밋워크

댓글 없음:

댓글 쓰기