LabHub

시스템 간 연동 (EAI) · SAP·레거시 연동 패턴 · 실습

IDoc 플랫 파일 파싱과 검증

LabHub 에서 이어서 보기

목표

SAP IDoc 플랫 파일을 제어/데이터 레코드로 분해하고, 세그먼트 레이아웃대로 SDATA 를
파싱해 검증하고, 내부 표준 JSON 으로 변환할 수 있게 됩니다.

왜 중요한가

국내 대기업 프로젝트에서 ERP 연동은 거의 항상 만납니다. 그리고 회의에서
"IDoc 으로 받으시면 됩니다"라는 말이 나오는 순간, 구조를 모르면 아무것도
결정할 수 없습니다. 실제로 IDoc 파싱은 **세그먼트 이름으로 레이아웃을 찾아
1000자짜리 SDATA 를 위치로 자르는 일**이고, 앞 모듈의 고정길이 파싱과 같은 작업입니다.
그리고 운영에서 가장 자주 보게 될 상태 코드 51 이 '전송 실패'가 아니라
'SAP 안에서 업무 처리 실패'라는 것을 아는 것만으로도, 연동 담당자 간 평행선을
한 번 끊을 수 있습니다.

단계

0. 원본: /opt/lab/fixtures/eai/idoc/ORDERS05.txt,
레이아웃: /opt/lab/fixtures/eai/idoc/segments.md
1. /root/idoc 을 만들고 제어 레코드만 /root/idoc/control.txt,
데이터 레코드만 /root/idoc/data.txt 로 분리합니다.
두 파일의 줄 수 합이 원본 줄 수와 같아야 합니다.
2. /root/idoc/ctrl.csv 를 만듭니다. 첫 줄은
docnum,idoctyp,mestyp,sndprn,rcvprn,credat.
제어 레코드 한 건당 한 행이고 docnum 오름차순입니다.
3. /root/idoc/segstat.csv 를 만듭니다. 첫 줄은 segnam,count.
세그먼트 이름별 건수를 건수 내림차순, 동수면 이름 오름차순으로 적습니다.
4. E1EDK01 세그먼트를 파싱해 /root/idoc/header.csv 를 만듭니다.
첫 줄은 docnum,belnr,curcy,netwr. netwr 은 헤더 총액입니다.
5. E1EDP01 세그먼트를 파싱해 /root/idoc/items.csv 를 만듭니다.
첫 줄은 docnum,posex,matnr,menge,netpr,amount.
amountmenge × netpr 입니다.
6. /root/idoc/validate.sh 를 만듭니다. 인자 없이 실행하며,
헤더의 netwr 과 품목 amount 합계가
다른 IDoc 의 docnum 을 한 줄에 하나씩 출력하고,
하나라도 있으면 0 이 아닌 종료코드로 끝냅니다.
실행 결과를 /root/idoc/mismatch.txt 에 저장하세요. (1건이 있습니다.)
7. /root/idoc/status.csv 를 만듭니다. 첫 줄은 code,meaning,action.
03, 12, 51, 53, 64, 68 여섯 코드를 모두 넣고,
action정상, 대기, 조사, 재전송 중 하나입니다.
8. /root/idoc/orders.json 을 만듭니다. 최상위는 배열이고,
각 원소는 아래 구조입니다. docnum 오름차순입니다.

   { "docnum": "...", "belnr": "...", "currency": "...",     "netAmount": <숫자>,     "items": [ { "posex": "...", "matnr": "...",                  "qty": <숫자>, "price": <숫자> }, ... ] }

참고

단계 8개

  1. 제어·데이터 레코드 분리
  2. 제어 레코드 파싱
  3. 세그먼트 통계
  4. 헤더 세그먼트 파싱
  5. 품목 세그먼트 파싱
  6. 헤더-품목 금액 검증
  7. 상태 코드 매핑표
  8. 내부 표준 JSON 변환