首先确定出站方和入站方,本例中我使用150作为发送方将200作为接收方。

  • 发送端系统配置
  1. 进入tcode-SALE,点击定义逻辑系统,这里我定义D01CLNT150为发送端,

D01CLNT200为接收端

2,将逻辑系统分配给对应的client

3,进入tcode-WE31,创建IDOC开发段(segment)这里可以按照实际需求创建想要传输的结构,为求简单我创建了ZKNA1并选取了几个客户主数据的字段作为示例

4,进入tcode-WE30,创建Idoc Type命名为YKNTYPE

将上一步创建的segment添加到YKNTYPE下,这里可以为YKNTYPE添加多层结构,本文中仅使用单层结构

5,进入tcode-WE81创建Message Type,这里命名为YKNA1_METYPE

6,进入tcode-WE82,创建Message Type 与 Idoc Type的对应关系,值得注意的是

Message Type 与 Idoc Type是多对多的关系

7,进入tcode-SM59,创建物理连接,因为出入站均为sap系统所以这里选择ABAP连接

这里创建一个与目的逻辑系统同名的RFC目标-D01CLNT200,依次设置好目标系统服务器和登陆账号后保存设置

测试一下连接是否可用

8,进入tcode-WE21,创建接收端的端口,选择事务性RFC,创建名为TO_CL200的端口

设置RFC目标-D01CLNT200

9,进入tcode-WE20,创建合作伙伴参数,这一步需要将前面几个步骤的设置整合起来,

选择逻辑系统类型,添入目标逻辑系统及代理人等参数

保存后添加伙伴参数,由于目标系统为接收端所以要添加外向型参数

依次分配目标逻辑系统,Message Type ,目标端口,Idoc Type

10,创建一个发送程序,该程序通过调用函数MASTER_IDOC_DISTRIBUTE来实现发送IDOC

*&---------------------------------------------------------------------*
*& Report YN_IDOC_DEMO01
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT YN_IDOC_DEMO01.
DATA: LV_ZKNA1 TYPE ZKNA1, "IDoc数据段
      LV_EDIDC TYPE EDIDC, "IDoc的控制记录
      GT_EDIDC TYPE TABLE OF EDIDC,
      GT_EDIDD TYPE TABLE OF EDIDD WITH HEADER LINE. "IDoc的数据记录
CLEAR LV_EDIDC.
*系统根据下面4行即可与WE20(合作和伴配置文件)设置关联起来
LV_EDIDC-MESTYP = 'YKNA1_METYPE'.  "Message Type
LV_EDIDC-IDOCTP = 'YKNTYPE'.       "IDOC Type
LV_EDIDC-RCVPRT = 'LS'.            "接收方类型为逻辑系统
LV_EDIDC-RCVPRN = 'D01CLNT200'.    "接收方合作伙伴

*添加IDOC节点
CLEAR GT_EDIDD.
GT_EDIDD-SEGNAM = 'ZKNA1'."段类型
GT_EDIDD-DTINT2 = 0.
LV_ZKNA1-KUNNR = 'Y000001'."客户
LV_ZKNA1-LAND1 = 'CN'.     "国家/地区
LV_ZKNA1-ORT01 = 'BEIJING'."城市
LV_ZKNA1-NAME1 = '公司A'.  "名称
GT_EDIDD-SDATA = LV_ZKNA1. "节点内容
APPEND GT_EDIDD.

*添加IDOC节点
CLEAR GT_EDIDD.
GT_EDIDD-SEGNAM = 'ZKNA1'.  "段类型
GT_EDIDD-DTINT2 = 0.
LV_ZKNA1-KUNNR = 'Y000002'. "客户
LV_ZKNA1-LAND1 = 'CN'.      "国家/地区
LV_ZKNA1-ORT01 = 'HANGZHOU'."城市
LV_ZKNA1-NAME1 = '公司B'.   "名称
GT_EDIDD-SDATA = LV_ZKNA1. "节点内容
APPEND GT_EDIDD.

*添加IDOC节点
CLEAR GT_EDIDD.
GT_EDIDD-SEGNAM = 'ZKNA1'.  "段类型
GT_EDIDD-DTINT2 = 0.
LV_ZKNA1-KUNNR = 'Y000003'. "客户
LV_ZKNA1-LAND1 = 'CN'.      "国家/地区
LV_ZKNA1-ORT01 = 'SHANGHAI'."城市
LV_ZKNA1-NAME1 = '公司C'.   "名称
GT_EDIDD-SDATA = LV_ZKNA1. "节点内容
APPEND GT_EDIDD.

CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE' "发送IDoc
  EXPORTING
    MASTER_IDOC_CONTROL            = LV_EDIDC "IDoc控制记录
  TABLES
    COMMUNICATION_IDOC_CONTROL     = GT_EDIDC "接收:用来接收IDoc发送情况
    MASTER_IDOC_DATA               = GT_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.
ENDIF.

  • 接收端系统配置

1,进入tcode-SM59,创建到发送端的物理连接D01CLNT150(与发送端的逻辑系统同名)

2,进入tcode-WE21,创建发送端的端口,

3,创建一个入站处理函数,首先参考标准函数IDOC_INPUT_BBP_IV的参数

创建函数YN_IDOC_PROCESS01,为了看到效果可以直接在代码里打一个外部断点

FUNCTION YN_IDOC_PROCESS01.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(INPUT_METHOD) LIKE  BDWFAP_PAR-INPUTMETHD
*"     VALUE(MASS_PROCESSING) LIKE  BDWFAP_PAR-MASS_PROC
*"  EXPORTING
*"     VALUE(WORKFLOW_RESULT) LIKE  BDWF_PARAM-RESULT
*"     VALUE(APPLICATION_VARIABLE) LIKE  BDWF_PARAM-APPL_VAR
*"     VALUE(IN_UPDATE_TASK) LIKE  BDWFAP_PAR-UPDATETASK
*"     VALUE(CALL_TRANSACTION_DONE) LIKE  BDWFAP_PAR-CALLTRANS
*"  TABLES
*"      IDOC_CONTRL STRUCTURE  EDIDC
*"      IDOC_DATA STRUCTURE  EDIDD
*"      IDOC_STATUS STRUCTURE  BDIDOCSTAT
*"      RETURN_VARIABLES STRUCTURE  BDWFRETVAR
*"      SERIALIZATION_INFO STRUCTURE  BDI_SER
*"  EXCEPTIONS
*"      WRONG_FUNCTION_CALLED
*"      OTHERS
*"----------------------------------------------------------------------
*----------------------------------------------------------------------*
*  this function module is generated                                   *
*          never change it manually, please!        22.09.1999         *
*----------------------------------------------------------------------*
  DATA: LV_ZKNA1 TYPE ZKNA1. "IDoc数据段
  CLEAR IDOC_CONTRL.
  READ TABLE IDOC_CONTRL INDEX 1.
  IF IDOC_CONTRL-MESTYP <> 'YKNA1_METYPE'.
    RAISE WRONG_FUNCTION_CALLED.
  ENDIF.
  LOOP AT IDOC_CONTRL.
    LOOP AT IDOC_DATA WHERE DOCNUM = IDOC_CONTRL-DOCNUM.
      LV_ZKNA1 = IDOC_DATA-SDATA.
    ENDLOOP.
    "根据数据处理情况设置当前IDoc处理的状态
    IF SY-SUBRC = 0.
      CLEAR IDOC_STATUS.
      IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM."当前正处理的IDoc
      IDOC_STATUS-STATUS = '53'. "IDOC处理成功
      APPEND IDOC_STATUS.
    ELSE.
      CLEAR IDOC_STATUS.
      IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM.
      IDOC_STATUS-STATUS = '51'. "IDOC不成功
      IDOC_STATUS-MSGTY  = 'E'. "错误信息
      IDOC_STATUS-MSGID  = 'YMSG'.
      IDOC_STATUS-MSGNO  = '001'.
      APPEND IDOC_STATUS.
    ENDIF.
  ENDLOOP.

ENDFUNCTION.

4,进入tcode-BD51,添加入站处理函数,填入上一个步骤的函数名YN_IDOC_PROCESS01

输入类型设置为1

5,进入tcode-WE57,将Message Type和Idoc Type 分配给入站处理函数

6,进入tcode-WE42创建处理代码YCODE01

将入站处理函数分配给处理代码

7,进入tcode-WE20,创建发送端的伙伴参数文件

由于次为发送端的伙伴文件所以要添加内向参数

依次分配发送端的逻辑系统,Message Type,处理代码并保存

  • 测试

在发送端client进入程序YN_IDOC_DEMO01,如果你在入站处理函数中打了外部断点,执行后会进入断点中,我们可以查看发送过来的数据

也可以进入tcode-BD87跟踪Idoc的状态

