SAP 中 IDOC 的操作

IDOC 是 SAP 支持的与 SAP 和非 SAP 系统异步通信的标准化 EDI 类文档。 IDOC 用于发送和接收“业务”文档,例如销售订单或来自贸易合作伙伴的 SAP 系统或外部计划。

尽管 SAP 系统支持许多端口类型来发送和接收 IDOC (,例如文件端口、CPIC 端口) ,但 SAP 适配器支持通过 tRFC 端口发送和接收 IDOC。

用于发送 IDOC 的操作

对 SAP 的所有 IDOC 调用在内部被视为 tRFC 调用,适配器充当 tRFC 客户端,并在 SAP 中调用 RFC 以发送 IDOC。 与任何其他 tRFC 客户端调用一样,适配器客户端可以选择将 GUID 传递给适配器,后者又将其与用于 SAP 系统上调用的事务 ID (TID) 相关联。 (如果适配器客户端未传递 GUID,则适配器会生成自己的 GUID.) GUID 在响应消息中返回到适配器客户端。 适配器客户端可以使用此 GUID 来确认 SAP 系统上的 TID。 可以通过调用 SAP 绑定 ConvertGuidToTid 中的特殊静态方法来获取适配器用于 tRFC 调用的实际 SAP TID。 实际 TID 对于排查 SAP 系统上的问题可能很有用。

调用发送 IDOC 完成后,必须在 SAP 系统上确认 TID。 这使 SAP 系统能够从其数据库中删除 TID。 适配器客户端可以确认 SAP 系统上的 TID。

  • 显式调用适配器上的 RfcConfirmTransID 操作。 此操作采用上述响应消息中返回的 GUID () ,并导致适配器确认 SAP 系统上关联的 TID。

  • 隐式设置 AutoConfirmSentIdocs 绑定属性。 如果此绑定属性为 true,则适配器在将 IDOC 发送到 SAP 系统后自动提交 TID。 有关详细信息,请参阅 有关 mySAP Business Suite 绑定属性的 BizTalk 适配器 的信息。

    SAP 适配器使用以下 RFC 发送 IDOC:

  • INBOUND_IDOC_PROCESS。 此函数模块用于 4.0 之前的 SAP 版本。

  • IDOC_INBOUND_ASYNCHRONOUS。 此函数模块用于 SAP 版本 4.0 及更高版本。

跨多行段数据发送 IDOC

IDOC 由段构成。 IDOC 平面文件中的每个段条目都包含段标头信息, (包含 DOCNUM 字段) 和段数据。 在某些 IDOC 中,段数据可以跨多行拆分。 例如:

Segment header (DOCNUM is one of the fields here)  |  Segment data  
Segment header (DOCNUM is one of the fields here)  |  Segment data  
Segment data wrapped from the previous line  
Segment header (DOCNUM is one of the fields here)  |  Segment data  

基于 WCF 的 SAP 适配器支持将此类 IDOC 发送到 SAP 系统。 为了支持发送此类 IDOC,SAP 适配器确定每个段数据是上一段数据的延续,还是是新的段数据。 SAP 适配器通过分析每个段标头并查找 DOCNUM 字段来确定这一点。 如果段数据拆分为两行,则第二行没有段标头,因此 SAP 适配器找不到 DOCNUM 字段。 因此,SAP 适配器可以确定它是上一段数据的延续。

例如,在上面所示的 IDOC 的表示形式中,SAP 适配器在“”Segment data wrapped from the previous line中找不到任何 DOCNUM 字段,并且能够确定该行是上一段数据的延续。 考虑到生产环境中 IDOC 平面文件的大小,对每个段数据执行此类检查可能会导致处理时间增加。

注意

适配器使用 DOCNUM 字段而不是回车换行符 (CRLF) 标识和提取 IDOC 数据中的每个段记录。 如果控件和数据记录中的 DOCNUM 字段无效或部分为空,适配器将无法分析 IDOC。 因此,IDOC 不会发送到 SAP 系统。

用于发送 IDOC 的操作

支持以下操作将 IDOC 发送到 SAP 系统:

  • 发送。 使用此操作使用强类型架构将 IDOC 发送到 SAP 系统。 此操作的架构公开控制记录字段和数据记录字段,包括段标头和段字段。 Send 操作特定于 IDocType + CimType + ReleaseNumber + Version 组合。

    此操作针对每个 IDOC 显示,可在“添加适配器服务引用插件”中的特定 IDOC 节点下使用,也可以使用适配器服务外接程序。

    注意

    若要能够成功执行 发送 操作,必须在 SAP 系统中具有相关授权。 有关详细信息,

  • SendIdoc。 使用此操作使用弱类型架构将 IDOC 发送到 SAP 系统。 此操作的架构将 IDOC 公开为包含控制记录和数据记录的单个字符串字段。 SendIdoc 操作采用 IDOC 字符串和 GUID 作为参数。

    这是 SAP 系统公开的所有 IDOC 的单个操作,在“添加适配器服务引用插件”或“使用适配器服务外接程序”的根 IDOC 节点下可用。

    详细信息:

  • 使用 BizTalk Server 将 IDOC 发送到 SAP 系统,请参阅使用 BizTalk Server 将 IDOC 发送到 SAP

  • 使用 WCF 服务模型将 IDOC 发送到 SAP 系统,请参阅 使用 WCF 服务模型将 IDOC 发送到 SAP

  • 用于发送 IDOC 的消息结构和 SOAP 操作,请参阅 IDOC 操作的消息架构

