使用 BizTalk Server 从 SAP 接收 IDOC

接收 IDOC 涉及 SAP 适配器充当 RFC 服务器,以接收来自 SAP 的特殊 RFC 调用。 SAP 适配器可以接收充当 RFC 服务器或 tRFC 服务器的 IDOC。 有关使用适配器作为 tRFC 服务器接收 IDOC 的详细信息,请参阅使用 BizTalk Server 在事务上下文中从 SAP 接收 IDOC

SAP 适配器显示两个不同的操作来接收 IOC:

  • 接收 操作使适配器能够接收具有强类型架构的 IDOC。

  • ReceiveIdoc 操作使适配器能够接收具有弱类型架构的 IDOC。 此操作接收 IDOC 作为 idocData> 标记下的 XML 消息中的<字符串。

    在适配器端,可以为 ReceiveIDocFormat 绑定属性指定一个值,以指定适配器将接收的 IDOC 格式。

  • Typed 指定适配器将接收具有强类型架构的 IDOC。 这会生成 XML IDOC。

  • 字符串 指定适配器将接收具有弱类型架构的 IDOC。 这会生成一条带有 idocData> 标记的 <XML 消息。

  • Rfc 指定适配器将接收任何格式的 IDOC。

    对于接收 IDOC,SAP 适配器还支持适配器客户端可在业务流程中使用的一组消息上下文属性。 有关属性列表,请参阅 用于接收 IOC 的消息上下文属性

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

用于从 SAP 系统接收 IDOC 的 BizTalk 方案

下表提供了用于从 SAP 系统接收 IDOC 的关键 BizTalk 方案:

从 SAP 输入到适配器 BizTalk 处理 输出
通过 tRFC 接口) 进行 IDOC ( 元数据设计时间

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

业务流程设计时

1. 接收 XML IDOC。
2. 使用平面文件汇编程序将 XML IDOC 转换为平面文件。
平面文件 IDOC
通过 tRFC 接口) 进行 IDOC ( 元数据设计时间

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

业务流程设计时

- 接收 XML IDOC。
XML IDOC
通过 tRFC 接口) 进行 IDOC ( 元数据设计时间

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

业务流程设计时

1. 在 idocData> 标记中接收带有平面文件 IDOC 的 <XML 消息。
2. 在接收端口配置中使用 WCF 适配器的 XPath 支持从 XML 消息中提取平面文件 IDoc。 例如:
/*[local-name()='ReceiveIdoc']/*[local-name()='idocData']
3. 使用平面文件反汇编程序将平面文件 IDOC 转换为 XML IDOC。

重要 此方法可用于使用基于 WCF 的新 SAP 适配器接收 IDOC,并直接将其应用于编写为从现有 BizTalk SAP 适配器接收IDOC的现有 BizTalk 项目中。 这也是接收版本号小于 SYSREL) 版本号 (IDOC 的建议方法。
XML IDOC
通过 tRFC 接口) 进行 IDOC ( 元数据设计时间

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

业务流程设计时

- 接收 XML 消息,其中 IDOC 表示为 idocData> 标记中的<字符串。
XML 消息中的平面文件 IDOC

如何从 SAP 系统接收 IDOC?

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

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

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

  3. 创建业务流程以从 SAP 系统接收 IDOC。

  4. 生成并部署 BizTalk 项目。

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

  6. 启动 BizTalk 应用程序。

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

基于本主题的示例

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

生成架构

必须为ORDERS03的 Receive 操作生成架构。/IDOC/ORDERS/ORDERS03 节点下的 V3.620 IDOC。 有关如何为特定 IDOC 生成架构的说明 ,请参阅浏览、搜索和获取 SAP 中 IDOC 操作的元数据 。 生成架构时,可能还需要设置以下属性:

  • GenerateFlatFileCompatibleIDoc – 生成 <appinfo> 标记,以便 BizTalk 平面文件分析程序可用于 BizTalk 方案以支持平面文件 IDOC。

  • FlatFileSegmentIndicator – 指示 IDOC 架构 <appinfo> 标记是否应包含段定义名称或段类型名称。 当使用的 希望向/从 SAP 发送/接收平面文件 IDOC 时,这一点适用。 如果 GenerateFlatFileCompatibleIDoc 设置为 false,则 忽略 FlatFileSegmentIndicator 绑定属性。

重要

由于要为入站 IDOC 调用生成架构,因此请确保从“使用适配器服务 BizTalk 项目加载项”中的“选择协定类型”下拉列表中选择“服务 (入站操作) ”。

定义消息和消息类型

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

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

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

  1. 将新的业务流程添加到 BizTalk 项目。

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

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

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

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

    使用此选项 要执行此操作
    标识符 键入 “请求”。
    消息类型 从下拉列表中展开“ 架构”,然后选择“ ReceiveIDOC.SAPBindingSchema2”,其中 ReceiveIDOC 是 BizTalk 项目的名称。 SAPBindingSchema2 是为 Receive 操作生成的架构。
  6. 重复步骤 2 以创建新消息。 在新邮件的“ 属性 ”窗格中,执行以下操作:

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

设置业务流程

必须创建 BizTalk 业务流程才能使用 BizTalk Server 从 SAP 系统接收 IDOC。 在典型方案中,SAP 适配器从 SAP 系统接收 IDOC 调用,处理请求并将响应传递给 SAP 系统。 若要在业务流程中实现此目的,业务流程必须包含:

  • 用于从 SAP 系统接收 IDOC 并发送响应的双向接收端口。

  • 发送和接收形状。

  • 构造消息形状,并在该消息分配形状中生成要发送到 SAP 系统的响应。

    注意

    如果业务流程包含双向接收端口 (请求-响应) 从 SAP 系统接收 IDOC,则业务流程必须将响应发送回 SAP 系统。 否则,SAP 系统不会发送下一个 IDOC。 但是,如果是单向接收端口,则业务流程不必向 SAP 系统发送响应。

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

    用于从 SAP 系统接收 IDOC 的示例业务流程如下所示:

    用于接收 IDOC 的业务流程

添加消息形状

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

形状 形状类型 属性
ListenToSAP 接收 - 将 “名称” 设置为 ListenToSAP

- 将 “激活” 设置为 “True”
SaveIDOC 发送 - 将 “名称” 设置为 SaveIDOC
SendResponse 发送 - 将 “名称” 设置为 SendResponse

添加构造消息形状

在业务流程中,必须生成响应并将其发送到 SAP 系统。 为此,必须将构造消息形状和消息分配形状添加到业务流程中。 “消息分配”形状调用生成发送到 SAP 系统的响应消息的代码。 “消息分配”形状还设置要发送到 SAP 系统的响应的操作。

重要

如果业务流程包含双向接收端口 (请求-响应) 从 SAP 系统接收 IDOC,则业务流程必须将响应发送回 SAP 系统。 否则,SAP 系统不会发送下一个 IDOC。 但是,如果是单向接收端口,则业务流程不必向 SAP 系统发送响应。

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

生成响应的代码可能是与 BizTalk 项目相同的 Visual Studio 解决方案的一部分。 生成响应消息的示例代码如下所示。

namespace IdocReceiveResponseMessageCreator  
{  
    public class IdocReceiveResponseMessageCreator  
    {  
        private static XmlDocument Message;  
        private static string XmlFileLocation;  
        private static string ResponseDoc;  

        public static XmlDocument XMLMessageCreator()  
        {  
            XmlFileLocation = "C:\\test\\in";  
            try  
            {  
                ResponseDoc = (Directory.GetFiles(XmlFileLocation, "*.xml", SearchOption.TopDirectoryOnly))[0];  
            }  
            catch (Exception ex)  
            {  
                Console.WriteLine("Trying to get XML from: " + XmlFileLocation);  
                Console.WriteLine("EXCEPTION: " + ex.ToString());  
                throw ex;  
            }  
            //Create Message From XML  
            Message = new XmlDocument();  
            Message.PreserveWhitespace = true;  
            Message.Load(ResponseDoc);  
            return Message;  
        }   
    }  
}  

注意

生成项目后,将在项目目录中创建 IdocReceiveResponseMessageCreator.dll。 必须将此 DLL 添加到全局程序集缓存 (GAC) 。

添加以下表达式以从“消息分配”形状调用此代码,并为发送到 SAP 系统的响应设置操作。 若要添加表达式,请双击“消息分配”形状以打开“表达式编辑器”。

Response = IdocReceiveResponseMessageCreator.IdocReceiveResponseMessageCreator.XMLMessageCreator();  
Response(WCF.Action)= "http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS03//620/Receive/response";  

重要

必须显式设置对响应消息的操作。 如果未设置操作,WCF-Custom 适配器通过向请求操作追加“响应”来到达操作消息。 因此,响应消息的操作变为 http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS03//620/ReceiveResponse。 但是,sapBinding 需要响应操作,方法是将“/response”追加到请求操作,例如 http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS03//620/Receive/response

添加端口

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

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

- 将 Type 设置为 ReceiveIDOCPortType

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

- 将 “通信方向 ”设置为 “接收-发送”
GetIDOCPort - 将 标识符 设置为 GetIDOCPort

- 将 Type 设置为 GetIDOCPortType

- 将 通信模式 设置为 单向

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

重要

如果业务流程包含双向接收端口 (请求-响应) 从 SAP 系统接收 IDOC,则业务流程必须将响应发送回 SAP 系统。 否则,SAP 系统不会发送下一个 IDOC。

添加平面文件汇编程序

必须添加汇编程序才能将传入的 IDOC 消息转换为平面文件。

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

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

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

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

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

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

形状 属性
ListenToSAP - 将 消息 设置为 请求

- 将 操作 设置为 ReceiveIDOCPort.ReceiveIDOC.Request
SaveIDOC - 将 消息 设置为 请求

- 将 操作 设置为 GetIDOCPort.ReceiveIDOC.Request
SendResponse - 将 消息 设置为 响应

- 将 操作 设置为 ReceiveIDOCPort.ReceiveIDOC.Response

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

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

配置 BizTalk 应用程序

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

配置应用程序涉及:

  • 为应用程序选择主机。

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

    • 定义发送位置和物理发送端口。 此位置将包含来自 SAP 系统的 IDOC。

      重要

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

    • 定义 WCF-Custom 或 WCF-SAP 接收端口。 此端口将从 SAP 系统接收入站 IDOC,并将其传递给业务流程。 此端口还会将响应发送到 SAP 系统。 有关如何创建端口的信息,请参阅 手动配置到 SAP 适配器的物理端口绑定

      重要

      确保绑定属性 ReceiveIDocFormat 设置为 Typed

      重要

      如果绑定属性 EnableBizTalkCompatibilityMode 设置为 true,请确保将 SAP 适配器的 BizTalk 属性架构 DLL 添加为 BizTalk 应用程序中的资源,即部署项目的应用程序。 有关添加资源的说明,请参阅 排查 SAP 适配器的操作问题

      注意

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

    还必须将 IdocReceiveResponseMessageCreator 项目的程序集添加到 BizTalk 应用程序。 你创建了此项目来生成要发送到 SAP 系统的响应。 为此,请执行以下操作:

  1. 在BizTalk Server管理控制台左侧的控制台树中,在导入绑定的 BizTalk 应用程序下,右键单击“资源”,指向“添加”,然后单击“BizTalk 程序集”。

  2. 在“ 添加资源 ”对话框中,单击“ 添加 ”并导航到包含 IdocReceiveResponseMessageCreator.dll 的文件夹。 选择此文件,然后单击打开

  3. 在“ 添加资源 ”对话框中,单击“ 确定”。

启动应用程序

必须启动 BizTalk 应用程序才能从 SAP 系统接收 IDOC。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程如何启动应用程序

在此阶段,请确保:

  • 用于将传入 IDOC 保存到文件位置的 FILE 发送端口正在运行

  • 用于从 SAP 系统接收 IDOC 的 WCF-Custom 或 WCF-SAP 接收端口正在运行。

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

执行操作

运行应用程序后,必须转到 SAP 系统并将 IDOC 发送到适配器。 适配器接收 IDOC 并将其保存到指定为业务流程的一部分的文件位置。

可能的异常

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

最佳实践

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

另请参阅

开发 BizTalk 应用程序