使用 BizTalk Server 在 SAP 中调用 tRFC

事务远程函数调用(tRFC)保证在 SAP 系统上只执行一次且仅执行一次 RFC。 可以将 SAP 适配器显示的任何 RFC 调用为 tRFC。 调用 tRFC 类似于调用 RFC(请参阅 使用 BizTalk Server 调用 SAP 中的 RFC),但存在以下差异:

  • SAP 适配器在与 RFC (RFC) 不同的节点 (TRFC) 下显示 tRFC。

  • tRFC 操作包括一个 GUID 参数,该参数由 SAP 适配器映射到用于 tRFC 的 SAP 事务 ID。

  • 调用 tRFC 后,必须调用 RfcConfirmTransID 操作,以确认和提交 SAP 系统上的 tRFC。 此操作直接显示在“使用适配器服务加载项”中的TRFC节点下。

    有关 SAP 适配器如何支持调用 tRFC 的详细信息,请参阅 SAP 中 tRFC 上的作。 有关用于调用 tRFC 的 SOAP 消息结构的详细信息,请参阅 tRFC作的消息架构

如何使用 BizTalk Server 在 SAP 系统中调用 tRFC?

使用 BizTalk Server 在 SAP 系统上执行操作涉及按照构建 SAP 应用程序所需模块所述的过程任务。 若要在 SAP 系统中调用 tRFC,这些任务包括:

  1. 创建 BizTalk 项目并为要在 SAP 系统中调用的 tRFC 生成架构。 还必须为 RfcConfirmTransID 操作生成模式,以在 SAP 系统中提交 TID。

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

  3. 创建业务流程以调用 SAP 系统中的 tRFC,然后提交在 SAP 系统中创建的 TID,以响应 SAP 适配器的 tRFC 调用。

  4. 生成和部署 BizTalk 项目。

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

  6. 启动 BizTalk 应用程序。

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

基于本主题的示例

基于本主题的示例 tRFCClient 也随 BizTalk 适配器包一起提供。 有关详细信息,请参阅 SAP 适配器的示例

生成架构

在本主题中,为了演示如何使用 SAP 适配器调用 tRFC,我们将生成以下对象的架构:

  • BAPI_SALESORDER_CREATEFROMDAT2 tRFC。

  • RfcConfirmTransID操作。 必须使用此操作来提交你在 SAP 系统中创建的 TID。 SAP 系统收到此调用后,它会从系统中删除 TID。

    如需获取有关如何生成架构的详细信息,请参阅SAP 中的浏览、搜索和获取 tRFC 操作的元数据

定义消息和消息类型

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

对于本主题,你必须创建四条消息——一个请求-响应消息集用于调用 tRFC,另一个请求-响应消息集用于调用 RfcConfirmTransID 操作。

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

  1. 如果尚未打开,请打开 BizTalk 项目的编排视图。 单击“视图”,指向“其他窗口”,然后单击“编排视图”

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

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

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

    用这个 要执行的操作
    标识符 键入 请求
    消息类型 从下拉列表中,展开 “架构”,然后选择消息类型。 例如,选择 tRFC_Client.SAPBindingSchema1.BAPI_SALESORDER_CREATEFROMDAT2,其中 tRFC_Client 是 BizTalk 项目的名称。 SAPBindingSchema1 是为 BAPI_SALESORDER_CREATEFROMDAT2生成的架构。
  5. 重复上一步,再创建三条消息。 在新消息的 “属性 ”窗格中,执行以下作。

    将标识符设置为 将消息类型设置为
    响应 tRFC_Client.SAPBindingSchema1.BAPI_SALESORDER_CREATEFROMDAT2Response
    TIDRequest tRFC_Client.SAPBindingSchema3.RfcConfirmTransID
    TIDResponse tRFC_Client.SAPBindingSchema3.RfcConfirmTransIDResponse

设置业务流程

必须创建 BizTalk 业务流程才能使用 BizTalk Server 在 SAP 系统中调用 tRFC。 在此编排中,您将在定义的接收位置放置一个请求消息。 业务编排处理此消息并将其传递到 SAP 系统。 响应从 SAP 接收,并保存在另一个位置。 响应消息包含一个全局唯一标识符(GUID)。 业务流程包括一个构造消息形状,用于从响应中提取GUID,并构造一个符合RfcConfirmTransID操作模式的消息。 调用 RfcConfirmTransID 操作的消息以 GUID 作为参数发送到 SAP 系统 _ 在 SAP 系统中调用 tRFC 操作的典型编排流程,后续跟随 RfcConfirmTransID 操作将包含:

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

  • 构造消息形状,并在此消息形状中使用消息分配形状,为 RfcConfirmTransID 操作构造消息。

  • 用于接收要发送到 SAP 系统以调用 tRFC 的请求消息的单向接收端口。

  • 双向发送端口,用于发送消息以调用 tRFC 并接收响应。

  • 用于发送消息以调用RfcConfirmTransID操作并接收响应的双向发送端口。

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

    示例编排如下所示:

    业务流程编排用于发出 tRFC 客户端调用

