출판된 한글판 도서
ERP SAP R/3 ALE, EDI & IDOC 기술 |
Original Book Contents
3.3.3 Interface 작동
interface에 대한 ALE 설정이 완료되었으므로, 이제는 그것을 테스트해보는 흥미로운 작업을 시작하겠다. outbound interface의 경우에는 SAP 내에 자료가 이미 있거나, 최소한의 노력으로 자료를 생성할 수 있으므로, 설정내용을 테스트해보는 것이 아주 용이했다. 하지만 inbound ALE interface의 경우는 IDOC을 생성해서 SAP 안으로 전송하는 추가적인 작업를 해야 한다. 테스트와 프로토타입핑(prototyping) 목적을 위해서, 간단한 ABAP/4 프로그램을 작성하여 file형태의 IDOC를 생성해 내고, 이것을 정상적인 방법으로 SAP 안으로 전송하면, 이러한 목적을 간단히 달성할 수 있다. Interface를 프로토타입(prototype)한 다음에는, 외부시스템의 record layout과 IDOC type을 비교하여 mapping 문서를 만들어 내는 것이 매우 중요하다. 외부시스템의 record를 IDOC으로 변환시켜주는 mapping 도구이나 translator 소프트웨어를 사용할 수도 있다. ALE/EDI interface에 대하여 SAP에서 인증 받은(certified) mapping 소프트웨어제품들이 많이 있다. 이들 제품들은 또한 외부시스템을 R/3 시스템과 연결시켜주는 ‘ALE Adapter’ 기능을 가지고 있어서, 외부시스템과 R/3 시스템 간의 interface을 완벽하게 처리해 줄 수도 있다. 우리는 mapping 도구의 역할에 대하여 제 6장에서 논의할 것이다.
● File형태의 IDOC 생성 Program 작성
우리의 interface를 테스트하기 위해서, 우리는 file형태의 IDOC을 생성해 내는 ABAP/4 프로그램을 작성할 필요가 있다. 또한 그 interface를 성공적으로 프로토타입(prototype)하기 위해서는 IDOC type안에 있는 여러 가지 segment들과 그 field들에 대하여 잘 이해하는 것이 중요하다. 예를 들면, 특정 field의 어떤 값은 application으로 하여금 사전에 지정한 방식대로 자료를 처리하게끔 할 수도 있고, 잘못 처리되게 할 수도 있다. 따라서 interface를 프로토타입(prototype)하기 전에, 그 IDOC type에 대한 문서를(transaction WE60을 이용하여)를 면밀히 읽어 보아야 한다.
IDOC Type WMMBID02은 두 개의 segment로 구성되어 있는데, (1) header data를 나타내는 E1MBXYH와 (2) item data를 나타내는 E1MBXYI가 그것이다. 두 가지 모두 필수 segment이며, 모든 IDOC은 E1MBXYH EDIDD record 자료가 하나 나오고, 그 다음으로 하나 또는 그 이상의 E1MBXYI EDIDD record가 나오는 형식으로 구성되어 있다. 물론 각각의 IDOC은 맨 처음에 EDIDC record를 가지고 있다. header segment는 전기일자(posting date), 문서일자(document date), document reference number, text, transaction code, 기타의 field들로 구성되어 있고, 반면에 item segment는 자재 번호, 이동 유형(movement type), plant, storage location, 구매주문 번호, 물량, 단위 등과 같은 정보를 포함하고 있는 여러 field를 가지고 있다(WMMBID02 IDOC type의 상세한 내용은 부록 F를 참조하기 바란다). 그러한 field 중에서 E1MBXYI segment에는 SAP application에서 문서들의 처리를 지시하고, 통제하는 flag가 있다. 예를 들면 E1MBXYI-KZBEW field는 구매주문(purchase order)에 대한 자재입고(goods receipt)인 경우는 반드시 “B” 값을 가져야 하고, 생산지시(production order)에 대해서는 “F”값을 가져야 한다. 만약 interface가 많은 양의 자료를 처리해야 하거나, 업무상 필요한 경우에는 하나의 header에 여러 개의 line item을 하나로 묶어서 처리할 수가 있는데, 이때는 모든 line item에 사용할 transaction code가 모두 동일하다는 것이 전제되어야 한다. 하지만 기술적인 관점에서 반드시 이렇게 할 필요는 없다.
이제 file형태의 IDOC을 생성하는 program의 일반적인 구조를 검사해 보자. file 내에 작성되는 첫 번째 record는 EDIDC record인데, 여기에는 client, 전달방향(direction), 송신 partner의 상세정보, 수신 partner의 상세 정보, port, message type, IDOC type과 같은 IDOC에 대한 control 정보가 포함되어 있다(IDOC record의 구조에 대해서는 부록 E를 참조하라). 이때 사용되는 port이름은 기본적으로 “SAP<SID>”의 값을 가지고 있는데, 이때 <SID>는 instance의 이름이다. 예를 들면 instance가 “FST”이면, port이름은 “SAPFST”가 될 것이다. EDIDD record는 EDIDC record뒤에 나온다. 우리는 먼저 segment name과 같은 EDIDD record structure의 주요 정보를 채운다. 여러분은 segment number나 hierarchy level과 같은 field는 공백으로 두어도 되는데, 이는 R/3 시스템에서 IDOC이 생성될 때, SAP가 자동적으로 처리해 주기 때문이다. 그 다음은 E1MBXYH header에 자료를 채우고, 이를 EDIDD record의 SDATA field로 옮기는 것이다. 그 다음 이 EDIDD record를 file에 기록한다. E1MBXYI detail line에 대해서도 동일한 작업을 수행하고, EDIDD record를 file에 기록한다. 이렇게 하여 하나의 IDOC을 file로 생성하는 작업이 완료된다. 필요하다면, 동일한 file안에 자료의 내용이 다른 여러 개의 IDOC을 생성할 수 있다. [그림 3-16]의 프로그램 코드를 참조하라.
(참고 : [그림 3-16]에 있는 프로그램을 이용하여 file형태의 IDOC을 생성할 때는 프로그램의 내용 중 일부를 여러분의 시스템에 맞게 조정해야 한다. 예를 들어, 송신 partner, 수신 partner, port 등과 같은 ALE 설정사항 뿐만 아니라, document/posting date, plant, storage location, 자재(material) 등과 같은 정보를 상황에 맞게 수정해야 한다).
NOTE |
outbound와 inbound에서 동시에 사용할 수 있는 IDOC type이 있으면, outbound용으로 만들어진 IDOC file을 이용하여 이러한 IDOC type에 대응되는 inbound message type에 대한 테스트 작업을 진행할 수 있다. 이미 생성되어 있는 outbound IDOC file을 inbound 용으로 수정하려고 하면, transaction WE12를 사용할 수 있다. 하지만 이를 위해서는 먼저 outbound IDOC file을 생성시켜야 한다. |
REPORT ZWMMBXY1. * ************************************************************************ *** This is an IDOC shell program to create WMMBID02 IDocs for *** *** the Goods Movement interface between an external warehouse *** *** management system and SAP R/3's Inventory Management module. *** ************************************************************************ TABLES : E2MBXYH, " WMMBID02 IDOC Type's header segment E2MBXYI. " WMMBID02 IDOC Type's detail segment * idoc control record DATA: BEGIN OF IDOC_CONTROL. INCLUDE STRUCTURE EDI_DC. DATA: END OF IDOC_CONTROL.
* idoc data record DATA: BEGIN OF INT_EDIDD. INCLUDE STRUCTURE EDI_DD. DATA: END OF INT_EDIDD. * PARAMETERS: * SAP IM Inbound Test file of IDocs OUTFILE(70) TYPE C LOWER CASE " output filename DEFAULT '\USR\SAP\FST\SYS\GLOBAL\INBOUND\WMMBXY.TXT'. * START-OF-SELECTION. * ***** Open the output file * OPEN DATASET OUTFILE FOR OUTPUT IN TEXT MODE. IF SY-SUBRC NE 0. WRITE: / 'Error opening outfile!', SY-SUBRC. EXIT. ENDIF. ******* CLEAR: IDOC_CONTROL, INT_EDIDD. ************************************************************************ * SET CONTROL VARIABLES AND WRITE CONTROL RECORD ************************************************************************ * IDOC_CONTROL-TABNAM = 'EDI_DC'. "Table name IDOC_CONTROL-MANDT = SY-MANDT. "Client IDOC_CONTROL-DOCREL = SY-SAPRL. "SAP release * IDOC_CONTROL-DOCNUM = "edi docnumber IDOC_CONTROL-DOCTYP = 'WMMBID02'. "IDOC Type IDOC_CONTROL-DIRECT = '2'. "Direction IDOC_CONTROL-RCVPOR = 'SAPFST'. "Receiver Port IDOC_CONTROL-RCVPRT = 'LS'. "Receiver Partner Type IDOC_CONTROL-RCVPRN = 'FSTCLNT100'. "Receiver Partner IDOC_CONTROL-SNDPOR = 'SAPFST'. "Sender Port IDOC_CONTROL-SNDPRT = 'LS'. "Partner Type for sender IDOC_CONTROL-SNDPRN = 'GOODSMVT01'. "Sender Partner IDOC_CONTROL-SNDPFC = SPACE. "Sender Partner function IDOC_CONTROL-MESTYP = 'WMMBXY'. "Message Type IDOC_CONTROL-IDOCTYP = 'WMMBID02'. "IDOC Type * IDOC_CONTROL-CIMTYP = "Extension type * IDOC_CONTROL-SERIAL = "Serial number for serlzn * TRANSFER IDOC_CONTROL TO OUTFILE. "write control record IF SY-SUBRC NE 0. WRITE: / 'ERROR EDIDC 1'. ENDIF.
************************************************************************ ************************************************************************ CLEAR INT_EDIDD. INT_EDIDD-TABNAM = 'EDI_DD'. INT_EDIDD-SEGNAM = 'E2MBXYH'. * INT_EDIDD-SEGNUM = * INT_EDIDD-PSGNUM = * INT_EDIDD-HLEVEL = * CLEAR: E2MBXYH. * E2MBXYH-BLDAT = '19980825'. " 8 Document date in document E2MBXYH-BUDAT = '19980825'. " 8 Posting data in document E2MBXYH-XBLNR = 'testgood'. " 16 Reference document number E2MBXYH-BKTXT = 'testgdsrecp'. " 25 Document header text *E2MBXYH-FRBNR CHAR C 16 Number of bill of lading *E2MBXYH-XABLN CHAR C 10 Goods receipt/issue slip E2MBXYH-TCODE = 'MB1C'. " CHAR C 4 Session: Current transaction * INT_EDIDD-SDATA = E2MBXYH. * TRANSFER INT_EDIDD TO OUTFILE. IF SY-SUBRC NE 0. WRITE: / 'Error writing EDIDD 1'. ENDIF. * CLEAR INT_EDIDD. INT_EDIDD-TABNAM = 'EDI_DD'. INT_EDIDD-SEGNAM = 'E2MBXYI'. * INT_EDIDD-SEGNUM = * INT_EDIDD-PSGNUM = * INT_EDIDD-HLEVEL = * CLEAR E2MBXYI. * *2MBXYI-BEAKZ CHAR C 1 Indicator: line already e *2MBXYI-XSTOB CHAR C 1 Flag: Reverse posting E2MBXYI-MATNR = '000000TESTMATERIAL'. " Material number E2MBXYI-WERKS = 'PLNT'. " CHAR C 4 Plant E2MBXYI-LGORT = '0001'. " Storage Location E2MBXYI-CHARG = 'TESTBTCH'. " Batch number E2MBXYI-BWART = '561'. " 3 Movement type (inventory *2MBXYI-INSMK = 'S'. " CHAR C 1 stock type *2MBXYI-SOBKZ CHAR C 1 Special stock indicator *2MBXYI-KZVBR CHAR C 1 Indicator: consumption po *2MBXYI-LIFNR CHAR C 10 Vendor (creditor) account *2MBXYI-KUNNR CHAR C 10 Customer number *2MBXYI-KDAUF CHAR C 10 Sales order number *2MBXYI-KDPOS CHAR C 6 Item number in customer o *2MBXYI-KDEIN CHAR C 4 Scheduling of customer or *2MBXYI-SHKZG CHAR C 1 Debit/credit indicator *2MBXYI-WAERS CHAR C 5 Currency key *2MBXYI-DMBTR CHAR C 15 Amount in local currency *2MBXYI-BWTAR CHAR C 10 Valuation type E2MBXYI-ERFMG = '555.000'. " Quantity in unit of entry E2MBXYI-ERFME = 'CS'. " CHAR C 3 Unit of entry in char.for *2MBXYI-BPMNG CHAR C 15 Quantity in order price q *2MBXYI-BPRME CHAR C 3 Order price quantity unit *2MBXYI-EBELN = " 10 Purchasing docum *2MBXYI-EBELP = " 5 Item number of purchasing *2MBXYI-ELIKZ = 'X'. " CHAR C 1 "Delivery completed" indi *2MBXYI-SGTXT CHAR C 50 Line item text *2MBXYI-WEMPF CHAR C 12 Goods recipient *2MBXYI-ABLAD CHAR C 25 Unloading point *2MBXYI-KOSTL CHAR C 10 Cost center *2MBXYI-AUFNR = " 12 Order Number *2MBXYI-ANLN1 CHAR C 12 Asset main number *2MBXYI-ANLN2 CHAR C 4 Asset sub-number *2MBXYI-RSNUM CHAR C 10 Number of reservation / d *2MBXYI-RSPOS CHAR C 4 Item number of reservatio *2MBXYI-KZEAR CHAR C 1 Indicator: final issue fo *2MBXYI-UMMAT CHAR C 18 Receiving/issuing materia *2MBXYI-UMWRK = CHAR C 4 Receiving Plant/Issuing P *2MBXYI-UMLGO = ' '. " 4 Receiving/Issuing Storage *2MBXYI-UMCHA CHAR C 10 Receiving/Issuing Batch *2MBXYI-KZBEW = " 1 Movement Indicator *2MBXYI-WEUNB CHAR C 1 Indicator: goods receipt *2MBXYI-LGNUM CHAR C 3 Warehouse number/complex *2MBXYI-LGTYP CHAR C 3 Storage type *2MBXYI-LGPLA CHAR C 10 Storage bin *2MBXYI-GRUND = " 4 Indicator:Reason for Good *2MBXYI-EVERS CHAR C 2 Shipping instructions *2MBXYI-EVERE CHAR C 2 Compliance with shipping *2MBXYI-IMKEY CHAR C 8 Internal key for real est *2MBXYI-KSTRG CHAR C 12 Cost object *2MBXYI-PAOBJNR CHAR C 10 Number for business segme *2MBXYI-PRCTR CHAR C 10 Profit center *2MBXYI-PS_PSP_PNR CHAR C 8 Project structure plan el *2MBXYI-NPLNR CHAR C 12 Network number for accoun *2MBXYI-AUFPL CHAR C 10 Planning number for trans *2MBXYI-APLZL CHAR C 8 Counter for distinguishin *2MBXYI-AUFPS CHAR C 4 Number of order item in C *2MBXYI-VPTNR CHAR C 10 Partner account number *2MBXYI-FIPOS CHAR C 14 Commitment item *2MBXYI-GSBER CHAR C 4 Business area *2MBXYI-BSTMG CHAR C 15 Goods receipt quantity in *2MBXYI-BSTME CHAR C 3 Order unit *2MBXYI-EXBWR CHAR C 15 Posting amount in local c *2MBXYI-KONTO CHAR C 10 G/L account number *2MBXYI-RSHKZ CHAR C 1 Debit/credit indicator *2MBXYI-BDMNG CHAR C 15 Requirement quantity in C *2MBXYI-ENMNG CHAR C 15 Issued quantity in char.f *2MBXYI-QPLOS CHAR C 12 Inspection lot number in *2MBXYI-UMZST CHAR C 1 Status of receiving batch *2MBXYI-UMZUS CHAR C 1 Status key of transfer ba *2MBXYI-UMBAR CHAR C 10 Valuation type of transfe **MBXYI-UMSOK CHAR C 1 Special stock indicator f *2MBXYI-LFBJA CHAR C 4 Fiscal year of a referenc *2MBXYI-LFBNR CHAR C 10 Document number of a refe *2MBXYI-LFPOS CHAR C 4 Item in a reference docum *2MBXYI-SJAHR CHAR C 4 Material document year in *2MBXYI-SMBLN CHAR C 10 Number of a material docu *2MBXYI-SMBLP CHAR C 4 Item in material document *2MBXYI-EXVKW CHAR C 15 Sales value specified ext *2MBXYI-QM_ZUSTD CHAR C 1 Batch status with status *2MBXYI-POSNR CHAR C 6 Delivery item for subsyst *2MBXYI-VBELN CHAR C 10 Delivery *2MBXYI-QM_UMZST CHAR C 1 Status of receiv. batch w *2MBXYI-BWLVS CHAR C 3 Movement type for Whse Mg *2MBXYI-UMREZ = ' '. " 5 NUMERATOR FOR CONVERTING *2MBXYI-UMREN = ' '. " 5 DENOMINATOR FOR CONVERSIO *2MBXYI-VFDAT = ' '. " 8 EXPIRATION DATE OR BEST-B *2MBXYI-DABRZ DATS D 8 Reference date for accoun * ******************************** write EDIDD record ******************** INT_EDIDD-SDATA = E2MBXYI. TRANSFER INT_EDIDD TO OUTFILE. IF SY-SUBRC NE 0. WRITE: / 'ERROR EDIDD 2'. ENDIF. ************************************************************************ * |
그림 3‑16 IDOC 생성 Program 예제
● File형태의 IDOC를 R/3 안으로 전송하기
우리의 IDOC 생성 program을 이용하여 file형태의 IDOC을 생성했기 때문에, 이제 IDOC을 R/3 시스템 안으로 전송할 준비가 완료되었다. 이 작업은 SAP표준 프로그램 RSEINB00을 사용하면 간단히 처리할 수 있다. 이렇게 하기 위해서는 다음 작업들을 수행한다. [그림 3-17]과 [그림 3-18]을 참조하라.
n 프로그램 RSEINB00을 실행한다.
n IDOC file이 있는 directory 경로와 file 이름을 입력한다.
n 프로그램을 실행한다.
n 여러분은 file이 ALE layer로 전송되었음을 보여주는 안내 메시지를 보게 될 것이다.
transaction WE16을 사용하거나 transaction WEDI à [Test] à [Inbound Processing of Original Inbound File]을 실행해도 유사한 작업을 할 수 있다. transaction WE02나 WE05를 사용하여 앞에서 생성된 IDOC을 조회해 보라. 그 IDOC들의 status가 “53”(application document posted) 인지를 확인하라. 우리가 partner profile을 설정할 때, 처리방식(processing option)으로 “Trigger immediately”를 선택했음을 기억하기 바란다. 만약 우리가 background 방식의 처리를 선택했다면, IDOC을 application으로 반영하기 위해서는 프로그램 RBDAPP01을 별도로 실행할 필요가 있을 것이다. IDOC은 처리가 진행됨에 따라 여러 단계의 status를 거쳐가는데, 예를 들면 “50”(IDOC added), “64”(IDOC ready to passed to application), “62”(IDOC passed to application), 그리고 “53”(application document posted) 등이 그러한 예들이다.
그림 3‑17 File형태의 IDOC을 SAP 안으로 전송하기
그림 3‑18 생성된 Inbound IDOC
이 절을 읽으면서 여러분이 인식했겠지만, transaction data에 대한 ALE interface는 별로 어려움이 없이, 그리고 짧은 기간 내에 설정을 하고, 프로토타입(prototype)해 볼 수가 있다. 하지만 중요한 것은 interface에 대한 업무 상의 요구사항을 정확히 파악하고, 이를 SAP표준 기능에 맞추어 나가는 것이다. 만약 SAP가 제공하는 ALE 기능이 처리할 수 없는 gap이 있다면, 우리는 ALE function module을 enhance하거나, IDOC extension을 통하여 이러한 문제를 극복해 나갈 수 있다. 이러한 절차는 다음 장에서 논의될 것이다.
R/3 시스템에서 활용할 수 있는 ALE message type을 조회해 보면(부록 B를 보거나 보다 상세한 내용이 필요하면 transaction WE81을 이용하라), SAP 내에서 ALE 기능이 지원되는 업무영역이 수백 개 있다는 것을 발견할 수 있을 것이다. 그들 중 대부분이 이 절에서 우리가 프로토타입(prototype)해 본 것과 같은 transaction data를 처리하는 것이다. 그들은 SAP의 거의 모든 application module에 걸쳐 있다. 또한 제 5장에서 우리가 배우겠지만, 필요하다면 상대적으로 최소한의 노력을 들여서 새로운 ALE function을 생성할 수도 있다. R/3 시스템을 설치하는데 필요한 설치비용과 노력을 절감하고, 신뢰할 만한 시스템을 만들어 내기 위해서는 고급수준의 디자인 과정의 일부로서, SAP에서 기본적으로 제공해 주는 강력하고, 견고한 ALE 시나리오를 검토하는 것이 매우 중요하다.