使用 BizTalk Server 将 IDOC 发送到 SAP

对 SAP 的所有 IDOC 调用在内部被视为 tRFC 调用,其中适配器充当 tRFC 客户端,并在 SAP 中调用 RFC 以发送 IDOC。 本部分提供有关使用适用于 mySAP Business Suite 的 Microsoft BizTalk 适配器和 BizTalk Server 将 IDOC 发送到 SAP 的信息。 SAP 适配器显示两个不同的操作以发送 IDOC:

  • 发送 操作使适配器客户端能够发送具有强类型架构的 IDOC。

  • SendIdoc 操作使适配器客户端能够发送具有弱类型架构的 IDOC。 使用此方式,适配器客户端可以将平面文件 IDOC 发送到 SAP 系统。 整个平面文件 IDOC 将是 SendIdoc XML 消息中的节点值。

    有关 SAP 适配器如何支持将 IDOC 发送到 SAP 系统的详细信息,请参阅 SAP 中 IDOC 的操作。 有关用于发送 IDOC 的 SOAP 消息结构的详细信息,请参阅 IDOC 操作的消息架构

使用 SAP 适配器发送 IDOC 的 BizTalk 方案

下表提供了将 IDOC 发送到 SAP 系统的关键 BizTalk 方案:

BizTalk 的输入 BizTalk 处理 输出到适配器
平面文件 IDOC 元数据设计时间

1. 将绑定属性 GenerateFlatFileCompatibleIdocSchema 设置为 True
2. 使用适配器服务加载项为特定 IDOC 生成 发送 操作的架构。

业务流程设计时间

1. 接收平面文件 IDOC
2. 使用平面文件反汇编程序使用刚生成的架构将平面文件 IDOC 转换为 XML IDOC。
3. 将“操作”设置为 “发送 ”操作。
发送消息
平面文件 IDOC 元数据设计时间

1. 将绑定属性 GenerateFlatFileCompatibleIdocSchema 设置为 True
2. 使用适配器服务加载项从 IDOC 节点生成 SendIdoc 操作的架构。

业务流程设计时间

1. 接收平面文件 IDOC
2. 使用平面文件反汇编程序将平面文件 IDOC 转换为 XML (在这种情况下,XML 消息包含 idocData <> 节点,该节点包含使用刚生成的架构) 整个平面文件 Idoc 消息。
3. 将操作设置为 SendIdoc 操作。
SendIdoc 消息
XML IDOC 元数据设计时间

- 使用使用适配器服务加载项为特定 IDOC 生成 发送 操作的架构。

业务流程设计时间

1. 接收 XML IDOC。
2. 将“操作”设置为 “发送 ”操作。
发送消息
XML 消息中的平面文件 IDOC 元数据设计时间

- 使用使用适配器服务加载项从 IDOC 节点生成 SendIdoc 操作的架构。

业务流程设计时间

1. 接收 XML 消息。
2. 将操作设置为 SendIdoc 操作。
SendIdoc 消息

如何将 IDOC 发送到 SAP 系统

使用 BizTalk Server 在 SAP 系统上执行操作涉及构建基块以创建 SAP 应用程序中所述的过程任务。 若要将 IDOC 发送到 SAP 系统,这些任务包括:

  1. 创建 BizTalk 项目并为要在 SAP 系统中调用的 IDOC 生成架构。 生成架构时,请确保设置所需的绑定属性,如上表所示。 有关如何设置绑定属性的说明,请参阅 配置 SAP 适配器的绑定属性

  2. 在 BizTalk 项目中创建消息,以便从 SAP 系统发送和接收消息。

  3. 创建业务流程以将 IDOC 发送到 SAP 系统。

  4. 生成和部署 BizTalk 项目。

  5. 通过创建物理发送和接收端口来配置 BizTalk 应用程序。

  6. 启动 BizTalk 应用程序。

    本主题提供有关执行这些任务的说明。

基于本主题的示例

BizTalk 适配器包还提供了基于本主题的示例 IDOCSend。 有关详细信息,请参阅 SAP 适配器的示例

生成架构

本主题演示如何通过在 \IDOC\ORDERS\ORDERS05\ORDERS05 下生成 发送 操作的架构,将 IDOC 发送到 SAP 系统。V3 (620) IDOC。 有关如何为特定 IDOC 生成架构的详细信息 ,请参阅浏览、搜索和获取 SAP 中 IDOC 操作的元数据

定义消息和消息类型

前面生成的架构描述了业务流程中的消息所需的“类型”。 消息通常是一个变量,其类型由相应的架构定义。 必须在第一步中生成的架构链接到 BizTalk 项目的业务流程视图中的消息。

对于本主题,必须创建两条消息:一个用于将 IDOC 发送到 SAP 系统,另一个用于接收响应。

