概述:程序的思路就是,把每个IDOC节点按字符串形式逐个添加,而字符串的添加次序自然也体现了IDOC节点间的逻辑关系。
代码如下:
DATA: ls_pohead TYPE ypohead, "IDoc数据段:头ls_poitem TYPE ypoitem, "IDoc数据段:Itemls_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 Typels_edidc-idoctp = 'YPOIDOC'. "IDOC Typels_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,最大长度不能超过1000APPEND 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' "发送IDocEXPORTINGmaster_idoc_control = ls_edidc "IDoc控制记录TABLEScommunication_idoc_control = lt_edidc "接收:用来接收IDoc发送情况master_idoc_data = lt_edidd "IDoc数据记录EXCEPTIONS"error_in_idoc_control = 1error_writing_idoc_status = 2error_in_idoc_data = 3sending_logical_system_unknown = 4OTHERS = 5.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH 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.
