概述:程序的思路就是,把每个IDOC节点按字符串形式逐个添加,而字符串的添加次序自然也体现了IDOC节点间的逻辑关系。
    代码如下

    1. DATA: ls_pohead TYPE ypohead, "IDoc数据段:头
    2. ls_poitem TYPE ypoitem, "IDoc数据段:Item
    3. ls_edidc TYPE edidc, "IDoc的控制记录
    4. lt_edidc TYPE TABLE OF edidc,
    5. lt_edidd TYPE TABLE OF edidd WITH HEADER LINE. "IDoc的数据记录
    6. CLEAR ls_edidc.
    7. *系统根据下面4行即可与WE20(合作和伴配置文件)设置关联起来
    8. ls_edidc-mestyp = 'YPO_MESS_TYPE'. "Message Type
    9. ls_edidc-idoctp = 'YPOIDOC'. "IDOC Type
    10. ls_edidc-rcvprn = 'Z810LS'. "partner Number of Recipient接收方合作伙伴
    11. ls_edidc-rcvprt = 'LS'. "partner Type of Receiver接收方类型为逻辑系统
    12. *添加IDOC节点
    13. CLEAR lt_edidd.
    14. lt_edidd-segnam = 'YPOHEAD'. "头节点
    15. lt_edidd-dtint2 = 0.
    16. CLEAR ls_pohead.
    17. ls_pohead-ebeln = '4001122334'. "采购单号
    18. ls_pohead-bukrs = '1000'. "公司代码
    19. ls_pohead-bedat = '20090630'. "日期
    20. lt_edidd-sdata = ls_pohead. "节点内容:ls_pohead结构中的数据最后被拼接成字符串再赋值给lt_edidd-sdata,最大长度不能超过1000
    21. APPEND lt_edidd.
    22. CLEAR lt_edidd.
    23. lt_edidd-segnam = 'YPOITEM'. "Item节点
    24. lt_edidd-dtint2 = 0.
    25. CLEAR ls_poitem.
    26. ls_poitem-ebeln = '4001122334'. "采购单号
    27. ls_poitem-ebelp = '0001'. "Item行号
    28. ls_poitem-matnr = '000000000000004527'. "物料号
    29. ls_poitem-menge = '3'. "数量
    30. ls_poitem-meins = 'ST'. "单位
    31. lt_edidd-sdata = ls_poitem.
    32. APPEND lt_edidd.
    33. CLEAR lt_edidd.
    34. lt_edidd-segnam = 'YPOITEM'. "Item节点
    35. lt_edidd-dtint2 = 0.
    36. CLEAR ls_poitem.
    37. ls_poitem-ebeln = '4001122334'. "采购单号
    38. ls_poitem-ebelp = '0002'. "Item行号
    39. ls_poitem-matnr = '000000000000009289'. "物料号
    40. ls_poitem-menge = '5'. "数量
    41. ls_poitem-meins = 'M'. "单位
    42. lt_edidd-sdata = ls_poitem.
    43. APPEND lt_edidd.
    44. CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE' "发送IDoc
    45. EXPORTING
    46. master_idoc_control = ls_edidc "IDoc控制记录
    47. TABLES
    48. communication_idoc_control = lt_edidc "接收:用来接收IDoc发送情况
    49. master_idoc_data = lt_edidd "IDoc数据记录
    50. EXCEPTIONS"
    51. error_in_idoc_control = 1
    52. error_writing_idoc_status = 2
    53. error_in_idoc_data = 3
    54. sending_logical_system_unknown = 4
    55. OTHERS = 5.
    56. IF sy-subrc <> 0.
    57. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    58. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    59. ELSE.
    60. COMMIT WORK.
    61. WRITE: 'Idoc sent:'.
    62. LOOP AT lt_edidc INTO ls_edidc.
    63. NEW-LINE.
    64. WRITE: 'Idoc number is', ls_edidc-docnum,
    65. '; receiver partner is', ls_edidc-rcvprn,
    66. '; sender partner',ls_edidc-sndprn.
    67. ENDLOOP.
    68. ENDIF.

    参考:汪正军——IDOC-出站异步方式