执行以下步骤以创建消息并将其链接到架构:

  1. 打开业务流程视图 BizTalk 项目(如果尚未打开)。 单击“ 视图”,指向“ 其他窗口”,然后单击“ 业务流程视图”。

  2. 业务流程视图中,右键单击“ 消息”,然后单击“ 新建消息”。

  3. 右键单击新创建的消息,然后选择“ 属性窗口”。

  4. Message_1的“属性”窗格中,执行以下操作:

    使用此选项 要执行此操作
    标识符 键入 IDOCSend
    消息类型 在下拉列表中,展开“ 架构”,然后选择“ IDOCSend.SAPBindingSchema3”,其中 IDOCSend 是 BizTalk 项目的名称。 SAPBindingSchema3 是为发送操作生成的架构。
  5. 重复上一步以创建新消息。 在新邮件的“ 属性 ”窗格中,执行以下操作:

    使用此选项 要执行此操作
    标识符 键入 IDOCResponse
    消息类型 在下拉列表中,展开“ 架构”,然后选择“ IDOCSend.SAPBindingSchema4”。

设置业务流程

必须创建 BizTalk 业务流程才能使用 BizTalk Server 将 IDOC 发送到 SAP 系统。 在此业务流程中,你将在定义的接收位置删除平面文件 IDOC。 此文件使用平面文件反汇编程序转换为 XML 请求消息。 SAP 适配器使用此消息并将其传递给 SAP 系统。 包含 GUID 的响应从 SAP 接收,并保存在其他位置。 必须包含发送和接收形状才能将 IDOC 发送到 SAP 系统并接收响应。 还必须包含平面文件反汇编程序才能将平面文件转换为 XML 文件。 要发送到 SAP 系统的典型业务流程和 IDOC 将包含:

  • 发送和接收形状,用于将消息发送到 SAP 系统并接收响应。

  • 单向接收端口,用于接收要发送到 SAP 系统的平面文件 IDOC。

  • 平面文件反汇编程序,用于将平面文件 IDOC 转换为 XML 文件。

  • 双向发送端口,用于将 IDOC 发送到 SAP 系统并接收响应。

  • 用于将响应从 SAP 系统发送到文件夹的单向发送端口。

    示例业务流程如下所示:

    将 IDOC 发送到 SAP 的业务流程

添加消息形状

请确保为每个消息形状指定以下属性。 Shape 列中列出的名称是上述业务流程中显示的消息形状的名称。

形状 形状类型 属性
ReceiveFile 接收 - 将 “名称” 设置为 ReceiveFile
- 将 “激活” 设置为 “True”
SendToLOB 发送 - 将 “名称 ”设置为 SendToLOB
ReceiveResponse 接收 - 将 Name 设置为 ReceiveResponse
- 将 “激活” 设置为 “False”
SendResponse 发送 - 将 Name 设置为 SendResponse

添加端口

请确保为每个逻辑端口指定以下属性。 “端口”列中列出的名称是业务流程中显示的端口名称。

端口 属性
FileIn - 将 标识符 设置为 FileIn
- 将 Type 设置为 FileInType
- 将 通信模式 设置为 单向
- 将 通信方向 设置为 接收
LOBPort - 将 标识符 设置为 LOBPort
- 将 Type 设置为 LOBPortType
- 将 通信模式 设置为 请求-响应
- 将 “通信方向 ”设置为 “发送-接收”
SaveResponse - 将 标识符 设置为 SaveResponse
- 将 Type 设置为 SaveResponseType
- 将 通信模式 设置为 单向
- 将“通信方向”设置为“发送

添加平面文件反汇编程序

必须将平面文件反汇编程序添加到业务流程中,才能将平面文件 IDOC 转换为 XML 格式。

添加平面文件反汇编程序
  1. 右键单击 BizTalk 项目,指向 “添加”,然后选择“ 新建项”。

  2. 在对话框中执行以下操作:

    使用此选项 要执行此操作
    类别 管道文件
    Visual Studio 已安装模板 接收管道
    名称 IDOCReceive
  3. 这会打开管道Designer。 从 BizTalk 管道组件 工具箱中,将 平面文件反汇编程序 管道组件拖到接收管道的 反汇编 阶段。

  4. “管道组件属性” 视图中,为 “文档架构” 属性指定值。 从下拉列表中,确保选择与 IDOC 发送操作对应的架构。

指定操作形状的消息并连接到端口

下表指定要设置的属性及其值,以指定操作形状的消息并将其链接到端口。 Shape 列中列出的名称是上述业务流程中显示的消息形状的名称。

形状 属性
ReceiveFile - 将 Message 设置为 IDOCSend
- 将 操作 设置为 FileIn.SendIDOC.Request
SendToLob - 将 Message 设置为 IDOCSend
- 将 操作 设置为 LOBPort.SendIDOC.Request
ReceiveResponse - 将 Message 设置为 IDOCResponse
- 将 操作 设置为 LOBPort.SendIDOC.Response
SendResponse - 将 Message 设置为 IDOCResponse
- 将 操作 设置为 SaveResponse.SendIDOC.Request

指定这些属性后,消息形状和端口将连接,并且业务流程完成。

