SAP ALE IDOC EDI-Kor_04.3.2 Customer Function Enhancements

출판된 한글판 도서


ERP SAP R/3 ALE, EDI & IDOC 기술


Original Book Contents


4.3.2    Customer Function Enhancements

 

이전에 언급한 것처럼, customer function(function exit) ALE function module에 삽입되어, outbound에서 있어서는 IDOC의 생성과 변경에 영향을 주고, inbound인 경우는 추가되거나 변경된 IDOC 자료를 R/3 application에 반영하기 위해서 사용할 수 있다. 이러한 function module은 일반 function module과 비슷하며, import/export parameter, table(internal table) parameter, exception parameter를 가지고 있다. customer function을 개발하는 과정에서 고려해야 할 두 가지의 중요한 요소는 (1) ALE function module에서 function exit이 발생하는 시점과 (2) IDOC의 방향에 따라(inbound/outbound), outbound에서는 IDOC 생성시에 추가 보충되거나 변경되어야 하고, inbound에서는 R/3 application에 추가적으로 반영되어야 할, 해당 자료를 customer function에서 사용할 수 있는가 하는 것이다. 여러 개의 customer function을 가지고 있는 function module이 있기 때문에, 우리가 원하는 특정 enhancement에 꼭 맞는 적절한 function exit을 선택하는 것이 매우 중요하다. function exit이 원래 의도했던 목적이 아닌 다른 목적에 function exit을 사용하려고 시도하지 않기를 바란다.

 

  Outbound

 

outbound ALE interface에서, 우리의 업무 상의 요구사항에 따라 IDOC extension에 의해서 생성된 추가 segment에 값을 보충하거나, 기존의 IDOC 자료 segment의 값을 변경하고자 할 때, function exit(customer function)을 사용할 수 있다. 앞에서 우리는 enhancement VSV00001 component EXIT_SAPLVV01_001(function exit)을 포함하고  있고, IDOC extension type ZDEBMASX에서 우리가 생성한 추가적인 data segment Z1ADRCX에 값을 보충하기 위해서, function exit을 사용할 수 있다는 것을 파악했다. 우리는 또한 이 function exit을 호출하는 ALE function module MASTERIDOC_CREATE_DEBMAS이고, 그 속에 Call Customer Function 001.이라는 문장이 있다는 것도 배웠다. transaction SE37을 사용하여 function module MASTERIDOC_CREATE_DEBMAS의 내용을 직접 살펴보기 바란다. 그러면 여러분은 IDOC type DEBMAS05의 매 segment마다 이 customer function이 호출되고 있는 것을 발견하게 될 것이다. 사실 기존의 segment에 자료를 채워서 IDOC record를 만들고, IDOC data table(internal table) append한 후에, 곧바로 이 function exit이 호출된다. 또한 function exit을 호출할 때의 parameter를 살펴보면, message type, IDOC type, segment name export하고, IDOC extension type import하고, IDOC data internal table을 전달해 주고 있음을 알수 있다. 이것은 ALE function module, 필요하다면 기존의 모든 segment에 대하여 별도 segment를 추가할 수도 있고, 기존 segment에 있는 자료를 변경할 수도 있는 기회를 우리에게 제공해 주고 있다는 것을 시사해 준다. 이 점을 인식했다면, 우리의 작업을 완수하기 위해서 IDOC segment Z1ADRCX Customer Master에 있는 contact person business address자료를 보충하는 ABAP/4 프로그램을 작성해 보도록 하자.

 

n  transaction SE37에서 function module MASTERIDOC_CREATE_DEBMAS를 조회한다.

n  customer function 001을 발견한다

n  001 double-click한다.

n  그러면 function EXIT_SAPLVV01_001이 나타날 것이다.

n  INCLUDE ZXVSVU01 double-click한다.

n  새로운 Include Object을 생성할 것인지를 물어 오면, 그것이 생성되도록 한다.

n  [그림 4-11]과 같은 프로그램 코드를 작성한다.

n  반드시 main program check([Function module]) à [Check] à [Main program]) extended program check([Function module)] à [Check] à [Extended program check])를 수행하기 바란다.

 

다음은 [그림 4-11]에 있는 프로그램 코드에 대한 간략한 설명이다.

 

n  Import parameter CIMTYPE에는 extension type ZDEBMASX를 지정한다.

n  현재 처리되고 있는 segment E1KNVKM인지를 결정한다.

n  E1KNVKM 상세자료를 얻기 위해서 internal table T_IDOC_DATA의 마지막 행을 읽는다.

n  EDIDD record SDATA 항목을 structure E1KNVKM로 이동한다.

n  contact persone number를 이용하여 table KNVK에서 ADRND(address number) field를 읽는다.

n  ADRND를 이용하여 table ADRC에서 address을 읽는다.

n  ADRC field정보들을 segment structure Z1ADRCX의 대응되는 field로 이동한다.

