SAP ALE IDOC EDI-Kor_05.6 SAP Application 프로그램 Enhancement

출판된 한글판 도서


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


Original Book Contents


5.6      SAP Application 프로그램 Enhancement

 

우리가 생성한 function module KUNHIER_WRITE_DOCUMENT은 실제로 Customer Hierarchy 자료를 관리하는 SAP application 프로그램과 하나로 통합될 필요가 있다. transaction VDH1(maintenance)VDH2에 의해서 호출되는 프로그램 RVKNVH00 Customer Hierarchy자료를 처리하는 과정에서, 적절한 시점에 그 update function module을 호출하도록 해야 한다. 프로그램 RVKNVH00을 살펴보면, SAP VDH1의 해당 session에서 발생한 변경사항을 table KNVH에 갱신해주는 function module CUSTOMER_HIERARCHY_UPDATE을 호출한 직후에, update function module을 호출할 수 있다는 것을 알 수 있다. 여러분은 이 호출이 IN UPDATE TASK 방식으로 처리되고 있고, 또한 우리의 update function moduleIN UPDATE TASK 방식으로 처리할 필요가 있다는 것에 주의하라. 프로그램 RVKNVH00 은 두 개의 internal table XVKNVH YVKNVH를 이용하여 customer hierarchy 자료에 대한 새로운 자료와 이전 자료를 보관하고 있다. 우리는 update function module을 호출하여 table CDHDR CDPOS를 갱신하기 위해서 이 두 개의 internal table을 이용할 것이다.

 

여러분이 이미 인식하고 있겠지만, 우리가 transaction SCDO를 이용하거나 프로그램 RSSCD000을 이용하여 update function module을 생성했을 때, form routine CD_CALL_KUNHIER이 동시에 생성되었고프로그램 RVKNVH00 속에서 이 form routine을 사용할 수 있다. form routine을 여러분의 필요에 따라 수정하여 사용하라. [그림 5-6]을 참조하라. 우리는 프로그램 RVKNVH00 속에 이 form routine을 삽입해야 하는데, 프로그램 RVKNVH00의 주 프로그램 코드 속에서 function module CUSTOMER_HIERARCHY_UPDATE에 대한 호출이 완료된 다음에, form routine이 호출되도록 해야 한다. [그림 5-7]에서 보여준 일단의 프로그램 코드는 internal table XVKNVH YVKNVH를 다루고 있다. 이들은 모두 table KNVH에 대한 자료를 보관하고 있는데, internal table XVKNVH는 변경이후의 자료를 보관하고 있고, internal table YKNVH는 변경이전의 자료를 보관하고 있다. 이 프로그램에서는 internal table XVKNVH 속에 있는 각각의 자료에 대하여 reference internal table I_XVKNVH을 만든다. 그런 다음 internal table YKNVH key값이 동일한 자료가  있는지를 점검한다. 만약 일치하는 것이 있으면, reference internal table I_YVKNVH을 만든다. 이 두 개의 reference internal table I_XVKNVH I_YVKNVH form routine CD_CALL_KUNHIER parameter로 전달된다. 그러면 그 form routine update function module KUNHIER_WRITE_DOCUMENT을 호출하게 되는 것이다. module reference internal table을 근거로 하여 change document를 생성하면서, table CDHDR CDPOS를 갱신한다입력, 수정, 또는 삭제와 같은 변경 유형은 internal table KZ field에 반영되어 있는데, 이는 change document을 생성할 때 사용된다. 여러분은 ABAP/4 data 문장을 이용하여, 이러한 두 개의 internal table을 정의할 필요가 있다는 것에 주의하라.

 

여러분은 프로그램 RVKNVH00을 복사하여, 예컨대 ZVKNVH00과 같은 프로그램을 만든 다음, 앞에서 언급한 사항들이 반영되도록 변경하여 사용할 것을 강력히 추천한다. 그렇게 하는 경우에, 여러분은 transaction SE93(Maintain SAP transaction)을 사용하여, transaction VDH1, WDH1, VDH2, WDH2가 프로그램 ZVKNVH00을 호출하도록 할 필요가 있다. 또한 여러분은 customer hierarchy에 대한 미래시점의 지정(assignment)이라는 특별한 경우를 처리할 수 있도록 프로그램 ZVKNVH00을 추가적으로 변경할 수도 있다는 것에 주의하라. 만약 이러한 작업을 하고자 한다면, [그림 5-7]에 있는 것처럼, 우리가 form routine을 호출하는 코드를 추가했던, 바로 그 동일한 프로그램 블록 내에서 필요한 내용을 간단하게 삽입하여 처리할 수 있다.  

 

