IDOC 操作的消息架构

中间文档 (IDOCS) 是 SAP 支持的标准化类似 EDI 的文档,用于与 SAP 和非 SAP 系统异步通信。 IDOCS 用于向贸易合作伙伴的 SAP 系统或外部计划发送和接收销售订单等业务文档。

尽管 SAP 系统支持多种端口类型来发送和接收 IDOCS (例如文件端口或 CPIC 端口) ,但适用于 mySAP Business Suite 的 Microsoft BizTalk 适配器支持使用 tRFC 端口发送和接收 IDOCS。

  • 对于出站 IDOC,SAP 适配器充当 tRFC 客户端,并调用 RFC 将 IDOC 发送到 SAP。

  • 对于入站 IDOC,SAP 适配器充当 tRFC 服务器,并接受来自 SAP 的 tRFC 客户端调用来接收 IDOC。

    SAP 适配器在 IDOC 节点下显示四个操作,可用于通过 SAP 系统发送和接收 IDOCS。

  • SendIdoc。 将 IDOC 作为字符串数据发送到适配器。 此操作直接显示在 IDOC 根节点下。 对所有 IDOC 使用相同的操作。

  • 发送。 将 IDOC 作为强类型数据发送到适配器。 此操作显示在特定于每个 IDOC 的节点下。

  • ReceiveIdoc。 从适配器接收 IDOC 作为字符串数据。 此操作直接显示在 IDOC 根节点下。 对所有 IDOC 使用相同的操作。

  • 接收。 从适配器接收 IDOC 作为强类型数据。 此操作显示在特定于每个 IDOC 的节点下。

注意

这四个操作提供了在程序和 SAP 适配器之间交换 IDOC 的不同方式。 适配器始终使用 RFC (,如下一节中所述,) 通过 SAP 系统发送或接收IDOC。

除了使用四个 IDOC 操作之一之外,还可以使用 SAP 适配器在内部使用的 RFC 之一来发送或接收 IDOC,以便与 SAP 系统交换 IDOC。 有关 SAP 适配器如何支持 IDOC 的概述,请参阅 SAP 中对 IDOC 的操作

本主题包含有关用于 IDOC 操作的消息架构和消息操作的信息。

SAP 适配器用于发送和接收 IOC 的 RFC

