使用 BizTalk Server 在 SAP 中运行 BAPI 事务

SAP 适配器使适配器客户端能够使用 BizTalk Server 在 SAP 系统上执行事务。 在为事务创建业务流程之前,必须先了解将执行事务的基本方案。 在典型的事务方案中,将具有多个操作 ((例如调用 BAPI) )的请求消息发送到 SAP 系统。 这称为“操作消息”。业务流程必须从请求消息中提取每个操作消息,并将单个操作消息发送到 SAP 系统。 业务流程使用相同的连接一个接一个地发送它们。 业务流程使用通过 BizTalk 映射的 XML 转换从“操作消息”中提取各个消息。

执行操作后,业务流程必须分别通过发送BAPI_TRANSACTION_COMMIT或BAPI_TRANSACTION_ROLLBACK消息来提交或中止事务。 这些消息称为“事务消息”。

适配器如何通过BizTalk Server启用事务?

若要使用 BizTalk Server 在 SAP 系统上启用事务,SAP 适配器:

  • 提供消息上下文属性 OPEN、REUSE、CLOSE 和 ABORT。

  • 使用BAPI_TRANSACTION_COMMIT和BAPI_TRANSACTION_ROLLBACK提交或中止操作。 这些由 SAP 系统公开。

    下表列出了有关将属性与BAPI_TRANSACTION_COMMIT或BAPI_TRANSACTION_ROLLBACK配合使用的一些准则:

Message OPEN 重用 CLOSE ABORT
第一条消息 (操作消息)
后续消息 (操作消息)
BAPI_TRANSACTION_COMMIT (事务消息)
BAPI_TRANSACTION_ROLLBACK (事务消息)

在表中,“是”表示要用于消息的消息上下文属性。 同样,“否”表示不与消息一起使用的消息上下文属性。

总结表:

  • 第一条消息必须始终是操作消息,并且只能使用 OPEN 属性。

  • 后续操作消息必须使用 REUSE 属性。

  • 与提交事务BAPI_TRANSACTION_COMMIT对应的事务消息必须使用 CLOSE 属性。

  • 对应于中止事务BAPI_TRANSACTION_ROLLBACK的事务消息可以使用 CLOSE 或 ABORT 属性。 如果使用 ABORT,理想情况下,消息必须位于业务流程异常块中。

  • 如果业务流程中有多个发送端口,适配器会自动分隔从每个端口接收的消息的事务。 也就是说,事务不能跨端口。

  • SAP 事务中的消息不支持消息重试。 因此,用户应将消息重试尝试设置为零。

  • 适配器可能会为上表中标记为“否”的组合生成不需要的结果。 应使用标记为“是”的组合。

  • 发送到没有消息上下文属性的适配器的消息将正常执行,而不会绑定到当前事务上下文。

  • 理想情况下,BAPI_TRANSACTION_COMMIT或BAPI_TRANSACTION_ROLLBACK应该是业务流程中当前事务上下文中的最后一条消息。

以下部分提供了有关如何使用 SAP 适配器在 SAP 中执行事务的说明。

如何在 SAP 系统上执行事务?

使用 SAP 适配器和 BizTalk Server 在 SAP 系统上执行操作涉及构建基块以创建 SAP 应用程序中所述的过程性任务。 若要在 SAP 系统上执行事务,这些任务包括:

  1. 创建 BizTalk 项目并为要对其执行事务的 RFC 生成架构。 此外,必须为BAPI_TRANSACTION_COMMIT和BAPI_TRANSACTION_ROLLBACK RFC 生成架构。

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

  3. 创建从请求消息中提取单个“操作消息”并将其发送到 SAP 系统的业务流程。 业务流程还根据请求消息决定是提交还是回滚事务。

  4. 生成和部署 BizTalk 项目。

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

  6. 启动 BizTalk 应用程序。

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

基于本主题的示例

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

生成架构