************ Insert Form here ******************************************

******* Form routine to create change documents. This function module  *

******* was "generated" based on CD object KUNHIER.                    *

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

FORM CD_CALL_KUNHIER

             TABLES FXKNVH STRUCTURE VKNVH

                    FYKNVH STRUCTURE VKNVH

             USING  UPD_KNVH OBJECTID.

***

  IF   ( UPD_KNVH       NE SPACE ).

*    CALL FUNCTION 'SWE_REQUESTER_TO_UPDATE'.

    CALL FUNCTION 'KUNHIER_WRITE_DOCUMENT        ' IN UPDATE TASK

         EXPORTING

              OBJECTID                = OBJECTID

              TCODE                   = 'VDH1'

              UTIME                   = SY-UZEIT

              UDATE                   = SY-DATUM

              USERNAME                = SY-UNAME

              PLANNED_CHANGE_NUMBER   = SPACE

              OBJECI_CHANGE_INDICATOR = 'U'

              PLANNED_OR_REAL_CHANGES = SPACE

              UPD_KNVH                = UPD_KNVH

*              UPD_ICDTXI_KUNHIER      = SPACE

         TABLES

*              ICDTXI_KUNHIER          = I_ICDTXI_KUNHIER

              XKNVH                   = FXKNVH

              YKNVH                   = FYKNVH.

  ENDIF.

ENDFORM.

 

그림 5‑6 KUNHIER Update Function Module에 대한 Form Routine

 

 

 

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

* The following code is a sample for modifying SAP standard program

* RVKNVH00 and may need to be adjusted according to your requirements.

* This code was developed based on pieces of code present in similar

* SAP standard programs for updating/creating change documents,

* such as the one for Customer Master.

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

 

IF CHANGE_LINK = 'X'.

    CALL FUNCTION 'CUSTOMER_HIERARCHY_UPDATE' IN UPDATE TASK

         TABLES

              T_XKNVH = XVKNVH

              T_YKNVH = YKNVH.

***** Insert code here *************************************************

* This block of code has been added to create Change Documents         *

* on CDHDR/CDPOS tables via the function module -                      *

* KUNHIER_WRITE_DOCUMENT (called in the form).                         *

* XVKNVH is the new image of changes, whereas YKNVH is the old image.  *

* For every line of change in XVKNVH with a corresponding old image in *

* YKNVH, a Change Document is written.                                 *

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

 

    LOOP AT XVKNVH.

      CLEAR: I_XVKNVH, I_YVKNVH.

      REFRESH: I_XVKNVH, I_YVKNVH.

      I_XVKNVH = XVKNVH.

      APPEND I_XVKNVH.

      READ TABLE YKNVH WITH KEY

                 MANDT = XVKNVH-MANDT

                 HITYP = XVKNVH-HITYP

                 KUNNR = XVKNVH-KUNNR

                 VKORG = XVKNVH-VKORG

                 VTWEG = XVKNVH-VTWEG

                 SPART = XVKNVH-SPART

                 DATAB = XVKNVH-DATAB.

      IF SY-SUBRC EQ 0.

        I_YVKNVH = YKNVH.

        APPEND I_YVKNVH.

      ENDIF.

      PERFORM CD_CALL_KUNHIER

              TABLES I_XVKNVH

                     I_YVKNVH

              USING 'U' I_XVKNVH-KUNNR.

    ENDLOOP.

*****

***** Code changes end here ********************************************

*------ Änderungsmeldungen ausgeben -----------------------------------

    MESSAGE S028.

  ELSE.

    MESSAGE S033.

  ENDIF.

 

그림 5‑7 프로그램 RVKNVH00에 대한 변경