SAP 中对 IDOC 的操作

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

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

发送 IDOC 的操作

对 SAP 的所有 IDOC 调用在内部被视为 tRFC 调用,其中适配器充当 tRFC 客户端,并在 SAP 中调用 RFC 以发送 IDOC。 与任何其他 tRFC 客户端调用一样,适配器客户端可以选择性地将 GUID 传递给适配器,而适配器又将其与事务 ID (TID) 相关联,该 ID 用于 SAP 系统上的调用。 (如果适配器客户端未传递 GUID,适配器将生成自己的 GUID。) 在响应消息中将 GUID 返回到适配器客户端。 适配器客户端可以使用此 GUID 来确认 SAP 系统上的 TID。 适配器用于 tRFC 调用的实际 SAP TID 可以通过调用 SAP 绑定中的特殊静态方法 ConvertGuidToTid 来获取。 使用实际 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 公开为由控制记录和数据记录组成的单个字符串字段。 此操作接收 IDOC 作为 idocData> 标记下的 XML 消息中的<字符串。

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

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

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

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

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

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

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

当接收格式预期为“String”时,另一个绑定属性 PadReceivedIdocsWithSpaces 使用可选字段的空格填充收到的 IDOC。 这样就可以与使用以前版本的适配器接收的 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 文档。

另请参阅

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