若要演示如何在 SAP 系统上执行事务,需要以下架构:

  • 用于在 SAP 系统上执行操作的“操作消息”。 发送到适配器的请求消息必须符合此架构。 这可以是任何用户特定的架构,其中包含任意数量的操作节点。 在本主题中,使用架构 MultipleOrders.xsd。 该架构还作为 BizTalk 适配器包示例附带的事务示例的一部分提供。 有关详细信息,请参阅 架构示例

  • 用于在 SAP 系统上执行操作,例如调用 RFC。 执行操作的请求消息必须符合此架构。 必须使用使用适配器服务 BizTalk 项目外接程序生成此架构。 在本主题中,将调用 BAPI_SALESORDER_CREATEFROMDAT2 RFC。 有关为 RFC 生成架构的信息,请参阅 在 SAP 中浏览、搜索和获取 RFC 操作的元数据

  • 用于中止或提交事务。 提交或中止事务的请求必须符合此架构。 SAP 适配器使用BAPI_TRANSACTION_COMMIT和BAPI_TRANSACTION_ROLLBACK RFC 分别提交和回滚操作。 必须使用使用适配器服务加载项为这些 RFC 生成架构。

注意

必须确保所有必需的架构都已添加到 BizTalk 项目。

重要

必须将对 SAP 适配器的 BizTalk 属性架构的引用添加到 BizTalk 项目。 架构文件 Microsoft.Adapters.SAP.BiztalkPropertySchema.dll由 BizTalk 适配器包安装程序安装,通常位于 <安装驱动器>:\Program Files\Microsoft BizTalk Adapter Pack\bin 中。

定义消息和消息类型

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

在创建消息之前,必须确定请求消息 (MultipleOrders.xsd 类型的“操作”节点数) 。 对于此示例,假设请求消息有两个操作消息来调用BAPI_SALESORDER_CREATEFROMDAT2 RFC。 因此,必须创建一个映射到为此 RFC 生成的架构的请求-响应消息集。

必须在 BizTalk 项目中创建以下消息。

  • 将发送到业务流程的请求消息的消息 SendtoAdapter。 此消息必须映射到输入消息 MultipleOrders.xsd 的架构。

  • 用于发送到 SAP 系统的第一个操作的消息 BAPIMessage。 还必须为第一个操作的响应创建响应消息 BAPIResponse。 请求和响应消息必须映射到为BAPI_SALESORDER_CREATEFROMDAT2 RFC 生成的架构。

  • 提交操作的消息 BAPICommitMessage。 还必须为相应的响应消息创建响应消息 BAPICommitResponse。 请求和响应消息必须映射到 BAPI_TRANSACTION_COMMIT RFC 的架构。

  • 回滚操作的消息 BAPIRollbackMessage。 还必须为相应的响应消息创建响应消息 BAPIRollbackResponse。 请求和响应消息必须映射到 BAPI_TRANSACTION_ROLLBACK RFC 的架构。

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

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

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

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

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

    使用此选项 要执行此操作
    标识符 键入 SendToAdapter
    消息类型 从下拉列表中,展开“ 架构”,然后选择“ SAPTransaction.MultipleOrders”,其中 “SAPTransaction ”是 BizTalk 项目的名称。 MultipleOrders 是请求消息的架构。
  5. 重复上一步,再创建六条消息。 在新消息的“ 属性 ”窗格中,执行以下操作。

    将“标识符”设置为 将“消息类型”设置为
    BAPIMessage SAPTransaction.SAPBindingSchema.BAPI_SALESORDER_CREATEFROMDAT2
    BAPIResponse SAPTransaction.SAPBindingSchema.BAPI_SALESORDER_CREATEFROMDAT2Response
    BAPICommitMessage SAPTransaction.SAPBindingSchema.BAPI_TRANSACTION_COMMIT
    BAPICommitResponse SAPTransaction.SAPBindingSchema.BAPI_TRANSACTION_COMMITResponse
    BAPIRollbackMessage SAPTransaction.SAPBindingSchema.BAPI_TRANSACTION_ROLLBACK
    BAPIRollbackResponse SAPTransaction.SAPBindingSchema.BAPI_TRANSACTION_ROLLBACKResponse

设置业务流程

