使用 BizTalk Server 从 SAP 接收 IDOC

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

SAP 适配器提供两种不同的操作来接收 IDOC 文档:

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

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

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

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

  • String 指定适配器将接收具有弱类型模式的 IDOC。 这会生成带有 idocData> 标记的 <XML 消息。

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

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

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

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

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

来自 SAP 的适配器输入 BizTalk 数据处理 输出
IDOC (通过 tRFC 接口) 元数据设计时间

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

编排设计时间

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

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

编排设计时

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

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

编排设计时间

1. 接收包含平面文件 IDOC 的 XML 消息,位于<idocData>标记中。
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
IDOC (通过 tRFC 接口) 元数据设计时间

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

编排设计时间

- 接收以字符串形式存在于 <idocData> 标记中的 XML 消息。
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 应用程序。

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

基于本主题的示例

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

生成架构

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

  • GenerateFlatFileCompatibleIDoc –生成 <appinfo> 标记,以便 BizTalk 平面文件解析器可用于 BizTalk 场景,以支持平面文件 IDOC。

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

重要

由于要为入站 IDOC 调用生成架构,因此请确保从“Consume Adapter Service BizTalk 项目外接程序”中的“选择协定类型”下拉列表中选择“服务”(入站操作)。

定义消息和消息类型

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

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

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

  1. 向 BizTalk 项目添加新的编排。

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

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

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

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

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

    用这个 要执行的操作
    标识符 键入 响应
    消息类型 在下拉列表中,展开「模式」,然后选择ReceiveIDOC.SAPBindingSchema3

设置业务流程

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

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

  • 发送和接收图形。

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

    注释

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

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

    以下是用于从 SAP 系统接收 IDOC 的示例编排:

    用于接收 IDOCs 的编排

添加消息形状

请确保为每个邮件形状指定以下属性。 形状列中列出的名称是上面编排中显示的消息形状的名称。

形状 形状类型 性能
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

- 将 类型 设置为 ReceiveIDOCPortType

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

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

- 将 类型 设置为 GetIDOCPortType

- 将 通信模式 设置为 单向

- 将通信方向设置为发送

重要

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

添加平面文件装配器

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

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

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

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

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

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

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

形状 性能
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 应用程序