ABAP传输自定义IDOC实例相关推荐

  1. 动手开发一个有用的 ABAP ALV 工具 - 查看指定用户的 ABAP 传输请求试读版

    本专栏计划的文章数在 150 篇左右,到 2022年10月6日为止,目前已经更新了 56 篇,专栏完成度为 37.3% 零基础 ABAP 学习教程系列文章的目录 1. ABAP 标准培训教程 BC40 ...

  2. java 微信自定义菜单开发_微信公众号开发之设置自定义菜单实例代码【java版】...

    本实例是为了实现在管理后台实现微信菜单的添加删除管理. 1.首先我们需要新建一个数据库表用于存放menu菜单项 可包含的字段有id.父类id.name.排序.是否显示.类型(view.click).链 ...

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

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

  4. JS-面向对象-原形对象链(自定义对象实例原形对象链 / 本地对象原形对象链)

    自定义对象实例原型对象链 <!DOCTYPE html> <html lang="zh"> <head><meta charset=&qu ...

  5. Qt TCP协议 传输简单字符串实例

    TCP协议的程序使用的是客户端/服务器模式,在Qt中提供了QTcpSocket类来编写客户端程序,使用QTcpServer类编写服务器端程序. A 转载:http://mobile.51cto.com ...

  6. python qt5 数据改变 触发信号_pyqt5自定义信号实例解析

    本文研究的主要是pyqt5自定义信号实例解析的相关内容,具体介绍如下. PyQt5已经自动定义了很多QT内建的信号.但是在实际的使用中为了灵活使用信号与槽机制,我们可以根据需要自定义signal.可以 ...

  7. 三层中如何在服务器与客户端之间传输自定义的'Record'类型数据的例子

    博主自写的三层中如何在服务器与客户端之间传输自定义的'Record'类型数据的例子. 效果图如下: 例子源码下载:http://Delphi盒子上还未审核.现在已审核!下载地址为:http://sd. ...

  8. QT:QSS自定义QLineEdit实例

    QT:QSS自定义QLineEdit实例 QLineEdit 的框架是使用Box Model.设计的. 要创建带圆角的线编辑,我们可以设置: QLineEdit {border: 2px solid ...

  9. Android 自定义View 实例2_Clipping Canvas

    上一篇 Android 自定义View 实例_ 画图  参考: https://blog.csdn.net/whjk20/article/details/115639448 这里是Canvas 的裁剪 ...

最新文章

  1. 【技术综述】图像与CNN发家简史,集齐深度学习三巨头
  2. ARMCM3汇编指令
  3. 拼装机器人感想_机器人学习心得体会(精选3篇)
  4. 初学Linux应掌握的Shell命令
  5. SQL Server游标+延迟执行简介
  6. 安装完MySQL数据库,在服务列表里找不到MySQL的解决办法
  7. xp系统打开计算机配置文件,浅析xp系统如何解决开机出现“Windows不能加载本地存储的配置文件“...
  8. Hadoop Namenode不能启动
  9. 进阶篇:3.4.1)机械加工件-不同制造工艺详解和对应设备
  10. 在 Ubuntu 中用 UFW 配置防火墙
  11. 【UDS诊断服务入门】
  12. 程序员量子力学-海森堡式BUG
  13. Cousera-AndrewNg(吴恩达)机器学习笔记--第二周编程作业(线性回归)
  14. 被谢耳朵一直嘲笑的MIT,这次发明了黑镜中的“恐怖机器”
  15. JeecgBoot 2.1.1 代码生成器AI版本发布,基于SpringBoot+AntDesign的JAVA快速开发平台
  16. css3的animation动画属性实现闹钟左右摇摆
  17. ubuntu显卡的参数说明
  18. 【计算机视觉】人类颜色感知、光受体、光波长和颜色信息以及颜色匹配
  19. Windows CMD命令大全(值得收藏)
  20. 综合素质能力测试软件,【北森能力题库_员工能力测试管理系统】员工素质测评题库_员工综合素质测评表_免费在线试用_选软件网...

热门文章

  1. Bitdefender 发布GandCrab V5.2勒索病毒解密工具 (免费)
  2. UE4玻璃材质不受sequencer焦距影响的解决办法
  3. R语言笔记-R语言数据挖掘方法及应用--1
  4. 我的世界java版怎么制作行为包,我的世界addons行为包制作器 | 手游网游页游攻略大全...
  5. Practical Javascript Sample
  6. 2022-2028全球与中国交通运输中的边缘计算市场现状及未来发展趋势
  7. 按Home键后重新进入app又重新启动问题解决
  8. 一种用于模拟电晕放电的高效半拉格朗日算法(Matlab代码实现)
  9. append/cons car/cdr reduce
  10. 通用汽车SUV11月暴涨2.3倍