必须创建 BizTalk 业务流程才能使用 BizTalk Server 在 SAP 系统中执行事务。 在此业务流程中,你将在定义的接收位置删除请求消息。 SAP 适配器使用消息并将其传递给 SAP 系统。 SAP 系统的响应将保存到另一个位置。

创建业务流程时要考虑的另一个注意事项是:

  • 将请求消息的架构映射到BAPI_SALESORDER_CREATEFROMDAT2 RFC 的架构。

  • 将请求消息的架构映射到BAPI_TRANSACTION_COMMIT和BAPI_TRANSACTION_ROLLBACK RFC 的架构。

    可以通过 BizTalk 映射使用 XML 转换来映射架构。 为此,请在业务流程中包含转换形状。

    最后,根据请求消息是否具有提交或中止事务的信息,业务流程必须决定要发送到 SAP 系统的相应消息。 若要实现此目的,请在业务流程中包含“决定”形状。

    有关业务流程中包含的不同形状的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的业务流程Designer UI。

    SAP 事务的示例业务流程如下所示。

    用于在 SAP 中执行事务的业务流程

添加消息形状

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

形状 形状类型 属性
ReceiveInputXML 接收 - 将 Name 设置为 ReceiveInputXML

- 将 “激活” 设置为 “True”
SendToLOB 发送 - 将 “名称 ”设置为 SendToLOB
ReceiveResponse 接收 - 将 Name 设置为 ReceiveResponse

- 将 “激活” 设置为 “False”
SendResponse 发送 - 将 Name 设置为 SendResponse

由于请求消息包含两条插入消息,因此必须创建另一组发送和接收形状,以便将消息发送到 SAP 并接收响应。 但是,由于插入消息可能已提交或回滚,因此必须在决策块中创建第二组形状。 必须创建一组形状用于提交,另一组形状用于回滚。

注意

可以通过从 BizTalk 业务流程工具箱拖放“决定”形状来添加决策块。

用于提交的消息形状

下表列出了业务流程的“提交路径”的形状。 在这里,无需为请求消息创建接收消息。 请求消息将从上一个消息形状传递。

形状 形状类型 属性
SendBAPICommit 发送 - 将 “名称 ”设置为 SendBAPICommit
ReceiveCommitResponse 接收 - 将 Name 设置为 ReceiveCommitResponse

- 将 “激活” 设置为 “False”
SendResponse2 发送 - 将 Name 设置为 SendResponse2

中止的消息形状

下表列出了业务流程的“回滚路径”的形状。

形状 形状类型 属性
SendBAPIRollback 发送 - 将 “名称” 设置为 SendBAPIRollback
ReceiveRollbackResponse 接收 - 将 Name 设置为 ReceiveRollbackResponse

- 将 “激活” 设置为 “False”
SendResponse3 发送 - 将 “名称” 设置为 SendResponse3

设置规则表达式

通过添加“决定”形状,在决策块中包含提交和中止操作的消息形状。 若要指定业务流程做出决策的条件,必须在规则形状上指定一个表达式,该表达式将基于该表达式提交或回滚事务。 例如,必须为规则形状指定以下表达式:

SendToAdapter.isCommit == true

其中,SendToAdapter 是为请求消息的架构创建的消息。 因此,在请求消息中,如果 isCommit 标记设置为 True,业务流程将采用“提交”路由。 否则,业务流程采用“回滚”路由。

为了能够在表达式编辑器中指定此条件,必须在发送到适配器的请求消息的消息架构中升级 isCommit 属性。 对于本主题,要使用的输入架构为 MultipleOrders.xsd。 必须提升 isCommit 此架构中的 属性。 有关提升属性的详细信息,请参阅 提升属性

添加构造消息形状

如前所述,发送到适配器的请求消息包含两条插入消息,然后包含一条提交或中止消息。 必须添加“构造消息”形状,并在该形状中添加“转换”形状,以提取要发送到 SAP 系统的单个操作消息。 还必须添加消息分配形状,以设置消息上下文属性以启用事务。

第一个构造消息形状

假设第一个构造消息形状名为“ReceiveXML”。对于此形状,将 Messages Constructed 属性指定为“BAPIMessage”。 双击“转换”形状以打开“ 转换配置 ”对话框。 在对话框中:

  • 选择创建新地图。

  • 在左窗格中,选择“ ”,然后从 “变量名称 ”下拉列表中选择“ SendToAdapter”。

  • 在左窗格中,选择“ 目标 ”,然后从 “变量名称 ”下拉列表中选择“ BAPI”“消息”。

  • 单击“ 确定” 启动映射器。 将请求消息的架构映射到BAPI_SALESORDER_CREATEFROMDAT2的架构。 可以使用 “索引” functoid 在源架构和目标架构之间创建映射。 使用“索引”functoid,可以为一系列记录中的特定记录选择信息。

    下图显示了使用 Index functoid 映射的架构。

    使用 Index functoid 映射的架构

    有关使用“转换配置”对话框的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的转换配置对话框

    有关使用 Index functoid 的详细信息,请参阅 Index Functoid

    映射架构后,可以使用映射文件的属性页测试映射。 有关详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的“映射文件>属性页”对话框、“测试映射”选项卡。<

    在“消息分配”形状中,指定消息上下文属性以启动事务。 例如,第一条消息的消息上下文属性可以是:

    BAPIMessage(Microsoft.Adapters.SAP.BiztalkPropertySchema.ConnectionState) = "OPEN";

提交构造消息形状

假设提交操作的“构造消息”形状称为“CommitMessage”。对于此形状,将 Messages Constructed 属性指定为“BAPICommitMessage”。 双击“转换”形状以打开“ 转换配置 ”对话框。 在对话框中:

  • 选择创建新地图。

  • 在左窗格中,选择“ ”,然后从 “变量名称 ”下拉列表中选择“ SendToAdapter”。

  • 在左窗格中,选择“ 目标 ”,然后从 “变量名称 ”下拉列表中选择“ BAPICommitMessage”。

  • 单击“确定”启动映射器。 将请求消息的架构映射到 BAPI_TRANSACTION_COMMIT 架构。 无需为此映射包含索引 functoid,因为BAPI_TRANSACTION_COMMIT节点不包含记录层次结构。

    在“消息分配”形状中,指定要提交事务的消息上下文属性。 例如,第一条消息的消息上下文属性可以是:

    BAPICommitMessage(Microsoft.Adapters.SAP.BiztalkPropertySchema.ConnectionState) = "CLOSE";

回滚构造消息形状

假设回滚操作的“构造消息”形状名为“RollbackMessage”。对于此形状,将 Messages Constructed 属性指定为“BAPIRollbackMessage”。 双击“转换”形状以打开“ 转换配置 ”对话框。 在对话框中:

  • 选择创建新地图。

  • 在左窗格中,选择“ ”,然后从 “变量名称 ”下拉列表中选择“ SendToAdapter”。

  • 在左窗格中,选择“ 目标 ”,然后从 “变量名称 ”下拉列表中选择“ BAPIRollbackMessage”。

  • 单击“确定”启动映射器。 将请求消息的架构映射到 BAPI_TRANSACTION_ROLLBACK 架构。 无需为此映射包含索引 functoid,因为BAPI_TRANSACTION_ROLLBACK节点不包含记录层次结构。

    在“消息分配”形状中,指定要回滚事务的消息上下文属性。 例如,第一条消息的消息上下文属性可以是:

    BAPIRollbackMessage(Microsoft.Adapters.SAP.BiztalkPropertySchema.ConnectionState) = "ABORT";

重要

在典型方案中,与具有 ABORT 上下文属性BAPI_TRANSACTION_ROLLBACK对应的消息必须在异常块中使用。

添加端口

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

对于此业务流程,将创建三个端口。 第一个端口从指定文件夹中选取请求消息。 第二个端口将消息发送到 SAP 系统并接收响应。 第三个端口会将响应保存到另一个文件夹。 因此:

  • 第一个端口仅接收单个架构的消息,即 MultipleOrders.xsd。

  • 第二个端口发送和接收BAPI_SALESORDER_CREATEFROMDAT2 RFC 架构的消息。 此外,将使用相同的端口来提交或回滚事务。 因此,此端口还接收BAPI_TRANSACTION_COMMIT和BAPI_TRANSACTION_ROLLBACK RFC 的架构消息。 为此,请在此端口上创建三个不同的操作,每个操作对应于特定的消息架构。

  • 与第二个端口类似,此端口还将接收具有三种不同架构的消息。 因此,有必要在此端口上创建三个不同的操作。

