ABAP IDOC基本配置

zz/2024/5/23 1:44:11

此处案例:300(发送端)、500(接收端)

TCODE:WEDI(idoc事务码)

1、定义开发段(300、500都需要配置,除非同一台服务器)

TCODE:WE31

如果是修改,报错提示被批准,需要先取消批准

 

 系统会自动生成相同名称的结构

相同方法再创建ITEM

 2、IDOC类型定义(300、500)

TCODE:WE30

 

 3、定义信息类型(300、500)

TCODE:WE81

新增一条MESSAGE TYPE

4、IDOC类型关联信息类型(300、500)

TCODE:WE82

5、发送端添加远程连接(300)

TCODE:SM59

配置后可以进行测试

6、创建到接收端的接口

TCODE:WE21

7、 创建逻辑系统并分配(300)

TCODE:SALE

这里将Z300CLIENT分配给发送端,则发送IDOC的时候接收方处合作伙伴编号为Z300CLIENT,

因此要在接收端500添加Z300CLIENT合作伙伴的参数文件

创建接收端逻辑系统,指明要发送要哪里,在步骤8使用到

8、创建接收端合作伙伴配置文件(300)

TCODE:WE20

合作伙伴编号 = 在SALE里配置的逻辑系统

 添加出站参数

9、ABAP程序发送IDOC到目标系统(300)

*&---------------------------------------------------------------------*
*& Report  YWX_TEST38
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ywx_test39.DATA: ls_sohead TYPE zsohead, "IDoc数据段:头ls_soitem TYPE zsoitem, "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 = 'ZSO_IDOC_TYPE'. "Message Type
ls_edidc-idoctp = 'ZSOIDOC'. "IDOC Type
ls_edidc-rcvprn = 'Z500CLIENT'. "partner Number of Recipient接收方合作伙伴
ls_edidc-rcvprt = 'LS'.      "partner Type of Receiver接收方类型为逻辑系统*添加IDOC节点
CLEAR lt_edidd.
lt_edidd-segnam = 'ZSOHEAD'."头节点
lt_edidd-dtint2 = 0.
CLEAR ls_sohead.
ls_sohead-vbeln = '5500000063'."SO单号
ls_sohead-erdat = '20210810'."SO日期
ls_sohead-auart = 'YMOR'."SO类型
lt_edidd-sdata = ls_sohead. "节点内容:ls_pohead结构中的数据最后被拼接成字符串再赋值给lt_edidd-sdata,最大长度不能超过1000
APPEND lt_edidd.CLEAR lt_edidd.
lt_edidd-segnam = 'ZSOITEM'."Item节点
lt_edidd-dtint2 = 0.
CLEAR ls_soitem.
ls_soitem-vbeln = '5500000063'."SO单号
ls_soitem-posnr = '0010'."Item行号
ls_soitem-matnr = 'L1040000053'."物料号
ls_soitem-kwmeng = '3'."数量
ls_soitem-meins = 'PC'."单位
lt_edidd-sdata = ls_soitem.
APPEND lt_edidd.CLEAR lt_edidd.
lt_edidd-segnam = 'ZSOITEM'."Item节点
lt_edidd-dtint2 = 0.
CLEAR ls_soitem.
ls_soitem-vbeln = '5500000063'."SO单号
ls_soitem-posnr = '0010'."Item行号
ls_soitem-matnr = 'C7890041235'."物料号
ls_soitem-kwmeng = '1'."数量
ls_soitem-meins = 'M'."单位
lt_edidd-sdata = ls_soitem.
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.CALL FUNCTION 'DB_COMMIT'.CALL FUNCTION 'DEQUEUE_ALL'.COMMIT WORK AND WAIT.CALL FUNCTION 'EDI_DOCUMENT_DEQUEUE_LATER'EXPORTINGdocnum = ls_edidc-docnum
*     SYNCHRON                     = ' '
*   EXCEPTIONS
*     IDOC_IS_NOT_TO_DEQUEUE       = 1
*     OTHERS = 2.IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.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.

 BD87查看状态

可以看到已经成功发送

 这时去接收端500查看IDOC状态

需要在接收端将1-2-3-4步骤重复一遍

重复后再次执行,数据已经匹配,但是合作伙伴参数文件还有错误

这时需要在接收端配置Z300CLIENT合作伙伴参数信息

注意:需要在500里配置名字一模一样的伙伴信息,否则会找不到

 10、在接收端500配置逻辑系统(500)

TCODE:SALE

 

11、在接收端配置远程连接(500)

TCODE:SM59

12、创建到发送端的接口 (500)

TCODE:WE21

13、在接收端创建处理函数(500)

参考函数:IDOC_INPUT_BBP_IV