添加消息形状

为每个消息形状指定以下属性。 Shape列中列出的名称是前述编排中显示的消息形状名称。

形状 形状类型 性能
ReceiveXml 接收 - 将 名称 设置为 ReceiveXml
- 将 “激活 ”设置为 True
SendToLOB 发送 - 将 名称 设置为 SendToLOB
接收响应 接收 - 将 名称 设置为 ReceiveResponse
- 将 “激活 ”设置为 False
SendResponse 发送 - 将 名称 设置为 SendResponse
SendTIDMsg 发送 - 将 名称 设置为 SendTIDMsg
ReceiveTIDRsp 接收 - 将 名称 设置为 ReceiveTIDRsp
- 将 “激活 ”设置为 False
SendTIDRsp 发送 - 将 名称 设置为 SendTIDRsp

添加构建消息模板

通过 tRFC 调用获得的 SAP 系统响应包含一个 GUID。 若要提交 tRFC 调用,必须将相同的 GUID 传递给 RfcConfirmTransID 操作。 为此,您必须在业务流程中包含一个构造消息形状,并且在其中包含一个消息分配形状。 在这里,构造消息形状的用途是:

  • 从 SAP 系统接收到的 tRFC 调用响应中提取 GUID。

  • 构造符合 RfcConfirmTransID 操作的消息架构的消息。

    对于构造消息形状,必须将 Message Constructed 属性设置为 TIDRequest

    您必须将以下代码摘录添加到“消息分配形状”中:

XmlDoc = new System.Xml.XmlDocument();  
XmlDoc.LoadXml("<RfcConfirmTransID xmlns='http://Microsoft.LobServices.Sap/2007/03/RfcApi/'><TransactionalRfcOperationIdentifier /></RfcConfirmTransID>");  
TIDRequest = XmlDoc;  
TIDRequest.TransactionalRfcOperationIdentifier = xpath(Response,"string(/*[local-name()='BAPI_SALESORDER_CREATEFROMDAT2Response']/*[local-name()='TransactionalRfcOperationIdentifier']/text())");  

若要使用上述代码摘录,必须具备:

  • 在 BizTalk 项目中创建了一个变量 XmlDoc,并将其类型设置为 System.Xml.XmlDocument。 有关创建变量的详细信息,请参阅 在业务流程中使用变量

  • 在 RfcConfirmTransID 操作的架构中提升了 TransactionalRfcOperationIdentifier 属性。 有关提升属性的详细信息,请参阅 “提升属性”。

添加端口

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

港口 性能
FileIn - 将 标识符 设置为 FileIn
- 将 类型 设置为 FileInPortType
- 将 通信模式 设置为 单向
- 将通信方向设置为接收
tRFC_Port - 将 标识符 设置为 tRFC_Port
- 将 类型 设置为 tRFC_PortType
- 将 通信模式 设置为 请求-响应
- 将 通信方向 设置为 发送接收
SavetRFCResponse - 将 标识符 设置为 SavetRFCResponse
- 将 类型 设置为 SavetRFCResponsePortType
- 将 通信模式 设置为 单向
- 将通信方向设置为发送
TID_端口 - 将 标识符 设置为 TID_Port
- 将 类型 设置为 TIDPortType
- 将 通信模式 设置为 请求-响应
- 将 通信方向 设置为 发送接收
SaveTIDResponse - 将 标识符 设置为 SaveTIDResponse
- 将 类型 设置为 SaveTIDResponsePortType
- 将 通信模式 设置为 单向
- 将通信方向设置为发送

为动作形状指定消息并连接至端口

下表指定要设置的属性及其值,以针对动作形状指定消息并将其连接到端口。 “形状”列中列出的名称是上一业务流程中显示的消息形状的名称。

形状 性能
ReceiveXml - 将 消息 设置为 请求
- 将 操作 设置为 FileIn.tRFC.Request
SendToLOB - 将 消息 设置为 请求
- 将 操作 设置为 tRFC_Port.tRFC.Request
接收响应 - 将 消息 设置为 响应
- 将 操作 设置为 tRFC_Port.tRFC.Response
SendResponse - 将 消息 设置为 响应
- 将 操作 设置为 SavetRFCResponse.tRFC.Request
发送TID消息 - 将 消息 设置为 TIDRequest
- 将 操作 设置为 TID_Port.TID.Request
ReceiveTIDRsp - 将 消息 设置为 TIDResponse
- 将 操作 设置为 TID_Port.TID.Response
SendTIDRsp - 将 消息 设置为 TIDResponse
- 将 操作 设置为 SaveTIDResponse.TID.Request

指定这些属性后,消息形状符和端口被连接,您的编排已完成。

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

配置 BizTalk 应用程序

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

配置应用程序涉及:

  • 为应用程序选择主机。

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

    • 请在硬盘上指定一个位置及其对应的文件端口,以便放置请求消息。 BizTalk 业务流程将使用请求消息将其发送到 SAP 系统。

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

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

      注释

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

启动应用程序

必须启动 BizTalk 应用程序才能在 SAP 系统中调用 tRFC。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程如何启动应用程序

在此阶段,请确保:

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

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

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

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

执行操作

运行应用程序后,必须投递请求消息给流程编排。 请参阅 tRFC 操作的消息架构,了解在 SAP 系统中调用 tRFC 的请求消息架构。 例如,作为 tRFC 调用BAPI_SALEASORDER_CREATEFROMDAT2的请求消息为:

<BAPI_SALESORDER_CREATEFROMDAT2 xmlns="http://Microsoft.LobServices.Sap/2007/03/Trfc/">  
  <ORDER_HEADER_IN>  
    <DOC_TYPE xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">TA</DOC_TYPE>  
    <SALES_ORG xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">1000</SALES_ORG>  
    <DISTR_CHAN xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">10</DISTR_CHAN>  
    <DIVISION xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">00</DIVISION>  
    <SALES_OFF xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">1000</SALES_OFF>  
    <REQ_DATE_H xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">2006-09-01T23:50:00</REQ_DATE_H>  
    <PURCH_DATE xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">2006-08-25T23:50:00</PURCH_DATE>  
    <PURCH_NO_C xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">Cust PO</PURCH_NO_C>  
    <CURRENCY xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">EUR</CURRENCY>  
  </ORDER_HEADER_IN>  
  <ORDER_ITEMS_IN>  
    <BAPISDITM xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">  
      <MATERIAL>P-109</MATERIAL>  
      <PLANT>1000</PLANT>  
      <TARGET_QU>ST</TARGET_QU>  
    </BAPISDITM>  
  </ORDER_ITEMS_IN>  
  <ORDER_PARTNERS>  
    <BAPIPARNR xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">  
      <PARTN_ROLE>AG</PARTN_ROLE>  
      <PARTN_NUMB>0000001390</PARTN_NUMB>  
    </BAPIPARNR>  
  </ORDER_PARTNERS>  
  <RETURN/>  
  <TransactionalRfcOperationIdentifier>def689b1-b514-4627-a861-d6d7f51c84e3</TransactionalRfcOperationIdentifier>  
</BAPI_SALESORDER_CREATEFROMDAT2>  

编排流程获取消息,将其传递给 SAP 系统,并从 SAP 系统接收响应。 响应消息保存在业务流程中指定的其他文件位置。 来自 SAP 系统的响应包含 GUID。 然后,业务流程从响应生成另一个请求消息,并将其传递给 SAP 系统以执行 RfcConfirmTransID。 从 SAP 系统收到 RfcConfirmTransID操作的响应后,它会被复制到文件目录。 操作成功执行后,总之:

  • 为了调用 tRFC,从 SAP 返回的响应消息被复制到文件位置。 这一 GUID 与发送到 SAP 系统的 GUID 相同。 以 tRFC 方式调用BAPI_SALESORDER_CREATEFROMDAT2的响应消息为:

    <?xml version="1.0" encoding="utf-8"?>  
    <BAPI_SALESORDER_CREATEFROMDAT2Response xmlns="http://Microsoft.LobServices.Sap/2007/03/Trfc/">  
      <TransactionalRfcOperationIdentifier>def689b1-b514-4627-a861-d6d7f51c84e3</TransactionalRfcOperationIdentifier>  
    </BAPI_SALESORDER_CREATEFROMDAT2Response>  
    
  • RfcConfirmTransID 的响应消息将复制到同一位置。 这是一个空响应。 RfcConfirmTransID 的响应消息为:

    <?xml version="1.0" encoding="utf-8"?>  
    <RfcConfirmTransIDResponse xmlns="http://Microsoft.LobServices.Sap/2007/03/RfcApi/"></RfcConfirmTransIDResponse>  
    

注释

可以使用 SAP 适配器程序集公开的 ConvertGuidToTid() 公共方法来检索在 SAP 系统中与 GUID 映射的 TID。 有关详细信息,请参阅 特殊行动

可能的异常

有关在使用 BizTalk Server 在 SAP 系统中调用 tRFC 时可能会遇到的异常的信息,请参阅 使用 SAP 适配器的异常和错误处理

最佳做法

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

另请参阅

开发 BizTalk 应用程序