最近群里的兄弟对IDOC的学习热情高涨,所以我在这里做个最简单的IDOC例子,供大家分享。
简而言之,IDOC是类似XML的一种SAP系统与其他系统的一种集成工具。
假设I04和I02是同一个集团下两个不同子公司的SAP系统,I04需要将其采购订单信息及时发送给I02。下面简单介绍IDOC的设置步骤,为了避免混淆,我的命名都比较特别。
1,设置IDOC Type.
(1) WE31,创建segment,类似于创建XML的结点及结点属性。
这里先输入YPOHEAD,点击创建,在接下来的屏幕中,录入EBELN, BUKRS, BEDAT等字段及他们对应的data element;接着创建YPOITEM,输入EBELN, EBELP, MATNR, MENGE, MEINS等字段及他们对应的data element。
保存后用SE12查看你将发现,系统自动添加了YPOHEAD和YPOITEM两个结构,每个字段都成了CHAR类型,长度就是WE31中的EXPORT LENG。
(2) WE30, 创建IDOC Type,定义结点间的相互逻辑关系.
先输入YPOIDOC,然后点击创建,紧跟着点击create new进入。在主界面中,先点击创建按钮,将YPOHEAD添加,设置Mandatory seg打勾,min = 1, max = 1,代表我们每个IDOC仅包含一张采购订单。然后在YPOHEAD下添加YPOITEM,同样的Mandatory seg打勾,min = 1, max = 99999.
2,创建Message Type.
(1) WE81,创建Message Type.
先切换到编辑状态,然后点击New Entries,输入YPO即可。
(2) WE82,,关联Message Type和IDOC Type.
3,创建到I02的端口.
首先确保系统内已经有到I02的R/3 Connection(SM59),如果没有则先创建一个名为I02001。
接着WE21创建Port,类型TRANSACTIONAL RFC,名为I02PORT,RFC destination则填写I02001。
4,SALE,创建Logical System.
SALE, Sending and Receiving Systems,Logical Systems, define logical systems,新增一个logical system,名为I02LS,这将作为下一步的Partner。
Define logical systems下方,有Assign Client to logical system,这里可针对本系统(I04)定义logical system,作为发送IDOC时的发送方标识,我对Client 001的定义是I04LS.
5,WE20,定义我们的Partner profile.
在PARTNER TYPE为logical system下,创建一个patner no为I02LS的partner,type填写LS。
下面的Permitted agent,填写US(User),Agent为你自己的用户名或某basis人员用户名。
然后,点击outbound下方的加号,创建一个outbound parameter。Message Type为YPO,receiver port为I02PORT,output mode选择transfer idoc immed.,Basic Type填写YPOIDOC,保存即可。
6,编程发送IDOC
设置了这么多,真累啊,总算可以写程序了,是不是很开心呢?
程序的思路就是,把每个IDOC结点按字符串形式逐个添加,而字符串的添加次序自然也体现了IDOC结点间的逻辑关系。代码如下,
DATA: ls_pohead TYPE ypohead,
      ls_poitem TYPE ypoitem,
      ls_edidc TYPE edidc,
      lt_edidc TYPE TABLE OF edidc,
      lt_edidd TYPE TABLE OF edidd WITH HEADER LINE.
CLEAR ls_edidc.
*系统根据下面4行即可与WE20设置关联起来
ls_edidc-mestyp = 'YPO'. "Message Type
ls_edidc-idoctp = 'YPOIDOC'. "IDOC Type
ls_edidc-rcvprn = 'I02LS'. "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 = '0400'.
ls_pohead-bedat = '20090630'.
lt_edidd-sdata = ls_pohead. "结点内容
APPEND lt_edidd.
CLEAR lt_edidd.
lt_edidd-segnam = 'YPOITEM'.
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122334'.
ls_poitem-ebelp = '0001'.
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'.
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122334'.
ls_poitem-ebelp = '0002'.
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'
  EXPORTING
    master_idoc_control            = ls_edidc "Export
  TABLES
    communication_idoc_control     = lt_edidc "Import
    master_idoc_data               = lt_edidd "Export
  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.
7,查看IDOC.

WE05可以查看我们刚刚发送的IDOC, BD87还可对IDOC进行一些处理。