FUNCTION ZFM_IDOC_SO_PROCESS.
*"--------------------------------------------------------------------
*"*"本地接口:
*"  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
*"--------------------------------------------------------------------DATA: ls_chead TYPE yzhead,ls_citem TYPE yzitem.CLEAR idoc_contrl.READ TABLE idoc_contrl INDEX 1.
*  IF idoc_contrl-mestyp <> 'YZ_PO_TEST_TYPE'.
*    RAISE wrong_function_called.
*  ENDIF.LOOP AT idoc_contrl.LOOP AT idoc_data WHERE docnum = idoc_contrl-docnum.CASE idoc_data-segnam.WHEN 'ZSOHEAD'."直接将字符赋值给结构,赋值过程中会按照结构中的字段长度来划分各字段ls_chead = idoc_data-sdata.WRITE: / 'Head',ls_chead.WHEN 'ZSOITEM'.ls_citem = idoc_data-sdata.WRITE: / 'Item',ls_citem.WHEN OTHERS.ENDCASE.ENDLOOP."根据数据处理情况设置当前IDoc处理的状态IF SY-SUBRC = 0.CLEAR idoc_status.idoc_status-docnum = idoc_contrl-docnum."当前正处理的IDocidoc_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.

14、在接收端注册处理函数(500)

TCODE:BD51

15、在接收端将函数与IDOC类型、消息类型关联(500)

 TCODE:WE57

16、在接收端创建进站处理代码(500)

TCODE:WE42

17、在接收端创建合作伙伴配置文件(500)

TCODE:WE20

18、添加进站参数(500)

选择步骤16添加的代码

19、执行测试(500)

TCODE:BD87

将之前错误的数据再次执行,可以在处理函数里打断点进行调试

如果报合伙人参数文件无效,基本以下二点可以解决

1、检查接收端配置的合伙人参数是否正确配置(SALE、WE20)

2、检查发送端是否正确分配逻辑系统到集团(SALE)

21、参考

主要参考江正军博客:[SAP ABAP开发技术总结]IDoc - 江正军 - 博客园


http://www.ngui.cc/zz/1918268.html

相关文章

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

我们有从系统生成的iDOC文件。 现在&#xff0c;我们尝试通过RFC连接将它们发送到SAP。 我已经作为客户端建立了RFC连接&#xff0c;但无法发送iDOC&#xff01;我试图创建一个样本iDOC进行测试&#xff0c;但是它不起作用&#xff01;Exception in thread "main" ja…

IDOC报错处理

IDOC数据后台表&#xff1a; EDIDC Stores the Control Record information an IDOC EDID4 Stores the Data Records (version 4.6) EDIDD Data Seg (EDI Intermediate doc) EDIDS Stores the S…

IDOC配置篇 ( 二 )

一、前言 江正军的博客对IDOC介绍非常详细 https://www.cnblogs.com/jiangzhengjun/p/4292135.html#_Toc411677416 二、下面介绍CAR和MDG分别下发小票和物料主数据 三、CAR系统 本文介绍的配置实例是POSDM(CAR)系统产生的IDOC传递到S4 retail的过程的小票IDOC的相关配置 …

IDOC 开发 (三)

一 前言 网上有一个介绍IDOC的文章, 讲的非常详细. 有兴趣的可以看一下. https://www.cnblogs.com/jiangzhengjun/p/4292135.html#_Toc411677416 为了讲解更有条理, 本文介绍的内容是开发一个IDOC用于实现采购订单的修改(数量/价格)及审批 二 开发及配置步骤 按下列步骤…

ABAP传输自定义IDOC实例

首先确定出站方和入站方&#xff0c;本例中我使用150作为发送方将200作为接收方。 发送端系统配置 进入tcode-SALE&#xff0c;点击定义逻辑系统&#xff0c;这里我定义D01CLNT150为发送端&#xff0c;D01CLNT200为接收端 2&#xff0c;将逻辑系统分配给对应的client 3&#x…

IDOC 监控

本文主要介绍IDOC监控相关的标准功能及相关表. 主要集中在两个事务代码 WE02 显示 IDoc WPER POS 接口监控器 二 事务代码WE02 IDOC基本监控程序 01 选择界面 02 明细结果呈现 左侧通过树状结构呈现消息类型及状态 统计IDOC个数. 双击任意节点,右侧ALV显示节点下的所有…

什么是IDOC,以及IDOC的步骤

创建IDOC: 第一步:WE31 创建IDOC所包含的字段. 第二步:WE30 创建IDOC 把Segment分配给IDOC 第三步:WE81 创建信息类型 第四步:WE82 把IDOC类型与信息类型对应. 第五步:WE57 Assign Message & Idoc Type to a Function Module for Data Process 第六步:SM59 …

IDOC 基础篇 ( 一 )

一、前言 江正军的博客对idoc就详细的说明介绍&#xff0c;有兴趣的可以看一下。 https://www.cnblogs.com/jiangzhengjun/p/4292135.html#_Toc411677436 二、idoc的集中数据存储&#xff1a;(表) EDIDC &#xff1a; 控制记录&#xff0c;记录IDOC的一些控制字段&#x…

SAP-IDOC 知识详解-概述

IDoc (Intermediate document)是一种系统间通用的数据交换媒介文件,通过IDoc可以方便的和外部系统进行数据交换,它可以内/外传送以实现系统的自动化,在SAP中IDOC主要应用到以下技术: >>ALE(Application Link Enabling):用于在同一集团中不同的SAP系统之间的数据交换 &g…

编程通用知识点

编程通用知识点 做iOS和Android开发后&#xff0c;发现有些知识点是共通的&#xff0c;就做下记录吧 操作系统 操作系统是如何管理物理内存的&#xff1f;内存虚拟地址映射物理地址浅析操作系统中的虚拟地址与物理地址 跨进程通讯 进程间通信的方式——信号、管道、消息队…