출판된 한글판 도서
ERP SAP R/3 ALE, EDI & IDOC 기술 |
Original Book Contents
5.5 Change Document Object/Update function module 생성
Change Document Object는 R/3 시스템에서 master data, table, application object에서 발생하는 변경사항을 포착해 낸다. SAP는 시스템 내에서 수 백개 정도의 object에 대하여 변경사항을 포착해 낼 수 있을 정도로 change document service를 광범위하게 사용하고 있는데, 이러한 서비스는 change document object와 Change Document Update Function Module/Program이라고 알려진 구성요소를 통하여 이루어진다. CD(change document) object에 근거한 change document는 table CDHDR(CD header정보)와 CDPOS(CD detail정보)에 저장된다. 대부분의 change document는 변경사항에 대한 정보를 field수준까지 기록해 준다. Change document는 table name과 field name 이외에, 입력, 변경, 삭제와 같은 변경의 성격에 대한 정보뿐만 아니라, table에 대한 key정보를 동시에 저장하고 있다. 앞에서 우리가 배웠듯이, ALE는 change pointer라고 알려진 object를 이용하여, master data에서 발생하는 변경사항을 포착하기 위해서 shared master data(SMD)를 통하여 change document service를 이용한다. table BDCP와 table BDCPS에 저장되어 있는 change pointer는 실제로 application의 change document update function module에 의해서 생성된 change document를 가리키고 있다. ALE API는 이러한 정보를 수집하고, 그 table에 대한 key값과 변경 유형에 따라 IDOC segment를 생성해 낸다. 이렇게 해서 생성된 IDOC이 통신 계층(communication layer)를 통하여 분배되는 것이다.
만약 개발의 시발점인 change document object가 존재하지 않는다면, SAP가 제공해 주는 도구를 이용하여 이것을 새로이 생성할 수 있다. SAP R/3 시스템에 이미 존재하고 있는 change document object를 검토해 보려면, transaction SCDO를 사용하면 된다. 자세히 살펴보면, Customer Hierarchy에 대하여 change document object KUNHIER이 이미 존재하고 있는 것을 알 수 있을 것이다([그림 5-3]을 참조하라). 우리는 이것을 Customer Hierarchy, 즉 table KNVH 자료에 대한 변동사항을 포착하기 위한 시발점으로 사용할 수 있다. 여러분이 CD object KUNHIER를 검사해 보면, table KNVH상에 있는 모든 field에 대하여 변경사항이 포착되고 있음을 알 수 있을 것이다. 다음 단계는 이 change document object에 근거하여 update program/function module을 작성하는 것이다. 이것은 transaction SCDO에서 [Generate update pgm] 버튼을 이용하거나, 프로그램 RSSCD000을 실행하여 간단히 처리할 수 있다. 여러분은 이 작업이 CTS(correction and transport system)에 의해서 R/3 시스템에 대한 ‘repair’로 간주되고 있다는 것에 주목하기 바란다. 이 프로그램이 실행될 때, development class와 function group, 기타의 프로그램 parameter에 대한 기본값을 그대로 사용하도록 한다. 처리방식(processing option)을 “Immediate update”로 설정한다. 이 프로그램이 성공적으로 실행되면, 새로운 SAP function module, 즉 KUNHIER_WRITE_DOCUMENT(이 이름은 SAP가 그러한 module을 생성할 때 <change document bject>_WRITE_DOCUMENT 형식의 기본적인 명명 규칙에 따라 작성되었다는 것에 주의하라)가 생성될 것이다. 또한 화면 위에 있는 [Generation Info] 버튼을 눌러 보면, 이미 생성되어 있는 update program/function module을 확인해 볼 수 있다([그림 5-4]를 참조하라). transaction SE37이나 SE38을 이용하면, 여기에 나타나 있는 Include program이나 function module의 내용을 확인해 볼 수 있다. [그림 5-5]는 이 function module에 있는 프로그램 코드를 보여준다.
그림 5‑3 Change Document Object 목록
그림 5‑4 Change Document Object에 대해 생성된 Update Function Module
FUNCTION KUNHIER_WRITE_DOCUMENT .
CALL FUNCTION 'CHANGEDOCUMENT_OPEN' EXPORTING OBJECTCLASS = 'KUNHIER ' OBJECTID = OBJECTID PLANNED_CHANGE_NUMBER = PLANNED_CHANGE_NUMBER PLANNED_OR_REAL_CHANGES = PLANNED_OR_REAL_CHANGES EXCEPTIONS SEQUENCE_INVALID = 1 OTHERS = 2.
CASE SY-SUBRC. WHEN 1. MESSAGE A001 WITH 'SEQUENCE INVALID'. WHEN 2. MESSAGE A001 WITH 'OPEN ERROR'. ENDCASE.
IF UPD_KNVH NE SPACE. CALL FUNCTION 'CHANGEDOCUMENT_MULTIPLE_CASE' EXPORTING TABLENAME = 'KNVH ' CHANGE_INDICATOR = UPD_KNVH DOCU_DELETE = 'X' TABLES TABLE_OLD = YKNVH TABLE_NEW = XKNVH EXCEPTIONS NAMETAB_ERROR = 1 OPEN_MISSING = 2 POSITION_INSERT_FAILED = 3 OTHERS = 4.
CASE SY-SUBRC. WHEN 1. MESSAGE A001 WITH 'NAMETAB-ERROR'. WHEN 2. MESSAGE A001 WITH 'OPEN MISSING'. WHEN 3. MESSAGE A001 WITH 'INSERT ERROR'. WHEN 4. MESSAGE A001 WITH 'MULTIPLE ERROR'. ENDCASE. ENDIF.
CALL FUNCTION 'CHANGEDOCUMENT_CLOSE' EXPORTING OBJECTCLASS = 'KUNHIER ' OBJECTID = OBJECTID DATE_OF_CHANGE = UDATE TIME_OF_CHANGE = UTIME TCODE = TCODE USERNAME = USERNAME OBJECT_CHANGE_INDICATOR = OBJECT_CHANGE_INDICATOR EXCEPTIONS HEADER_INSERT_FAILED = 1 OBJECT_INVALID = 2 OPEN_MISSING = 3 NO_POSITION_INSERTED = 4 OTHERS = 5.
CASE SY-SUBRC. WHEN 1. MESSAGE A001 WITH 'INSERT HEADER FAILED'. WHEN 2. MESSAGE A001 WITH 'OBJECT INVALID'. WHEN 3. MESSAGE A001 WITH 'OPEN MISSING'. WHEN 5. MESSAGE A001 WITH 'CLOSE ERROR'. ENDCASE.
ENDFUNCTION.
|
그림 5‑5 Customer Hierarchy에 대한 Change Document Update Function Module