IDOC实例, Outbound IDOC相关推荐

  1. IDOC实例, Inbound IDOC

    这里将继续沿用上篇文章的例子,讲述I02对接收到的采购订单信息进行的相关处理. 1,创建IDOC Type和Message Type. 与上篇Outbound Idoc中的前两个步骤完全一样. 2,创 ...

  2. IDOC实例,消息方式的IDOC

    在系统中,我们经常可以看到EDI方式的输出,与打印输出类似.下面我们基于文章"IDOC实例,Outbound IDOC"的基础上,简单讲解这种方式的IDOC输出. 1,创建一个fu ...

  3. ABAP传输自定义IDOC实例

    首先确定出站方和入站方,本例中我使用150作为发送方将200作为接收方. 发送端系统配置 进入tcode-SALE,点击定义逻辑系统,这里我定义D01CLNT150为发送端, D01CLNT200为接 ...

  4. 什么是IDOC,以及IDOC的步骤

    创建IDOC:    第一步:WE31 创建IDOC所包含的字段.    第二步:WE30 创建IDOC 把Segment分配给IDOC    第三步:WE81  创建信息类型    第四步:WE82 ...

  5. java idoc_什么是IDOC,以及IDOC的步骤

    创建IDOC: 第一步:WE31 创建IDOC所包含的字段. 第二步:WE30 创建IDOC 把Segment分配给IDOC 第三步:WE81  创建信息类型 第四步:WE82   把IDOC类型与信 ...

  6. idoc java_java - 将iDOC从Java发送到SAP - 堆栈内存溢出

    我们有从系统生成的iDOC文件. 现在,我们尝试通过RFC连接将它们发送到SAP. 我已经作为客户端建立了RFC连接,但无法发送iDOC! 我试图创建一个样本iDOC进行测试,但是它不起作用! Exc ...

  7. sap idoc生成文件传到别的服务器,IDOC 实例详解

    本帖最后由 kanter 于 2015-5-21 15:53 编辑 IDOC 是用于在不同的 SAP 系统之间或 SAP 系统与外部系统之间传输信息的一种文档表示 形式. 本实例讲述从 SAP 客户端 ...

  8. SAP IDOC和EDI应用(1) 基本原理介绍及实例操作

    SAP系统之间.SAP系统与外部系统传输业务数据的方法有多种,IDOC.EDI是比较常见的方式. IDOC(Intermediate Document)是一个数据载体,描述了一个完整的业务对象,用于在 ...

  9. SAP IDOC开发

    创建IDOC:    第一步:WE31 创建IDOC所包含的字段.    第二步:WE30 创建IDOC 把Segment分配给IDOC 第三步:WE81 创建信息类型 第四步:WE82 把IDOC类 ...

最新文章

  1. 无需3D运动数据训练,最新人体姿势估计方法达到SOTA | CVPR 2020
  2. TaggerX——AI数据标注引入乡村振兴工作站解决农村地区青年就业问题【数据故事计划一等奖】...
  3. 佩特来项目经验小集合(2)___组合查询存储过程,报错 quot;varchar JBID=#39;#39; 转换成数据类型 int 时失败quot;...
  4. 消息中间件之ActiveMQ 入门
  5. Leetcode记录
  6. Cocos数据篇[3.4](4) ——plist文件操作
  7. Thinkphp 配置不用输入index.php
  8. java 生成校验验证码_java生成验证码并进行验证
  9. 【java】调用System.gc()会发生什么?
  10. TZOJ 5640: 数据结构实验:仓库管理
  11. Java技巧:深拷贝的两种方式(转)
  12. StanfordDB class自学笔记 (11) Indexes and Transactions
  13. 32位单片机C语言编程 微盘,32位单片机C语言编程:基于PIC32
  14. Android手机网页字体异常,移动端html5手机网站的中文字体使用
  15. 局域网打印机怎么连接_苹果手机怎么连打印机?苹果系统怎么连接网络打印机?一看就会...
  16. 推荐一个维基百科的中文镜像网站
  17. 基于Hexo和GitHub搭建一个免费博客域名图文教学
  18. 好好说话之Tcache Attack(1):tcache基础与tcache poisoning
  19. 生物工程毕业的他,如何成为年薪超40w的Java程序员
  20. Python 爬虫篇#笔记02# | 网页请求原理 和 抓取网页数据

热门文章

  1. pmcaff2013产品经理时尚文化屌丝style--马克杯投票。
  2. Ubuntu 18安装 chrome
  3. shell变量,管道符,作业控制,shell变量,以及变量配置文件
  4. 人人商城v2获取头像出错多出132132
  5. shell脚本的执行方式
  6. 如何更有效WEB应用防火墙确保信息安全
  7. 在虚拟机中安装gentoo简化步骤(基于官方手册)
  8. 转:c# 根据当前时间获取,本周,本月,本季度,月初,月末,各个时间段
  9. linux系统几个重要图
  10. cisco 路由器访问权限的设置