n  Z1ADRCX EDIDD record(IDOC_DATA) SDATA 항목으로 이동한다.

n  Segment nameZ1ADRCX를 지정한다.

n  이렇게 만들어진 IDOC 자료를 internal table append한다.

 

*----------------------------------------------------------------------*

*   INCLUDE ZXVSVU01                                                   *

*----------------------------------------------------------------------*

************************Modification************************************

* Programmer      : Rajeev Kasturi

*

* Change          : This include is for the Customer function

*                   001 enhancement of MASTERIDOC_CREATE_DEBMAS,

*                   Customer Master ALE distribution of

*                   changes to Masster data. This CF is being

*                   used to populate IDOC extension such as :

*    1. Business/Mailing Address of customer Z1ADRCX.

*

*    This enhancement is a component of project CSTMAST1.

*

************************************************************************

 

CONSTANTS: C_CIMTYPE LIKE EDIDC-CIMTYP VALUE 'ZDEBMASX',

           C_E1KNVKM LIKE EDIDD-SEGNAM VALUE 'E1KNVKM'.

 

*

DATA: V_LINENO TYPE I.

 

*

TABLES: ADRC, KNVK, Z1ADRCX, E1KNVKM.

 

*

*

IDOC_CIMTYPE = C_CIMTYPE.

 

*

CASE SEGMENT_NAME.

WHEN C_E1KNVKM.

 

*** This section creates segment Z1ADRCX with business

*** address info.  it will be created only if

*** the Business/Mailing address has been maintained.

 

    V_LINENO = 0.

    DESCRIBE TABLE IDOC_DATA LINEs V_LINENO.

    READ TABLE IDOC_DATA INDEX V_LINENO.

    CHECK SY-SUBRC EQ 0.

    E1KNVKM = IDOC_DATA-SDATA.

 

*

 

    SELECT SINGLE ADRND FROM KNVK

      INTO KNVK-ADRND

     WHERE PARNR = E1KNVKM-PARNR.

 

*

    CHECK SY-SUBRC EQ 0.

    SELECT SINGLE * FROM ADRC

     WHERE ADDRNUMBER = KNVK-ADRND.

 

*

 

    CHECK SY-SUBRC EQ 0.

    CLEAR: Z1ADRCX, IDOC_DATA.

 

    MOVE-CORRESPONDING ADRC TO Z1ADRCX.

    MOVE E1KNVKM-PARNR TO Z1ADRCX-PARNR.

    Z1ADRCX-MSGFN = E1KNVKM-MSGFN.

    IDOC_DATA-SEGNAM = 'Z1ADRCX'.

    IDOC_DATA-SDATA  = Z1ADRCX.

 

    APPEND IDOC_DATA.

 

ENDCASE.

그림 4‑11 ALE Function Exit -- Customer Master Enhancement에 대한 ABAP/4 예제

 


 

  Interface 작동

 

지금까지 우리는, 우리의 필요성에 따라 Customer Master 상에 있는 contact person business address에 대하여 IDOC extend하고, ALE function module enhance했기 때문에, 이제 interface를 테스트해 보도록 하자. 여러분은 이 interface에 대하여 logical system을 생성하고, port를 정의해야 한다. 또한 여러분은 message type DEBMAS가 이 logical system으로 분배될 수 있도록 customer distribution model을 설정해야 한다. 일반적인 outbound ALE interface enhance outbound ALE interface의 유일한 차이는 partner profile이다. partner profile에서 outbound parameter를 설정할 때, Basic IDOC type extension type을 동시에 지정하도록 한다. 우리의 경우는 Basic IDOC type에는 DEBMAS05를 지정하고, extension type에는 ZDEBMASX의 값을 지정한다. [그림 4-12]를 참조하라.

 

그런 다음 Customer Master에서 contact person business address자료를 변경한다. transaction BD12를 실행하거나, 시작메뉴 [Tools] à [ALE] à [Master Data Distribution] à [Cross-Application] à [Customer] à [Send]를 실행해고, 화면에서 customer number, message type, logical system과 같은 필드에 값을 입력한 다음, 프로그램을 실행하여 Customer Master 자료를 송신하라. transaction WE02 또는 WE05를 사용하여 생성된 IDOC을 검증한다. 여러분은 새로운 segment Z1ADRCX가 생성되어 있고, 해당 자료가 채워져 있는 것을 볼 수 있을 것이다. [그림 4-13]을 참조하라.

 

