1、發送outbound idoc
1)WE31建segment type和WE30建idoc type。 這個步驟就比較簡單,按照你的需求走就是了,不過注意就是建完segment type和idoc type需要set release。。。特別是如果當你需要修改segment type,你在修改完segment type,還需要先cancel release IDOC type,然後重新release。
2)WE81建message type和WE82綁定message type和idoc type。
3)SM59建RFC鏈接,這個一般系統裏面都基本建立起來了,直接用即可,如果沒有,則根據需求去建,一般由basis建。
4)WE21建立PORT,這個需要根據建立的RFC鏈接。建好PORT之後,就到WE20建立partner,根據前面的配置。注意這裏有個Partner Role,可填,可以不填,不過這裏填了,程序裏面就要把這個role寫入變量。
5)程序的關鍵代碼:FM: MASTER_IDOC_DISTRIBUTE
寫入相關配置:
GT_MASTER_IDOC_CONTROL-RCVPRT = 'LS'. "Recedived port
GT_MASTER_IDOC_CONTROL-RCVPRN = 'ZXISKVAT'. "Received partner number
"GT_MASTER_IDOC_CONTROL-RCVPFC = 'LS'. "Partner Role
GT_MASTER_IDOC_CONTROL-IDOCTP = 'ZVAT_IDOC'. "Idoc type
GT_MASTER_IDOC_CONTROL-MESTYP = 'ZVAT_MSG'. "Message type
GT_MASTER_IDOC_CONTROL-RCVPOR = P_PORT. "Receiver port
寫入IDOC data:
LOOP AT GT_D2.
MOVE-CORRESPONDING GT_D2 TO LS_D2.
L_NUM = L_NUM + 1 .
GT_IDOC_DATA-SEGNAM = 'ZVAT_D2'. segment的名字
GT_IDOC_DATA-SEGNUM = L_NUM. 號碼
MOVE LS_D2 TO GT_IDOC_DATA-SDATA. segment的數據
APPEND GT_IDOC_DATA.
ENDLOOP.
調用FM:
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
EXPORTING
MASTER_IDOC_CONTROL = GT_MASTER_IDOC_CONTROL 存放IDOC配置
TABLES
COMMUNICATION_IDOC_CONTROL = GT_IDOC_CONTROL IDOC發出去後生產的NO和STATUS都在這
MASTER_IDOC_DATA = GT_IDOC_DATA 存放IDOC 數據
EXCEPTIONS
ERROR_IN_IDOC_CONTROL = 1
ERROR_WRITING_IDOC_STATUS = 2
ERROR_IN_IDOC_DATA = 3
SENDING_LOGICAL_SYSTEM_UNKNOWN = 4
OTHERS
FM完了之後的處理:
LOOP AT GT_IDOC_CONTROL.
CALL FUNCTION 'EDI_DOCUMENT_DEQUEUE_LATER' 解釋IDOC 號
EXPORTING
DOCNUM = GT_IDOC_CONTROL-DOCNUM
EXCEPTIONS
IDOC_IS_NOT_TO_DEQUEUE = 0
OTHERS = 0.
ENDLOOP.
COMMIT WORK. 最終保存生產的IDOC
2、inbound idoc的開發: