概述:程序的思路就是,把每个IDOC节点按字符串形式逐个添加,而字符串的添加次序自然也体现了IDOC节点间的逻辑关系。
代码如下:
DATA: ls_pohead TYPE ypohead, "IDoc数据段:头
ls_poitem TYPE ypoitem, "IDoc数据段:Item
ls_edidc TYPE edidc, "IDoc的控制记录
lt_edidc TYPE TABLE OF edidc,
lt_edidd TYPE TABLE OF edidd WITH HEADER LINE. "IDoc的数据记录
CLEAR ls_edidc.
*系统根据下面4行即可与WE20(合作和伴配置文件)设置关联起来
ls_edidc-mestyp = 'YPO_MESS_TYPE'. "Message Type
ls_edidc-idoctp = 'YPOIDOC'. "IDOC Type
ls_edidc-rcvprn = 'Z810LS'. "partner Number of Recipient接收方合作伙伴
ls_edidc-rcvprt = 'LS'. "partner Type of Receiver接收方类型为逻辑系统
*添加IDOC节点
CLEAR lt_edidd.
lt_edidd-segnam = 'YPOHEAD'. "头节点
lt_edidd-dtint2 = 0.
CLEAR ls_pohead.
ls_pohead-ebeln = '4001122334'. "采购单号
ls_pohead-bukrs = '1000'. "公司代码
ls_pohead-bedat = '20090630'. "日期
lt_edidd-sdata = ls_pohead. "节点内容:ls_pohead结构中的数据最后被拼接成字符串再赋值给lt_edidd-sdata,最大长度不能超过1000
APPEND lt_edidd.
CLEAR lt_edidd.
lt_edidd-segnam = 'YPOITEM'. "Item节点
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122334'. "采购单号
ls_poitem-ebelp = '0001'. "Item行号
ls_poitem-matnr = '000000000000004527'. "物料号
ls_poitem-menge = '3'. "数量
ls_poitem-meins = 'ST'. "单位
lt_edidd-sdata = ls_poitem.
APPEND lt_edidd.
CLEAR lt_edidd.
lt_edidd-segnam = 'YPOITEM'. "Item节点
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122334'. "采购单号
ls_poitem-ebelp = '0002'. "Item行号
ls_poitem-matnr = '000000000000009289'. "物料号
ls_poitem-menge = '5'. "数量
ls_poitem-meins = 'M'. "单位
lt_edidd-sdata = ls_poitem.
APPEND lt_edidd.
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE' "发送IDoc
EXPORTING
master_idoc_control = ls_edidc "IDoc控制记录
TABLES
communication_idoc_control = lt_edidc "接收:用来接收IDoc发送情况
master_idoc_data = lt_edidd "IDoc数据记录
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.
WRITE: 'Idoc sent:'.
LOOP AT lt_edidc INTO ls_edidc.
NEW-LINE.
WRITE: 'Idoc number is', ls_edidc-docnum,
'; receiver partner is', ls_edidc-rcvprn,
'; sender partner',ls_edidc-sndprn.
ENDLOOP.
ENDIF.