原文:Small Fire · IDoc 操作 · ABAP 子专栏 · Small Fire 技术笔记

参考链接

1.IDoc简介

IDoc:是基于文档,用作异步传输数据的载体,类似于XML;使用功能场景:假设 1040 和 1020 是同一个集团下两个不同子公司的 SAP 系统,1040 需要将其采购订单信息及时发送给 1020,可以使用IDoc传输。

  • IDOC 的整个配置,涉及了远程连接、ALE、消息控制、tRFC 等技术的集成
  • IDoc支持异步、同步、可以收集一定数量的包后发送,最重要的是,IDOC有完整的监控系统和错误处理机制。
  • IDoc支持SAP系统集团之间,SAP-CRM/SRM/PI等之间,SAP-第三方系统之间的集成
  • 通过系统预定义IDOC类型,可以自动收集IDoc,挂JOB定时发送,也可以配置消息控制。

数据段是IDoc结构组件,是IDoc构成的单元;有Segment type:数据段类型与Segment.definition:数据段定义

  • :Segment type名称与SAP版本无关,以"E1/Z1"开头
  • :Segment definition名称与SAP版本有关,外部系统确定数据段版本的关键;以"E2/Z2"开头+版本号 访问IDoc中具体某个字段时,需要通过Segment type。
  • IDoc包含多个Segment,每个Segment内包含有多个字段
  • Segment类似于XML的节点以及节点属性

IDoc特性:

  • IDoc 包含有三种类型的记录:一条控制记录,一个或多个数据记录,一个或多个状态记录
  • IDoc type:IDoc 结构,不同的 SAP 业务对象对应不同的 IDoc 类型(一个或多个)。
  • IDoc 类型中定义了数据段(Segment)以及数据段的层级和次序。定义节点间的相互逻辑关系。
  • 标准 SAP 系统提供的 IDoc 类型称为基本类型(Basic type),该类型可以通过 IDoc 扩展(Extention)进行调整,即在 SAP IDoc 类型结构的基础上增加新的数据段或者在数据段中增加新字段。
  • IDoc Basic Type: 是承载数据的一个类型,可以认为是一个数据结构。Basic Type 由 Segment 构成,有点类似于 XML 的格式。每个 Segment 指定了一些字段,在这些字段里面可以输入一些限定的数据。

2.包含组件

  • ALE(Application Link and Enabling)是 SAP 专门为 SAP 与 SAP 之间所设计的整合中间件,多用于同一个企业中不同 SAP 系统之间的数据交换,通过 IDoc 格式的数据创建分布式系统 。分布式数据交换提供了可靠安全的通讯机制。
  • EDI(Electronic Document Interchange,电子数据交换)其实就是采用标准格式的电子数据,用于在通讯网络中在业务伙伴间交换业务文档所用。按相同的排列放置数据到一个数据文档中,并按相同的排列解析此文档以得到所需的内容。
  • IDoc(Intermediate Document,中转文档)是 SAP 提供的系统整合专用的数据 / 消息格式,它通过 ALE 方式来进行交换,IDoc 提供了 EDI 的支持,可以认为 IDoc 是 EDI 的一个实现。

3.IDoc发送接收流程

外发过程(Outbound Process : OP):处理数据集并发出消息

  • 应用文档被创建
  • IDoc 生成
  • IDoc 从 SAP 传送到操作系统
  • IDoc 被转换成 EDI 标准格式
  • EDI 文件被传送到业务伙伴处(所以业务伙伴可以没有 SAP,因为 EDI 是个标准)
  • EDI 子系统将传送的状态回报给 SAP

接收过程(Inbound Process : IP):接收消息并处理

  • EDI 文档被接收
  • EDI 文档被转换成 IDoc
  • IDoc 传送到 SAP 层
  • 应用文档在 SAP 中创建
  • 应用文档现在可供浏览了

4.IDoc 流程步骤及 TCode

外发配置(OP)描述接收配置(IP)描述
WE31创建IDOC所需要的字段WE31开发Segment Type
WE30开发IDOC基本类型和扩展,把Segment分配给IDOCWE81开发Message Type
WE81开发Message TypeWE82Message Type和IDoc Type绑定
WE82Message Type和IDoc Type绑定BD64增加消息类型
BD64添加视图模型,添加消息类型配置伙伴参数WE20配置接收系统入站信息
WE20配置发送系统出站信息SE37编写接收接口
SE38编写发送程序WE57分配IDOC类型给处理函数
WE14若为黄灯,手动发送
BD51配置进站函数模块属性
WE42配置进站处理代码
WE02IDOC发送信息检查

5.Process Code处理代码设定

  • WE41、WE42、WE40、WE64
  • 处理代码用于确定数据写入 IDoc 或从 IDoc 读取的处理方式,处理代码对应具体的功能模块或者工作流。入站和出站处理的伙伴参数中都可以指定处理代码
  • Outbound Process Code: 出站的处理代码。其实就是具体的一个操作流程。在得到了 Output Type,确定了 IDoc Basic Type 以后,需要从 Output Type 提供的所有数据里面,按 IDoc Basic Type 组合出 IDoc 来,即给 IDoc Basic Type 赋值。
  • Inbound Process Code: 进站的处理代码。就是接收到一个 IDoc 以后,根据 Message Type 来确定要怎么处理这个 IDoc。
  • 程序的思路就是,把每个 IDOC 结点按字符串形式逐个添加,而字符串的添加次序自然也体现了 IDOC 结点间的逻辑关系。

6.端口(Port):WE21

  • 端口用于外发流程,它判断 EDI 子系统程序名称、IDoc 文件传送到操作系统的目录,IDoc 文件名和 RFC 目的地
  • 端口,指定这个 IDoc 的接收方,可以是任何其他系统,也可以发到当前的 SAP 当前的 Client。

7.RFC目的地:SM59

  • 用于定义到远程系统通讯连接的特性以及需要调用何种功能

8.Partnr Profile:WE20

  • Partnr:对口的合作伙伴
  • Partner Profile:是Partner的一些参数,分为OP和IP.它们是为了让系统知道怎么去处理 Outbound/Inbound 的事件.
  • Partner Profile 指定在外发过程中所用的各类组件(业务伙伴号、IDoc 类型、信息类型、端口、处理码等),通讯方式(异步或同步)以及当错误时通知何人

9.Message Type

  • 用于消息类型的处理,就是告诉 Inbound 一方,我这个 IDoc 是用来做什么的。
  • WE81, 创建Message type
  • WE82,连接 Message type和 IDOC type

10.IDoc类型定义的相关函数

函数组 EDIM 中的 SAP 内部功能模块用于操作 IDoc 基本类型和扩展:OBJECT代指所操作的队象,既IDOCTYPE或EXTTYPE.

  • [OBJECT]_CREATE
  • [OBJECT]_UPDATE
  • [OBJECT]_READ
  • [OBJECT]_DELETE
  • [OBJECT]_CLOSE
  • [OBJECT]_UNCLOSE
  • [OBJECT]_EXISTENCE_CHECK
  • [OBJECT]_INTEGRITY_CHECK
  • [OBJECT]_TRANSPORT

函数组EDIJ中的SAP内部功能模块用于操作IDoc数据段

  • SEGMENT_CREATE
  • SEGMENT_MODIFY
  • SEGMENT_DELETE
  • SEGMENT_INITION_DELETE

11.IDoc常用事物码

SAP 提供了一个事务码列出的基本上所有的 IDoc 相关的事务码WEDI 。

/BD87/WE18/SUIM
/SM58/WE19/GS03
/WE09/WE20/BDLS