用于接收 IDOC 的操作

若要接收 IDOC,SAP 适配器可以充当 tRFC 服务器或 RFC 服务器:

  • 要使适配器充当 tRFC 服务器,必须将绑定属性 TidDatabaseConnectionString 设置为计算机上的 TID 数据库的连接字符串。 对于 tRFC 服务器方案,适配器接受来自 SAP 系统的 tRFC 客户端调用来接收 IDOC。

  • 要使适配器充当 RFC 服务器, TidDatabaseConnectionString 应为 null (默认) 。 对于 RFC 服务器方案,适配器接受来自 SAP 系统的 RFC 客户端调用来接收 IDOC。

    以下 RFC 用于发送和接收 IDOC;发送 IDOC 时,适配器使用这些 RFC,而在接收 IDOCS 时,SAP 系统会使用这些 RFC。

  • INBOUND_IDOC_PROCESS。 此函数模块用于 4.0 之前的 SAP 版本。

  • IDOC_INBOUND_ASYNCHRONOUS。 此函数模块用于 SAP 版本 4.0 及更高版本。

    从 SAP 系统接收 IDOC 支持以下操作:

  • 接收。 使用此操作可以使用强类型架构从 SAP 系统接收 IDOC。 此操作的架构公开控件记录字段和数据记录字段,包括段标头和段字段。

    此操作针对每个 IDOC 显示,可在“添加适配器服务引用插件”中的特定 IDOC 节点下使用,也可以使用适配器服务外接程序。

    注意

    若要能够成功执行 接收 操作,必须在 SAP 系统中具有相关授权。 有关详细信息,

    注意

    使用 “接收 ”操作,还可以接收多个 IDOC。

  • ReceiveIdoc。 使用此操作可以使用弱类型架构从 SAP 系统接收 IDOC。 此操作的架构将 IDOC 公开为由控制记录和数据记录组成的单个字符串字段。 此操作在 idocData> 标记下的 <XML 消息中以字符串的形式接收 IDOC。

    这是 SAP 系统公开的所有 IDOC 的单个操作,在“添加适配器服务引用插件”或“使用适配器服务外接程序”的根 IDOC 节点下可用。

    接收 IDOCs 时,SAP 适配器支持不同的消息格式,这些格式可以指定为绑定属性的值,由 SAP 适配器公开的 ReceiveIDocFormat

  • 如果设置为“Typed”,则 XML 架构强类型化为要接收的特定 IDOC。 (可以从接收操作中看到此消息的架构。请注意,对于不同的 IDOC) ,架构不同。 这会生成 XML IDOC。

  • 如果设置为“String”,则传入的 IDOC 数据将作为字符串值返回。 (可从 ReceiveIdoc 操作) 查看此消息的架构。 这会生成具有 idocData> 标记的 <XML 消息。

  • 如果设置为“Rfc”,则消息架构将匹配 RFC (或 tRFC) 架构,以用于 RFC 操作IDOC_INBOUND_ASYNCHRONOUS或INBOUND_IDOC_PROCESS,具体取决于传入的 IDOC 版本。 如果指定此绑定属性,则应使用 IDOC_INBOUND_ASYNCHRONOUS 或 INBOUND_IDOC_PROCESS RFC 接收 IDOC。 在前两个选项中,适配器在内部使用此 RFC。 在此选项中,显式使用此 RFC 接收 IDOC。

    用于接收 IDOC 的操作必须与适配器发出的 IDOC 数据的格式匹配。 下表提供了可从 SAP 接收 IDOC 的不同组合的摘要。

To receive an IDOC using 将绑定属性 ReceiveIDOCFormat 设置为
接收 操作 类型化
ReciveIdoc 操作 字符串
IDOC_INBOUND_ASYNCHRONOUS RFC R f c
INBOUND_IDOC_PROCESS RFC R f c

另一个绑定属性 PadReceivedIdocsWithSpaces 填充接收的 IDOC,当接收格式预期为“String”时,会为可选字段使用空格。 这样就可以与使用以前版本的适配器接收的 IDOC 数据格式兼容。

有关绑定属性的详细信息,请参阅 有关 mySAP Business Suite 绑定属性的 BizTalk 适配器的信息。

详细信息:

使用发送或接收操作的 SAP 授权

使用 发送接收 操作使用强类型架构发送和接收 IDOC 时,SAP 适配器在内部调用 IDOCTYPE_READ_COMPLETE RFC 以检索 IDOC 的元数据。 调用此 RFC 需要在 SAP 中执行以下授权:

Authorisation object S_IDOCDEFT, Fields:  
EDI_TCD, value 'WE30'  
ACTVT, value - 03 (display)  
EDI_DOC, value  *  
EDI_CIM, value *  

可以使用 SAP 中的 SU01 事务添加授权对象。 有关事务的详细信息,请联系 SAP 管理员或参阅 SAP 文档。

另请参阅

可以使用适配器执行哪些操作?