现在,必须生成 BizTalk 解决方案并将其部署到BizTalk Server。 有关详细信息,请参阅 生成和运行业务流程

配置 BizTalk 应用程序

部署 BizTalk 项目后,前面创建的业务流程将列在 BizTalk Server 管理控制台的“业务流程”窗格下。 必须使用 BizTalk Server 管理控制台来配置应用程序。 有关配置应用程序的详细信息,请参阅 如何配置应用程序

配置应用程序涉及:

  • 为应用程序选择主机。

  • 将业务流程中创建的端口映射到 BizTalk Server 管理控制台中的物理端口。 对于此业务流程,必须:

    • 定义硬盘上的位置和相应的文件端口,你将在其中删除请求消息。 BizTalk 业务流程将使用请求消息并将其发送到 SAP 系统。

      重要

      对于此端口的 XMLReceive 管道,请确保选择 “IDOCReceive”。 作为 BizTalk 项目的一部分创建了此管道。

    • 在硬盘上定义一个位置和相应的文件端口,BizTalk 业务流程将在其中删除包含来自 SAP 系统的响应的响应消息。

    • 定义物理 WCF-Custom 或 WCF-SAP 发送端口以将消息发送到 SAP 系统。 还必须在发送端口中指定操作。 有关如何创建端口的信息,请参阅 手动配置到 SAP 适配器的物理端口绑定

      注意

      还可以将 AutoConfirmSentIdocs 绑定属性设置为自动将IDOC 提交到 SAP 系统。 如果这样做,则无需显式调用 RfcConfirmTransID 操作来提交IDOC。 有关绑定属性的详细信息,请参阅 了解 mySAP Business Suite 绑定属性的 BizTalk 适配器。 有关 RfcConfirmTransID 操作的详细信息,请参阅 SAP 中 tRFC 的操作

      注意

      使用使用适配器服务 BizTalk 项目外接程序生成架构还会创建一个绑定文件,其中包含有关要为这些端口设置的端口和操作的信息。 可以从 BizTalk 管理控制台导入此绑定文件,以便为出站呼叫创建发送端口 () 或接收 (入站呼叫) 的端口。 有关详细信息,请参阅 使用到 SAP 的端口绑定文件配置物理端口绑定

启动应用程序

必须启动 BizTalk 应用程序,以便将 IDOC 发送到 SAP 系统。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程如何启动应用程序

在此阶段,请确保:

  • 用于接收业务流程请求消息的 FILE 接收端口正在运行。

  • 用于从业务流程接收响应消息的 FILE 发送端口正在运行。

  • 用于将消息发送到 SAP 系统的 WCF-Custom 或 WCF-SAP 发送端口正在运行。

  • 操作的 BizTalk 业务流程正在运行。

执行操作

运行应用程序后,必须删除业务流程的请求消息。 在此示例中,我们将删除定义的 FILE 接收位置的平面文件 IDOC。 删除请求消息后,将执行以下操作:

  • 业务流程选取此平面文件 IDOC 并将其转换为 XML 请求消息,该架构符合前面生成的架构。

  • 如果提供的请求消息包含 GUID,适配器会 (TID) 生成事务 ID 并将其发送到 SAP 系统。

  • 如果提供的请求消息不包含 GUID,适配器将生成 GUID 并使用该 GUID 生成 TID。 然后,TID 将发送到 SAP 系统。

    在这两种情况下,来自 SAP 系统的响应消息都包含 GUID。 例如,ORDERS05 IDOC 上的 Send 操作的响应消息为:

<?xml version="1.0" encoding="utf-8"?>  
<SendResponse xmlns="http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS05//620/Send">  
  <guid>a5afe162-d5cc-47b0-bf6f-3b0bfe06a97e</guid>  
</SendResponse>  

收到 GUID 后,必须调用 RfConfirmTransID 操作来提交 TID。 有关 RfcConfirmTransID 操作的详细信息,请参阅 SAP 中 tRFC 的操作。 可以创建新的业务流程来调用此操作,或修改现有业务流程。 如果要创建新的业务流程,它将类似于 SAP 系统上的任何其他业务流程。 如果要更新现有业务流程,请参阅使用BizTalk Server在 SAP 中调用 tRFC。 如主题中所述,用于调用 tRFC 的业务流程演示了如何从同一业务流程调用 RfcConfirmTransID 操作。

注意

如果将 AutoConfirmSentIdocs 绑定属性设置为 True,则无需调用 RfcConfirmTransID 操作。

可能的异常

有关使用 BizTalk Server 将 IDOC 发送到 SAP 系统时可能遇到的异常的信息,请参阅使用 SAP 适配器处理异常和错误。

最佳实践

部署并配置 BizTalk 项目后,可以将配置设置导出到名为绑定文件的 XML 文件。 生成绑定文件后,可以从文件导入配置设置,这样就无需为同一业务流程创建发送端口、接收端口等。 有关绑定文件的详细信息,请参阅 重用 SAP 适配器绑定

另请参阅

开发 BizTalk 应用程序