端口 属性
FileIn - 将 标识符 设置为 FileIn

- 将 Type 设置为 FileInType

- 将 通信模式 设置为 单向

- 将 通信方向 设置为 接收
LOBPort - 将 标识符 设置为 LOBPort

- 将 Type 设置为 LOBPortType

- 将 通信模式 设置为 请求-响应

- 将 通信方向 设置为 “发送-接收”

- 创建 BAPIMessage 操作。

- 创建 操作 CommitMessage。 此操作将用于发送提交消息。

- 创建 RollbackMessage 操作。 此操作将用于发送回滚消息。
SaveResponse - 将 标识符 设置为 SaveResponse

- 将 Type 设置为 SaveResponseType

- 将 通信模式 设置为 单向

- 将 “通信方向 ”设置为 “发送”。

- 创建 BAPIMessage 操作。

- 创建 操作 CommitMessage。 此操作将用于保存提交消息的响应。

- 创建 RollbackMessage 操作。 此操作将用于保存回滚消息的响应。

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

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

形状 属性
ReceiveInputXML - 将 消息 设置为 SendToAdapter

- 将 操作 设置为 FileIn.Transaction.Request
SendToLOB - 将 消息 设置为 BAPIMessage

- 将 操作 设置为 LOBPort.BAPIMessage.Request
ReceiveResponse - 将 消息 设置为 BAPIResponse

- 将 操作 设置为 LOBPort.BAPIMessage.Response
SendResponse - 将 消息 设置为 BAPIResponse

- 将 操作 设置为 SaveResponse.BAPIMessage.Request
SendBAPICommit - 将 消息 设置为 BAPICommitMessage

- 将 操作 设置为 LOBPort.CommitMessage.Request
ReceiveCommitResponse - 将 消息 设置为 BAPICommitResponse

- 将 操作 设置为 LOBPort.CommitMessage.Response
SendResponse2 - 将 消息 设置为 BAPICommitResponse

- 将 操作 设置为 SaveResponse.CommitMessage.Request
SendBAPIRollback - 将 消息 设置为 BAPIRollbackMessage

- 将 操作 设置为 LOBPort.RollbackMessage.Request
ReceiveRollbackResponse - 将 消息 设置为 BAPIRollbackResponse

- 将 操作 设置为 LOBPort.RollbackMessage.Response
SendResponse3 - 将 消息 设置为 BAPIRollbackResponse

- 将 操作 设置为 SaveResponse.RollbackMessage.Request

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

处理异常

在复杂的业务流程(如执行 BAPI 事务的业务流程)中,请务必跟踪业务流程的状态,在错误发生时报告错误,以便在出现问题时解决问题。 BizTalk 业务流程提供了用于处理错误、维护业务流程状态以及通过事务、补偿和异常处理修复问题的工具。

作为事务和异常处理的框架,业务流程Designer提供了“作用域”形状。 作用域可以具有事务类型、补偿和任意数目的异常处理程序。 一个作用域包含一个或多个块。 它有一个正文,并且可以选择性地将任意数量的异常处理块追加到其中。 对于 BAPI 事务,整个业务流程 (见前面的图,) 可以包含在作用域中。

若要捕获异常,必须将 Catch 异常 块添加到业务流程。 Catch 异常块附加到业务流程Designer中作用域形状的末尾。 对于 BAPI 事务,必须将“ABORT”例程添加到 Catch Exception 块,也就是说,必须将以下内容添加到“ABORT”例程:

  • 构造消息形状,由转换 (从输入消息) 中提取请求消息和消息分配形状组成, (设置上下文属性)

  • 发送和接收形状。

    BizTalk 适配器包随附的 BizTalk Server (SAPTransaction) SAP 事务示例也演示了异常处理。 有关示例的详细信息,请参阅 SAP 适配器的示例

    有关如何使用BizTalk Server处理异常的详细信息,请参阅使用事务和处理异常

