第一部分:创建Idoc实施步骤
第一步:
WE31 创建IDOC所包含的字段.
以采购订单为例:
ZEKKO 采购订单抬头

ZEKPO 采购订单项目

ABAP之创建IDOC-采购订单_处理程序

ABAP之创建IDOC-采购订单_处理程序_02

ABAP之创建IDOC-采购订单_字段_03

第二步:WE30 创建IDOC 把Segment分配给IDOC


ABAP之创建IDOC-采购订单_字段_04

ABAP之创建IDOC-采购订单_处理程序_05

ABAP之创建IDOC-采购订单_字段_06

ABAP之创建IDOC-采购订单_字段_07


第三步:WE81 创建信息类型


ABAP之创建IDOC-采购订单_ico_08

第四步:WE82 把IDOC类型与信息类型对应.


ABAP之创建IDOC-采购订单_字段_09

第五步:WE57 Assign Message & Idoc Type to a Function Module for Data Process


ABAP之创建IDOC-采购订单_处理程序_10

第六步:SM59 Define a RFC connection for Idoc transfer

由Basis配置的,暂时不清楚具体步骤
第七步:WE21 Define a Port ( Assign a RFC destination which created in SM59 )


ABAP之创建IDOC-采购订单_ico_11

第八步:WE41/42 Creat Process Code
第九步:WE20 Define a Partner Profiles( Also creat a Outbound parameters with Port, or Inbound
parameters with Process code )
管理IDOC:
WE02 显示IDOC,可以根据时间,IDOC类型查找IDOC,查看成功,出错信息。


ABAP之创建IDOC-采购订单_ico_12

ABAP之创建IDOC-采购订单_ico_13

WE46 IDOC管理(出\入)
WE60 IDOC类型文档(可以查看IDOC结构,和每个字段的描述.
WE19 根据IDOC号进行IDOC处理,可以修改IDOC值进行补发动作,处理分为内向和外向。
消息配置:
WE20 配置伙伴消息进和出IDOC类型
WE21 配置伙伴

第二部分:查看采购订单IDOC输出的处理程序

NACE 查看采购订单输出 使用的程序,应用程序EF

ABAP之创建IDOC-采购订单_字段_14

选中输出类型,双击处理程序

ABAP之创建IDOC-采购订单_ico_15
可以看到处理程序名,和FORM子程序

ABAP之创建IDOC-采购订单_字段_16


第三部分:实例代码

代码:

*&---------------------------------------------------------------------*
*& Report ZIFR0001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zifr0001.


*&---------------------------------------------------------------------*
* TABLES
*&---------------------------------------------------------------------*
TABLES:nast .
*&---------------------------------------------------------------------*
* GLOBAL DATA
*&---------------------------------------------------------------------*
DATA:gv_subrc LIKE sy-subrc . " Return Code
DATA:gv_zywcj TYPE zmmt0018-zywcj .

*&---------------------------------------------------------------------*
*
* MAIN PROGRAM
*
*----------------------------------------------------------------------*
FORM frm_entry USING return_code screen_flag .

*DATA IS_NAST TYPE NAST.
*DATA CV_SUBRC TYPE SYST_SUBRC.

**oubound 接口分发函数
CALL FUNCTION 'ZIFFM0001'
EXPORTING
is_nast = nast
IMPORTING
cv_subrc = return_code.

ENDFORM .

调用IDOC栗子
*&---------------------------------------------------------------------*
*& Report YCX_IDOC
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT YCX_IDOC.

DATA: G_IDOC_CTL LIKE EDIDC,
G_E1MARAM LIKE E1MARAM,
G_E1MAKTM LIKE E1MAKTM.
DATA: GI_RET_CTL LIKE EDIDC OCCURS 0,
GI_IDOC_DATA LIKE EDIDD OCCURS 0 WITH HEADER LINE.

* BUILD IDOC_CTL RECORD
PERFORM BUILD_IDOC_CTL.

* BUILD ICOC_SEGMENT DATA
PERFORM BUILD_IDOC_SEG.

* CALL FUNCTION AND CREATE IDOC
PERFORM CREATE_IDOC.

*&---------------------------------------------------*
*& Form CREATE_IDOC
*&---------------------------------------------------*
* text
*----------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------*
FORM CREATE_IDOC.

CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
EXPORTING
MASTER_IDOC_CONTROL = G_IDOC_CTL
* OBJ_TYPE = ''
* CHNUM = ''
TABLES
COMMUNICATION_IDOC_CONTROL = GI_RET_CTL
MASTER_IDOC_DATA = GI_IDOC_DATA
* EXCEPTIONS
* ERROR_IN_IDOC_CONTROL = 1
* ERROR_WRITING_IDOC_STATUS = 2
* ERROR_IN_IDOC_DATA = 3
* SENDING_LOGICAL_SYSTEM_UNKNOWN = 4
* OTHERS = 5
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
COMMIT WORK.
ENDIF.
ENDFORM. " CREATE_IDOC

*&---------------------------------------------------*
*& Form BUILD_IDOC_CTL
*&--------------------------------------------------*
* text
*----------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------*
FORM BUILD_IDOC_CTL.

* TYPE
G_IDOC_CTL-IDOCTP = 'ZMMIDOC'. "IDOC TYPE
G_IDOC_CTL-MESTYP = 'ZMMCRT'. "MESSAGE TYPE

* RECEIVER
G_IDOC_CTL-RCVPRT = 'LS'. "PARTNER TYPE
G_IDOC_CTL-RCVPRN = 'MMRECV800'. "PARTNER NO

* SENDER
G_IDOC_CTL-SNDPRT = 'LS'. "PARTNER TYPE
G_IDOC_CTL-SNDPRN = 'T90CLNT090'. "PARTNER NO
G_IDOC_CTL-SNDPOR = 'SAPC11'. "PORT
ENDFORM. " BUILD_IDOC_CTL

*&---------------------------------------------------*
*& Form BUILD_IDOC_SEG
*&---------------------------------------------------*
* text
*----------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------*
FORM BUILD_IDOC_SEG.

* HEAD DATA
GI_IDOC_DATA-SEGNAM = 'E1MARAM'. "SEGMENT NAME
GI_IDOC_DATA-SEGNUM = 1. "SEGMENT NO

G_E1MARAM-MATNR = 'IDOCTEST15'. "MM NO
G_E1MARAM-MEINS = '10'. "BASE UOM
G_E1MARAM-MBRSH = 'M'. "INDUSTRY
G_E1MARAM-MTART = 'DIEN'. "MM TYPE

MOVE G_E1MARAM TO GI_IDOC_DATA-SDATA.
APPEND GI_IDOC_DATA.

* DESCRIPTION
GI_IDOC_DATA-SEGNAM = 'E1MAKTM'. "SEGMENT NAME
GI_IDOC_DATA-SEGNUM = 2. "SEGMENT NO

G_E1MAKTM-SPRAS = SY-LANGU. "LANGUAGE
G_E1MAKTM-MAKTX = 'IDOC TEST'. "DESCRIPTION

MOVE G_E1MAKTM TO GI_IDOC_DATA-SDATA.
APPEND GI_IDOC_DATA.
ENDFORM. " BUILD_IDOC_SEG