SAP 표준 기능에서는 contact person business address에 대해서 change document object를 사용할 수 없기 때문에, change pointer를 통하여 business address에 대한 변경사항을 포착할 수가 없고, 또한 contact person business address에 대해서는 change document가 생성되도록 설정할 수 없다는 것을 명심하기 바란다. 여러분이 이러한 기능을 구현하고자 한다면, 다음 장에서 설명하는 것처럼, contact person business addresd에 대하여 change document object를 생성하고, change document를 생성하는 function module을 작성하여 서로 연결시키거나, 또는 contact person business address가 변경되면, contact person에 대한 변경사항을 마치 Customer Master에 대한 변경인 것처럼 가장하여 Customer Master에 대한 change pointer가 생성될 수 있도록 하기 위해서, contact person screen enhancement에서 눈속임으로 변경작업(cosmetic change)을 해야 한다. 이렇게 하여, 우리가 만든 ALE enhancement Customer Master business address에 대한 변경사항을 포착할 수 있게 하는 것이다.


 


그림 4‑12 IDOC Extension에 대한 Partner Profile설정


그림 4‑13 IDOC Extension에 의해 생성된 IDOC


 

 

  Inbound

 

inbound ALE interface enhancement하는 과정은 몇 가지 차이점, 특히 ALE/EDI function module에 있는 customer function(function exit)에서 프로그램 코드를 작성할 때의 차이점을 제외하고는 outbound와 유사하다. 적절한 level 계층에 있는 기존의 관련 segment에 연결하여 새로운 segment를 추가함으로써, 해당 Basic IDOC type에 대하여 IDOC extension을 생성하라. IDOC SAP로 전송되기 전에, 새로운 segment에 있는 field들은 translator나 외부시스템에 의하여 application 자료로 채워져야 할 것이다.  inbound의 경우에도 앞에서 설명한 방식을 이용하여, inbound 처리에서 호출되는 ALE function module을 찾아내라. transaction SMOD를 사용하여 function exit enhancement에 대한 프로그램 코드를 면밀히 살펴보거나, 문서를 잘 읽어서, 여러분의 프로그램 코드를 삽입할 정확한 function exit를 찾아내라. application 처리규칙과 업무 요구사항, 처리 과정상 그 시점에서 사용할 수 있는 자료, 그리고 만약 있다면 application에 자료를 반영하기 위해서 사용할 수 있는 application의 표준 function module에 따라, 추가되거나 변경된 IDOC 자료를 application에 반영해 주는 function exit 프로그램 코드 안에서 사용할 수 있는 기술은 많이 달라질 수 있다. 먼저 자료를 처리해 줄 수 있는 application의 표준 function module을 찾아서, 그것들이 function exit 내에서 사용될 수 있는지를 알아보는 것이 매우 중요하다. 만약 extend segment 상에 있는 추가 자료가 custom table과 연관이 있거나, 하나 또는 몇 개 table 상의 key가 아닌 field와 관련이 있다면, 여러분은 function exit 내에서 SQL문장을 사용하여 직접 그 자료를 갱신할 수도 있다. 하지만 이러한 방식은 조심스럽게 평가하여 결정해야 하며, 확실히 추천할 만한 좋은 방식은 아니다.

 

또 다른 선택 가능한 방식중의 하나는, 추가된 자료를 처리하기 위해서 function exit 내에서 Call Transaction을 사용하는 것이다. 예를 들어, message type WMMBXY를 사용하여 창고관리 시스템(Warehouse Management System)에서 전송되어 온 inbound 자재이동(goods movement)을 처리하고자 하는 경우에, 표준 interface는 자재(material)에 대한 batch는 생성해 주지만, batch에 대한 characteristics는 갱신하지 않는다. 그러한 경우에, SAP에서 제공하는 function exit 내에서 batch를 생성하고, 그것에 characteristics값을 지정하기 위해서, 여러분은 Call transaction MSC1을 사용할 수 있다.  inbound ALE/EDI object enhance할 때 고려해야 할 아주 중요한 사항은 오류처리(error handling)에 관한 것이다. ALE EDI inbound 처리에서는 기술적인 면에서의 오류나 업무적인 면에서의 오류와 같은, 여러 가지 오류를 처리하기 위해서 Workflow가 사용된다. interface 상에서 Workflow가 사용되도록 설정되어 있다면, 오류 messageworkflow Item이 사전에 지정된 수신자의 inbox로 전송된다. inbound ALE/EDI 프로세서를 수정할 때 고려해야 할 중요한 항목은 workflow를 처리하는 방식도 동시에 enhance해야 한다는 것이다. 대부분의 시나리오에서는, function exit(customer function) 내에서 사용할 수 있는 workflow parameter message에 영향을 줄 수 있는 방법을 SAP가 기본적으로 제공하고 있기 때문에, 이러한 작업은 그렇게 어려운 작업이 아니다. 이러한 것들은 일반적으로 workflow를 통하여 지정된 작업을 처리하게 해주는 flag message code의 형태로 되어 있다. workflow 처리를 위해서는 지정된 status code flag의 정의에 따르기만 하면, enhancement작업은 오류가 없이 완벽하게 처리할 수 있다.

주의사항 : extend inbound IDOC을 생성하는 경우는 EDIDC CIMTYP(extension type) field 에 값을 지정해야 한다.