将 BizTalk 属性架构添加到 BizTalk

在 BizTalk 项目中,为 SAP 适配器添加了对 BizTalk 属性架构的程序集引用。 必须添加与 BizTalk 应用程序中的资源相同的程序集,即将部署 BizTalk 项目的应用程序。 架构文件 Microsoft.Adapters.SAP.BiztalkPropertySchema.dll通常由 BizTalk 适配器包安装程序安装在安装驱动器>:\Program Files\Microsoft BizTalk Adapter Pack\bin 下<。 如果没有此资源,将无法部署项目。

将程序集添加为 BizTalk 中的资源

  1. 启动BizTalk Server管理控制台。

  2. 在控制台树中,依次展开 “BizTalk 组”、“ 应用程序”和要向其添加 BizTalk 程序集的应用程序。

  3. 右键单击“ 资源”,指向“ 添加 ”,然后单击“ BizTalk 程序集”。

  4. 在“ 添加资源 ”对话框中,单击“ 添加”,导航到包含 BizTalk 程序集文件的文件夹,选择 BizTalk 程序集文件,然后单击“ 打开”。

  5. “选项”中,指定用于将 BizTalk 程序集安装到 GAC 的选项,然后单击“ 确定”。

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

配置 BizTalk 应用程序

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

配置应用程序涉及:

  • 为应用程序选择主机。

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

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

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

    • 定义物理 WCF-Custom 或 WCF-SAP 发送端口以将消息发送到 SAP 系统。 有关如何创建端口的信息,请参阅 手动配置到 SAP 适配器的物理端口绑定。 由于发送端口发送和接收符合多个架构的消息并执行两个操作,因此必须为这两个操作设置动态操作。 有关操作的详细信息,请参阅 为 SAP 系统配置 SOAP 操作。 在创建 WCF-Custom 或 WCF-SAP 发送端口以执行事务时,请确保遵循以下关键注意事项。

      设置以下项 此值
      操作 发送端口发送和接收多个操作的消息。 因此,必须为每个操作设置发送端口上的操作。

      <BtsActionMapping> <Operation Name="BAPIMessage" Action="http://Microsoft.LobServices.Sap/2007/03/Rfc/BAPI_SALESORDER_CREATEFROMDAT2" /> <Operation Name="CommitMessage" Action="http://Microsoft.LobServices.Sap/2007/03/Rfc/BAPI_TRANSACTION_COMMIT" /> <Operation Name="RollbackMessage" Action="http://Microsoft.LobServices.Sap/2007/03/Rfc/BAPI_TRANSACTION_ROLLBACK" /> </BtsActionMapping>
      EnableBizTalkCompatibilityMode 将此绑定属性设置为 True
      EnableConnectionPooling 在执行任何事务之前,将此绑定属性设置为 False 。 在适配器和 BizTalk 之间设置的通道意外终止的情况下,相应的连接将添加到连接池。 当打开另一个通道,并且新通道选取相同的连接对象时,当通过新通道提交事务时,也会提交旧连接对象上的未提交的事务。 若要避免这种情况,必须在执行事务时禁用连接池。

      注意

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

      重要

      可以在 WCF-Custom 或 WCF-SAP 发送端口上配置备份传输,使你能够在主传输无法正常工作时将消息发送到另一个 SAP 系统。 但是,对于在 SAP 系统上执行事务,基于 WCF 的 SAP 适配器不支持指定指向另一个 SAP 服务器的备份传输。

启动应用程序

必须启动 BizTalk 应用程序,以在 SAP 系统中执行事务。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程如何启动应用程序

在此阶段,请确保:

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

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

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

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

执行操作

运行应用程序后,必须在预定义的位置删除业务流程的请求消息。 请求消息必须符合特定架构,例如 MultipleOrders.xsd 架构。 例如,在 SAP 系统中创建销售订单,然后提交操作的请求消息为:

<ns0:Orders xmlns:ns0="http://BAPISend.MultipleOrders">  
  <Order>  
      <ORDER_HEADER_IN>  
        <DOC_TYPE>TA</DOC_TYPE>  
        <SALES_ORG>1000</SALES_ORG>  
        <DISTR_CHAN>10</DISTR_CHAN>  
        <DIVISION>00</DIVISION>  
        <SALES_OFF>1000</SALES_OFF>  
        <REQ_DATE_H>20060901</REQ_DATE_H>  
        <PURCH_DATE>20060901</PURCH_DATE>  
        <PURCH_NO_C>Cust A</PURCH_NO_C>  
        <CURRENCY>EUR</CURRENCY>  
      </ORDER_HEADER_IN>  
      <ORDER_ITEMS_IN>  
          <MATERIAL>P-109</MATERIAL>  
          <PLANT>1000</PLANT>  
          <TARGET_QU>ST</TARGET_QU>  
      </ORDER_ITEMS_IN>  
      <ORDER_PARTNERS>  
          <PARTN_ROLE>AG</PARTN_ROLE>  
          <PARTN_NUMB>0000000257</PARTN_NUMB>  
      </ORDER_PARTNERS>  
    <RETURN></RETURN>  
  </Order>  
  <isCommit>true</isCommit>  
  <BAPI_TRANSACTION_COMMIT>  
  </BAPI_TRANSACTION_COMMIT>  
</ns0:Orders>  

业务流程使用消息并将其发送到 SAP 系统。 SAP 系统的响应保存在定义为业务流程一部分的其他文件位置。 对于上述请求消息,你会收到两条响应消息:一条用于调用 BAPI_SALESORDER_CREATEFROMDAT2 RFC,另一条用于使用 BAPI_TRANSACTION_COMMIT 的提交操作。

BAPI_SALESORDER_CREATEFROMDAT2的响应为:

<?xml version="1.0" encoding="utf-8" ?>   
<BAPI_SALESORDER_CREATEFROMDAT2Response xmlns="http://Microsoft.LobServices.Sap/2007/03/Rfc/">  
  <SALESDOCUMENT />   
  <ORDER_ITEMS_IN>  
    <BAPISDITM xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">  
      <ITM_NUMBER>0</ITM_NUMBER>   
      <HG_LV_ITEM>0</HG_LV_ITEM>   
      <PO_ITM_NO />   
      ......  
    </BAPISDITM>  
  </ORDER_ITEMS_IN>  
  <ORDER_PARTNERS>  
    <BAPIPARNR xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">  
      <PARTN_ROLE>AG</PARTN_ROLE>   
      <PARTN_NUMB>0000000257</PARTN_NUMB>   
      <ITM_NUMBER>0</ITM_NUMBER>   
      ......   
    </BAPIPARNR>  
  </ORDER_PARTNERS>  
</BAPI_SALESORDER_CREATEFROMDAT2Response>  

BAPI_TRANSACTION_COMMIT的响应为:

<?xml version="1.0" encoding="utf-8" ?>   
<BAPI_TRANSACTION_COMMITResponse xmlns="http://Microsoft.LobServices.Sap/2007/03/Rfc/">  
  <RETURN>  
    <TYPE xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <ID xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <NUMBER xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">0</NUMBER>   
    <MESSAGE xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <LOG_NO xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <LOG_MSG_NO xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">0</LOG_MSG_NO>   
    <MESSAGE_V1 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <MESSAGE_V2 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <MESSAGE_V3 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <MESSAGE_V4 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <PARAMETER xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <ROW xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">0</ROW>   
    <FIELD xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <SYSTEM xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
  </RETURN>  
</BAPI_TRANSACTION_COMMITResponse>  

注意

如果请求消息调用了BAPI_TRANSACTION_ROLLBACK RFC,则第二个响应将针对BAPI_TRANSACTION_ROLLBACK。

可能的异常

有关使用 BizTalk Server 在 SAP 系统上执行事务时可能遇到的异常的信息,请参阅使用 SAP 适配器的异常和错误处理

最佳实践

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

另请参阅

开发 BizTalk 应用程序