SAP 适配器在内部) 使用以下远程函数调用 (RFC 来与 SAP 系统交换 IDOCS。 在出站端 (适配器连接到 SAP 系统) ,适配器充当 tRFC 客户端来调用 RFC。 在 sap 到适配器) (入站端,SAP 在适配器上调用 RFC,该适配器充当 tRFC 服务器。

RFC 说明
IDOC_INBOUND_ASYNCHRONOUS 此函数模块在版本 4.0 及更高版本中使用。 它以对 4.x 版本有效的记录类型处理 IDOCS。 这可确保支持更长的 IDOC 段名称。

此 RFC 的参数包括:

- idoc_control_rec_40 (SAP 结构EDI_DC40)

- EDI_DD40) SAP 结构idoc_data_rec_40 (

IDOC 控制记录由以下字段组成:

- 梅斯蒂普 逻辑消息类型。 传达消息的业务含义。 这是必填字段。

- Idoctyp。 IDOC 的基本结构。 此字段标识使用此消息的布局集。 这是必填字段。

- Cimtyp. 客户扩展的结构。 如果扩展了 SAP 基本结构,客户必须为扩展的结构命名。 如果客户进行了增强,则这是必填字段;否则为初始。

- 合作伙伴字段。 它们是发送端和接收方合作伙伴参数,例如合作伙伴类型、合作伙伴编号、合作伙伴功能。

IDOC 数据记录包含以下字段:

- 标头字段。 段标头字段,如表名、段编号、段类型。 这些是必填字段。

- Sdata。 IDOC 使用的数据的 1000 字节字符字段。这是必填字段。
INBOUND_IDOC_PROCESS 此函数模块用于最高版本 4.0。 它以对 3.x 版本有效的记录类型处理 IDOCS。 还可以在 4.x 中使用此函数模块。

此 RFC 的参数包括:

- idoc_control (SAP 结构EDI_DC)

- idoc_data (SAP 结构EDI_DD)

用于发送 IDOC 的操作

SAP 适配器公开 Send 和 SendIdoc 操作,以便客户端将 IDOC 发送到 SAP 系统。 对于 Send 操作,IDOC 表示为强类型数据;对于 SendIdoc 操作,IDOC 表示为字符串数据。 这些操作确定 IDOC 数据在适配器和应用程序之间的表示方式。 适配器始终使用 IDOC_INBOUND_ASYNCHRONOUS 或 IDOC_INBOUND_PROCESS (t) RFC 将 IOC 发送到 SAP。 若要将 IDOC 发送到 SAP 系统,可以使用 Send 或 SendIdoc 操作,也可以直接调用相应的 RFC。

IDOC 客户端操作的消息结构

下表显示了 Send 和 SendIdoc 操作的消息结构。

操作 XML 结构 描述
发送 <Send xmlns="[MSG_VERSION]/Idoc/[VERSION]/[IDOCTYP]/ [CIMTYP]/[RELNO]/Send"> <idocData> <[EDI_DC40/EDI_DC] xmlns="/Types/Idoc/ [VERSION]/[IDOCTYP]/[CIMTYP]/[RELNO]"> <EDIDC_FIELD1>value1</ EDIDC_FIELD1> <EDIDC_FIELD2>value2</ EDIDC_FIELD2> … </EDI_DC40> <[SEGMENT_DEFN]_1> <[DATAHEADERCOLUMN_[SEGHDR_FLD1]> header_value_1 </[DATAHEADERCOLUMN_[SEGHDR_FLD1]> <[DATAHEADERCOLUMN_[SEGHDR_FLD2]> header_value_2 </[DATAHEADERCOLUMN_[SEGHDR_FLD2]> … <SEG_FIELD1>value1</SEG_FIELD1> <SEG_FIELD2>value2</SEG_FIELD2> … </[SEGMENT_DEFN]_1> <[SEGMENT_DEFN]_2> <[DATAHEADERCOLUMN_[SEGHDR_FLD1]> header_value_1 </[DATAHEADERCOLUMN_[SEGHDR_FLD1]> <[DATAHEADERCOLUMN_[SEGHDR_FLD2]> header_value_2 </[DATAHEADERCOLUMN_[SEGHDR_FLD2]> … <SEG_FIELD1>value1</SEG_FIELD1> <SEG_FIELD2>value2</SEG_FIELD2> … </[SEGMENT_DEFN]_2> … </[EDI_DC40/EDI_DC]> </idocData> <guid>guid</guid> </Send> 将强类型 IDOC 发送到 SAP

- IDOC 架构为强类型。

- 公开控件记录字段。

- 公开数据记录字段,包括段标头和段字段。

SAP 适配器将 GUID 与用于发送 IDOC 的 SAP 事务 ID (TID) 相关联。 可以选择是否在请求消息中指定 GUID。 如果请求消息中未包含 GUID,SAP 适配器将生成一个 GUID。 在响应消息中返回 GUID。
发送响应 <SendResponse xmlns="[MSG_VERSION]/Idoc/[VERSION]/ [IDOCTYP]/[CIMTYP]/[RELNO]/Send"> <guid>guid</guid> </SendResponse> 指示 IDOC 已发送到 SAP 系统。

如果 AutoConfirmSentIdocs 绑定属性为 true,则 SAP 适配器会自动确认 SAP 系统上的事务,你可以忽略响应中返回的 GUID。 如果 AutoConfirmSentIdocs 绑定属性为 false,则必须使用 SAP 适配器返回的 GUID 调用 RfcConfirmTransID 操作,以在 SAP 系统上完成事务。

可以调用 SapAdapterUtilities.ConvertGuidToTid 方法,以获取与 LUW) 逻辑工作单元 (关联的 TID。
SendIdoc <SendIdoc xmlns="[MSG_VERSION]/Idoc"> <idocData>docDataString</idocData> <guid>guid</guid> </SendIdoc> 将弱类型 IDOC 发送到 SAP。

- IDOC 架构为弱类型。

- 将 IDOC 公开为由控制记录和数据记录组成的单个字符串字段。

SAP 适配器将 GUID 与用于发送 IDOC 的 SAP TID 相关联。 可以选择是否在请求消息中指定 GUID。 如果请求消息中未包含 GUID,SAP 适配器将生成一个 GUID。 在响应消息中返回 GUID
SendIdoc 响应 <SendIdocResponse xmlns="[MSG_VERSION]/Idoc"> <guid>guid</guid> </SendIdocResponse> 指示 IDOC 已发送到 SAP 系统。

如果 AutoConfirmSentIdocs 绑定属性 为 true,SAP 适配器会自动确认 SAP 系统上的事务,你可以忽略响应中返回的 GUID。 如果 AutoConfirmSentIdocs 绑定属性为 false,则必须使用 SAP 适配器返回的 GUID 调用 RfcConfirmTransID 操作,才能在 SAP 系统上完成事务。

可以调用 SapAdapterUtilities.ConvertGuidToTid 方法以获取与 LUW 关联的 TID。

[MSG_VERSION] = 消息版本字符串;例如 。 http://Microsoft.LobServices.Sap/2007/03

[版本] = IDOC 发布版本 (2 或 3) 。

[IDOCTYP] = IDOC 类型;例如,ORDERS05。

[CIMTYP] = 自定义 IDOC 的 Cimtype。

[RELNO] = 版本号;例如 620。

[EDI_DC40/EDI_DC] = 发布版本 3 IDOC 的EDI_DC40,版本 2 IDOC 的EDI_DC。

[EDIDC_FIELD] = 构成EDI_DC40/EDI_DC控制记录结构的字段。

[SEGMENT_DEFN] = 段定义名称 (而不是段类型名称) ;例如,E2EDK01005。 请注意,根据 IDOC 的结构,段定义节点也可能出现在段组节点下。

[DATAHEADERCOLUMN_ (SEGHDR_FLD) ] = 每个段都有一个段标头,其中包含一组标准标头字段,后跟段数据。 段数据由所有段字段和数据组成。 此节点表示段标头字段;例如,DATAHEADERCOLUMN_SEGNAM。

[SEG_FIELD] = 构成特定段定义的段字段名称 [SEGMENT_DEFN]。

[guid] = GUID 参数。

IDOC 客户端操作的消息操作

下表显示了 Send 和 SendIdoc 操作的消息操作。

操作 操作 示例
发送 [MESSAGE_VERSION]/Idoc/[VERSION] /[IDOCTYP]/[CIMTYP]/[RELNO]/Send http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS05//620/Send
发送响应 [MESSAGE_VERSION]/Idoc/[VERSION] /[IDOCTYP]/[CIMTYP]/[RELNO]/Send/response http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS05//620/Send/response
SendIdoc [MESSAGE_VERSION]/Idoc/SendIdoc http://Microsoft.LobServices.Sap/2007/03/Idoc/SendIdoc
SendIdoc 响应 [MESSAGE_VERSION]/Idoc/SendIdoc/response http://Microsoft.LobServices.Sap/2007/03/Idoc/SendIdoc/response

[MESSAGE_VERSION] = 消息版本字符串;例如 。 http://Microsoft.LobServices.Sap/2007/03

[版本] = IDOC 发布版本 (2 或 3) 。

[IDOCTYP] = IDOC 类型;例如,ORDERS05。

[CIMTYP] = 自定义 IDOC 的 Cimtype。

[RELNO] = 版本号;例如 620。

接收 IDOC 的操作

SAP 适配器公开 Receive 和 ReceiveIdoc 操作,以便应用程序从 SAP 系统接收 IDOC。 对于 Receive 操作,IDOC 表示为强类型数据;对于 ReceiveIdoc 操作,IDOC 表示为字符串数据。

这些操作确定适配器如何将 IDOC 数据发送到应用程序。 适配器始终以 IDOC_INBOUND_ASYNCHRONOUS 或 IDOC_INBOUND_PROCESS tRFC 的形式从 SAP 系统接收 IDOC。 可以使用 Receive 或 ReceiveIdoc 操作,也可以接收 RFC 格式的 IDOC 数据。 设置 ReceiveIdocFormat 绑定属性以指定适配器向应用程序发出 IDOC 数据的格式。 有关 SAP 适配器绑定属性的详细信息,请参阅 阅读适用于 mySAP Business Suite 绑定属性的 BizTalk 适配器

IDOC 接收操作的消息结构

下表显示了 Receive 和 ReceiveIdoc 操作的消息结构。

操作 XML 结构 说明
接收 <Receive xmlns="[MSG_VERSION]/Idoc/[VERSION]/[IDOCTYP]/ [CIMTYP]/[RELNO]/Receive"> <idocData> <[EDI_DC40/EDI_DC] xmlns="/Types/Idoc/ [VERSION]/[IDOCTYP]/[CIMTYP]/[RELNO]"> <EDIDC_FIELD1>value1</ EDIDC_FIELD1> <EDIDC_FIELD2>value2</ EDIDC_FIELD2> … </EDI_DC40> <[SEGMENT_DEFN]_1> <[DATAHEADERCOLUMN_[SEGHDR_FLD1]> header_value_1 </[DATAHEADERCOLUMN_[SEGHDR_FLD1]> <[DATAHEADERCOLUMN_[SEGHDR_FLD2]> header_value_2 </[DATAHEADERCOLUMN_[SEGHDR_FLD2]> … <SEG_FIELD1>value1</SEG_FIELD1> <SEG_FIELD2>value2</SEG_FIELD2> … </[SEGMENT_DEFN]_1> <[SEGMENT_DEFN]_2> <[DATAHEADERCOLUMN_[SEGHDR_FLD1]> header_value_1 </[DATAHEADERCOLUMN_[SEGHDR_FLD1]> <[DATAHEADERCOLUMN_[SEGHDR_FLD2]> header_value_2 </[DATAHEADERCOLUMN_[SEGHDR_FLD2]> … <SEG_FIELD1>value1</SEG_FIELD1> <SEG_FIELD2>value2</SEG_FIELD2> … </[SEGMENT_DEFN]_2> … </[EDI_DC40/EDI_DC]> </idocData> </Receive> 从 SAP 接收强类型 IDOC

- IDOC 架构为强类型。

- 公开控制记录字段。

- 公开数据记录字段,包括段标头和段字段。
接收响应 <ReceiveResponse xmlns="[MSG_VERSION]/Idoc/[VERSION]/[IDOCTYP]/ [CIMTYP]/[RELNO]/Receive"> </ReceiveResponse> 指示已从 SAP 系统收到 IDOC。
ReceiveIdoc <ReceiveIdoc xmlns="[MSG_VERSION]/Idoc"> <idocData>docDataString</idocData> </ReceiveIdoc> 从 SAP 接收弱类型 IDOC。

- IDOC 架构为弱类型。

- 将 IDOC 公开为由控制记录和数据记录组成的单个字符串字段。
ReceiveIdoc 响应 <ReceiveIdocResponse xmlns="[MSG_VERSION]/Idoc"> </ReceiveIdocResponse> 指示已从 SAP 系统收到 IDOC。

[MSG_VERSION] = 消息版本字符串;例如 。 http://Microsoft.LobServices.Sap/2007/03

[版本] = IDOC 发布版本 (2 或 3) 。

[IDOCTYP] = IDOC 类型;例如,ORDERS05。

[CIMTYP] = 自定义 IDOC 的 Cimtype。

[RELNO] = 版本号;例如 620。

[EDI_DC40/EDI_DC] = 发布版本 3 IDOC 的EDI_DC40,发布版本 2 IDOC 的EDI_DC。

[EDIDC_FIELD] = 构成EDI_DC40/EDI_DC控制记录结构的字段。

[SEGMENT_DEFN] = 段定义名称 (而不是段类型名称) ;例如,E2EDK01005。 段定义节点还可以显示在段组节点下,具体取决于 IDOC 的结构。

[DATAHEADERCOLUMN_ (SEGHDR_FLD) ] = 每个段都有一个段标头,其中包含一组标准标头字段,后跟段数据。 段数据由所有段字段和数据组成。 此节点表示段标头字段;例如,DATAHEADERCOLUMN_SEGNAM。

[SEG_FIELD] = 构成特定段定义的段字段名称 [SEGMENT_DEFN]。

接收 RFC 格式的 IDOC

还可以接收 RFC 格式的 IDocs。 用于从 SAP 接收 IDOC 的 RFC 包括:

  • 版本 3 IDOC 的IDOC_INBOUND_ASYNCHRONOUS。

  • 版本 2 IDOC 的INBOUND_IDOC_PROCESS。

    以下代码显示作为IDOC_INBOUND_ASYNCHRONOUS操作接收的 IDOC 的结构。

<IDOC_INBOUND_ASYNCHRONOUS xmlns="http://Microsoft.LobServices.Sap/2007/03/Rfc/">  
  <IDOC_CONTROL_REC_40>  
    <EDI_DC40 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">  
      <EDIDC_FIELD1>field1</EDIDC_FIELD1>  
      <EDIDC_FIELD2>field2</EDIDC_FIELD2>  
      …  
    </EDI_DC40>  
  <IDOC_DATA_REC_40>  
    <EDI_DD40 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">  
      <[SEG_HEADER_FIELD1]>value1</[SEG_HEADER_FIELD1]>  
      <[SEG_HEADER_FIELD2]>value2</[SEG_HEADER_FIELD2]>  
      …  
      <SDATA>segment value</SDATA>  
    </EDI_DD40>  
    …  
  </IDOC_DATA_REC_40>  
</IDOC_INBOUND_ASYNCHRONOUS>  

[EDIDC_FIELD] = 构成EDI_DC40/EDI_DC控制记录结构的字段

[SEG_HEADER_FIELD] = 每个段都有一个段标头,其中包含一组标准标头字段,后跟段数据。 段数据由所有段字段和数据组成。 此节点表示段标头字段;例如 SEGNAM、MANDT 和 DOCNUM。

有关 tRFC 操作格式的详细信息,请参阅 tRFC 操作的消息架构

IDOC 接收操作的消息操作

下表显示了 Receive 和 ReceiveIdoc 操作的消息操作。

操作 操作 示例
接收 [MESSAGE_VERSION]/Idoc/[VERSION] /[IDOCTYP]/[CIMTYP]/[RELNO]/Receive http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS05//620/Receive
接收响应 [MESSAGE_VERSION]/Idoc/[VERSION] /[IDOCTYP]/[CIMTYP]/[RELNO]/Receive/response http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS05//620/Receive/response
ReceiveIdoc [MESSAGE_VERSION]/Idoc/ReceiveIdoc http://Microsoft.LobServices.Sap/2007/03/Idoc/ReceiveIdoc
ReceiveIdoc 响应 [MESSAGE_VERSION]/Idoc/ReceiveIdoc/response http://Microsoft.LobServices.Sap/2007/03/Idoc/ReceiveIdoc/response