在 Azure 逻辑应用中为常见的 SAP 集成方案创建工作流

适用范围:Azure 逻辑应用(消耗型 + 标准型)

本操作指南介绍如何使用 Azure 逻辑应用和 SAP 连接器为某些常见 SAP 集成方案创建示例逻辑应用工作流。

标准和消耗逻辑应用工作流都提供在多租户 Azure 中托管和运行的 SAP 托管连接器。 标准工作流还提供在单租户 Azure 逻辑应用中托管和运行的 SAP 内置服务提供商连接器。 如果在集成服务环境 (ISE) 中创建和托管消耗工作流,也可以使用 SAP 连接器的 ISE 原生版本。 有关详细信息,请参阅连接器技术参考

先决条件

接收来自 SAP 的消息

以下示例逻辑应用工作流在工作流的 SAP 触发器收到来自 SAP 服务器的消息时触发。

添加 SAP 触发器

根据你在多租户 Azure 逻辑应用中具有消耗工作流还是在单租户 Azure 逻辑应用中具有标准工作流,执行相应的步骤:

  1. Azure 门户中,打开设计器中的消耗型逻辑应用和空白工作流。

  2. 在设计器中,按照这些常规步骤添加名为“收到消息时”的 SAP 托管连接器触发器

  3. 如果出现提示,请为你的本地 SAP 服务器提供以下连接信息。 完成操作后,选择“创建”。 否则,继续完成下一步,设置 SAP 触发器。

    参数 必需 说明
    连接名称 输入连接的名称。
    数据网关 1. 对于“订阅”,首先选择在 Azure 门户中为数据网关安装创建的数据网关资源的 Azure 订阅。

    2. 对于“连接网关”,选择 Azure 中的数据网关资源。
    客户端 用于连接到 SAP 服务器的 SAP 客户端 ID
    身份验证类型 要用于连接的身份验证类型,必须为基本(用户名和密码)。 若要创建 SNC 连接,请参阅启用安全网络通信 (SNC)
    SAP 用户名 SAP 服务器的用户名
    SAP 密码 SAP 服务器的密码
    登录类型 选择“应用程序服务器”或“组”(消息服务器),然后配置相应的必需参数,即使它们显示为可选也进行配置:

    应用程序服务器
    - AS 主机:SAP 应用程序服务器的主机名
    - AS 服务:SAP 应用程序服务器的服务名称或端口号
    - AS 系统编号:SAP 服务器的系统编号,范围为 00 到 99


    - MS Server 主机:SAP 消息服务器的主机名
    - MS 服务名称或端口号:SAP 消息服务器的服务名称或端口号
    - MS 系统 ID:SAP 服务器的系统 ID
    - MS 登录组:SAP 服务器的登录组。 在你的 SAP 服务器上,可以通过打开“CCMS:维护登录组 (T-Code SMLG)”对话框来查找或编辑登录组值。 有关详细信息,请参阅 SAP 说明 26317 - 为登录组设置自动负载均衡
    安全类型化 此选项用于实现后向兼容,它只会检查字符串长度。 默认会使用强类型化通过针对架构执行 XML 验证来检查无效值。 此行为可帮助提前检测问题。 详细了解安全类型化设置
    使用 SNC 若要创建 SNC 连接,请参阅启用安全网络通信 (SNC)

    有关其他可选的可用连接参数,请参阅默认连接信息

    Azure 逻辑应用设置好并测试连接后,将显示触发器信息框。 有关可能发生的任何连接问题的详细信息,请参阅排查连接问题

  4. 根据你的 SAP 服务器配置和方案,为收到消息时”触发器提供必要的参数值,并添加要在方案中使用的任何其他可用触发器参数。

    备注

    此 SAP 触发器是基于 Webhook 的触发器,而不是轮询触发器,不包括指定轮询计划的选项。 例如,将托管 SAP 连接器与本地数据网关结合使用时,仅当消息到达时才从数据网关调用触发器,因此无需轮询。

    参数 必需 说明
    GatewayHost SAP RFC 服务器的注册网关主机
    GatewayService SAP RFC 服务器的注册网关服务
    ProgramId SAP RFC 服务器的注册网关程序 ID。

    注意:此值区分大小写。 配置逻辑应用工作流和 SAP 服务器时,请确保“程序 ID”值始终使用相同的大小写格式。 否则,当你尝试将 IDoc 发送到 SAP 时,tRFC 监视器 (T-Code SM58) 可能会显示以下错误(链接需要 SAP 登录):

    - 找不到函数 IDOC_INBOUND_ASYNCHRONOUS (2399329)
    - 不支持非 ABAP RFC 客户端(合作伙伴类型) (353597)
    DegreeOfParallelism 并行处理的调用数。 若要添加此参数并更改值,请从“添加新参数”列表中选择“DegreeOfParallelism”,然后输入新值。
    SapActions 基于 SAP 操作列表筛选从 SAP 服务器接收的消息。 若要添加此参数,请从“添加新参数”列表中选择“SapActions”。 在新的 SapActions 部分中,对于 SapActions - 1 参数,使用文件选取器选择 SAP 操作或手动指定操作。 有关 SAP 操作的详细信息,请参阅 IDoc 操作的消息架构
    IDoc 格式 接收 IDoc 所用的格式。 若要添加此参数,请从“添加新参数”列表中选择“IDoc 格式”。

    - 若要以 SAP 纯 XML 格式接收 IDoc,请从“IDoc 格式”列表中选择“SapPlainXml”。

    - 若要以平面文件的形式接收 IDoc,请从“IDoc 格式”列表中选择“FlatFile”。

    - 注意:如果你也在工作流中使用平面文件解码操作,则必须使用 early_terminate_optional_fields 属性,并将值设置为 true。 因为在名为 IDOC_INBOUND_ASYNCHRONOUS 的 tRFC 调用中由 SAP 发送的平面文件 IDoc 数据记录不会填充到完整的 SDATA 字段长度,所以这是必要要求。 Azure 逻辑应用会提供未填充的平面文件 IDoc 原始数据,与接收自 SAP 的格式相同。 此外,将此 SAP 触发器与平面文件解码操作组合使用时,提供给操作的架构必须与之相匹配。
    接收具有未发布的段的 IDoc 接收具有或不具有未发布的段的 IDoc。 若要添加此参数并更改值,请从“添加新参数”列表中选择“接收具有未发布的段的 IDoc”,然后选择“”或“”。
    SncPartnerNames 有权在 SAP 客户端库级别调用触发器的 SNC 合作伙伴列表。 只有列出的合作伙伴获得 SAP 服务器的 SNC 连接授权。 若要添加此参数,请从“添加新参数”列表中选择“SncPartnerNames”。 请确保输入每个名称并用垂直条分隔 (|)。

    以下示例演示消耗工作流中经过基本配置的 SAP 托管触发器:

    屏幕截图显示了消耗工作流中经过基本配置的 SAP 托管连接器触发器。

    以下示例演示了一个 SAP 托管触发器,可在其中通过选择 SAP 操作来筛选消息:

    屏幕截图显示在消耗工作流中选择 SAP 操作以筛选消息。

    或者,手动指定操作:

    屏幕截图显示在消耗工作流中手动输入 SAP 操作以筛选消息。

    以下示例演示将触发器设置为接收多条消息时操作的显示方式:

    屏幕截图显示接收消耗工作流中的多条消息的示例触发器。

  5. 保存你的工作流,以便可以开始从 SAP 服务器接收消息。 在设计器工具栏上选择“保存”。

    现在,你的工作流已准备好从 SAP 服务器接收消息。

  6. 触发器触发并运行工作流后,请查看工作流的触发器历史记录以确认触发器注册成功。

从 SAP 接收 IDoc 数据包

若要接收 IDoc 数据包(IDoc 的批或组),SAP 触发器不需要额外的配置。 但是,若要在触发器收到数据包后处理 IDoc 数据包中的每个项,则需要再实施几个步骤,通过设置 SAP 以在数据包中发送 IDoc,将数据包拆分为单独的 IDoc。

以下示例工作流演示如何使用 xpath() 函数从数据包提取单个 IDoc:

  1. 在开始之前,你需要具有 SAP 触发器的消耗或标准逻辑应用工作流。 如果你的工作流尚未以此触发器开始,请按照本指南前面的步骤将可以接收消息的 SAP 触发器添加到工作流

  2. 若要向 SAP 服务器即刻回复 SAP 请求状态,请根据你使用的是 SAP 托管触发器还是 SAP 内置触发器,添加以下响应操作:

    • SAP 托管触发器:对于此触发器,将响应操作添加到工作流

      在“响应”操作中,使用以下状态代码之一 (statusCode):

      状态代码 说明
      202 已接受 已接受处理该请求,但尚未完成处理。
      204 无内容 服务器已成功完成请求,响应有效负载正文中没有要发送的其他内容。
      200 OK 此状态代码始终包含有效负载,即使服务器生成的有效负载正文长度为零。
    • SAP 内置触发器:对于此触发器,请将“响应 SAP 服务器”操作添加到工作流中。

    备注

    最佳做法是在触发之后立即添加响应操作,以释放与 SAP 服务器的信道。

  3. 从你的工作流从 SAP 接收的 XML IDoc 获取根命名空间。

    1. 若要从 XML 文档中提取此命名空间并将命名空间存储在本地字符串变量中,请添加初始化变量操作。

    2. 将操作的标题重命名为获取接收的 IDoc 中根节点的命名空间

    3. 提供变量的名称,并将类型设置为 String

    4. 在操作的 Value 参数中,在编辑框内选择,打开表达式或函数编辑器,然后使用 xpath() 函数创建以下表达式:

      xpath(xml(triggerBody()?['Content']), 'namespace-uri(/*)')

      消耗工作流

      屏幕截图显示为消耗工作流从接收的 IDoc 获取根节点命名空间的表达式。

      标准工作流

      屏幕截图显示为标准工作流从接收的 IDoc 获取根节点命名空间的表达式。

      完成后,表达式将解析,现在将显示为以下格式:

      屏幕截图显示从接收的 IDoc 获取根节点命名空间的解析后表达式。

  4. 若要通过将 IDoc 集合存储在本地数组变量中来提取单个 IDoc,请执行以下步骤:

    1. 添加另一个初始化变量操作。

    2. 将操作的标题重命名为获取带有 IDoc 数据元素的数组

    3. 提供变量的名称,并将类型设置为 Array

      数组变量通过对集合进行枚举,使每个 IDoc 可供工作流单独处理。

    4. 在操作的 Value 参数中,在编辑框内选择,打开表达式或函数编辑器,然后创建以下 xpath() 表达式:

      xpath(xml(triggerBody()?['Content']), '/*[local-name()="Receive"]/*[local-name()="idocData"]')

      完成后,表达式将解析,现在将显示为以下格式:

      消耗工作流

      屏幕截图显示为消耗工作流获取 IDoc 的数组的表达式。

      在此示例中,以下工作流通过使用名为“为每个”的控制操作和名为“创建文件”的 SFTP-SSH 操作,将每个 IDoc 传输到 SFTP 服务器。 每个 IDoc 必须包含根命名空间,因此必须将文件内容与根命名空间一起包装在 <Receive></Receive> 元素中,然后才能将 IDoc 发送到下游应用(在此示例中为 SFTP 服务器)。

      屏幕截图显示将 IDoc 从消耗工作流发送到 SFTP 服务器。

      备注

      对于消耗工作流,此模式可用作快速入门模板,在创建消耗逻辑应用资源和空白工作流时,可以从模板库中选择该模板。 或者,当工作流设计器处于打开状态时,在设计器工具栏上,选择“模板”。

      显示选择获取 IDoc 批处理的模板的屏幕截图。

      标准工作流

      屏幕截图显示为标准工作流获取 IDoc 的数组的表达式。

      在此示例中,以下工作流通过使用名为“为每个”的控制操作和名为“创建文件”的 SFTP-SSH 操作,将每个 IDoc 传输到 SFTP 服务器。 每个 IDoc 必须包含根命名空间,因此必须将文件内容与根命名空间一起包装在 <Receive></Receive> 元素中,然后才能将 IDoc 发送到下游应用(在此示例中为 SFTP 服务器)。

      屏幕截图显示将 IDoc 从标准工作流发送到 SFTP 服务器。


使用 SAP 操作筛选收到的消息

如果在工作流中使用触发器下的 SAP 托管连接器,请根据收到的 XML 有效负载中的根节点命名空间,设置一种方法来显式筛选出 SAP 服务器不需要的任何操作。 可以提供包含一个或多个 SAP 操作的列表(数组)。 默认情况下,此数组为空,这意味着你的工作流接收来自 SAP 服务器的所有消息,而不进行筛选。 设置阵列筛选器时,触发器仅接收来自指定 SAP 操作类型的消息,并拒绝来自 SAP 服务器的所有其他消息。 然而,此筛选器并不影响所接收的有效负载的类型是弱还是强。 任何 SAP 操作筛选均发生在本地数据网关的 SAP 适配器级别。 有关详细信息,请参阅如何测试将 IDoc 从 SAP 发送到 Azure 逻辑应用的过程

为触发器设置异步的请求-答复模式

针对 Azure 逻辑应用触发器,SAP 托管连接器支持 Azure 的异步请求-答复模式。 可以使用此模式创建成功的请求,如果使用默认的同步请求-答复模式,这些请求将会失败。

备注

在具有多个响应操作的工作流中,所有响应操作都必须使用相同的请求-答复模式。 例如,如果你的工作流使用可能具有多个响应操作的开关控件,则必须将所有响应操作设置为使用相同的请求-答复模式(同步或异步)。

如果为响应操作启用异步响应,则工作流会在接受处理请求后以 202 已接受作为答复进行响应。 响应包含位置标头,可用于检索请求的最终状态。

若要使用 SAP 连接器为工作流配置异步请求-答复模式,请按以下步骤操作:

  1. 在设计器中,打开逻辑应用工作流。 确认你的工作流以 SAP 触发器开始。

  2. 在工作流中,找到“响应”操作,并打开该操作的“设置”。

  3. 根据你使用的是消耗工作流还是标准工作流,遵循相应的步骤:

    • 消耗:在“异步响应”下,将设置从“”切换到“”,然后选择“ 完成”。
    • 标准:展开“网络”,在“异步响应”下,将“”切换为“”。
  4. 保存工作流。

向 SAP 发送 IDoc

若要创建向 SAP 服务器发送 IDoc 并返回响应的逻辑应用工作流,请按照这些示例操作:

  1. 创建由 HTTP 请求触发的逻辑应用工作流。
  2. 将 SAP 操作添加到工作流,以便将 IDoc 发送到 SAP。
  3. 向工作流添加响应操作。
  4. 如果要使用 RFC 接收来自 SAP ABAP 的响应,请创建远程函数调用 (RFC) 请求-响应模式。
  5. 测试工作流。

添加“请求”触发器

若要让工作流通过 XML HTTP 从 SAP 接收 IDoc,可以使用请求内置触发器 此触发器会创建包含 URL 的终结点,SAP 服务器可在其中向工作流发送 HTTP POST 请求。 当工作流收到这些请求时,触发器会触发并运行工作流中的下一个步骤。

若要通过公共编程接口通信 (CPIC) 接收普通 XML 或平面文件格式的 IDoc,请参阅从 SAP 接收消息部分。

根据你在多租户 Azure 逻辑应用中具有消耗工作流还是在单租户 Azure 逻辑应用中具有标准工作流,执行相应的步骤:

  1. Azure 门户中,在设计器中创建消耗逻辑应用资源和空白工作流。

  2. 在设计器中,按照这些常规步骤查找并添加名为“收到 HTTP 请求时”的请求内置触发器

    屏幕截图显示消耗工作流的请求触发器。

  3. 保存工作流。 在设计器工具栏上选择“保存”。

    此步骤将生成终结点 URL,触发器可在其中接收来自 SAP 服务器的请求,例如:

    屏幕截图显示请求触发器的生成的终结点 URL,用于接收消耗工作流中的请求。

添加 SAP 操作以发送 IDoc

接下来,创建一个操作,以便当工作流的“请求”触发器触发时向 SAP 发送 IDoc。 根据你在多租户 Azure 逻辑应用中具有消耗工作流还是在单租户 Azure 逻辑应用中具有标准工作流,执行相应的步骤:

  1. 在工作流设计器中“请求”触发器下,选择“新建步骤”。

  2. 在设计器中,按照这些常规步骤查找并添加名为“向 SAP 发送消息”的 SAP 托管操作

  3. 如果出现提示,请为你的本地 SAP 服务器提供以下连接信息。 完成操作后,选择“创建”。 否则,请继续执行下一步来设置 SAP 操作。

    参数 必需 说明
    连接名称 输入连接的名称。
    数据网关 1. 对于“订阅”,首先选择在 Azure 门户中为数据网关安装创建的数据网关资源的 Azure 订阅。

    2. 对于“连接网关”,选择 Azure 中的数据网关资源。
    客户端 用于连接到 SAP 服务器的 SAP 客户端 ID
    身份验证类型 要用于连接的身份验证类型,必须为基本(用户名和密码)。 若要创建 SNC 连接,请参阅启用安全网络通信 (SNC)
    SAP 用户名 SAP 服务器的用户名
    SAP 密码 SAP 服务器的密码
    登录类型 选择“应用程序服务器”或“组”(消息服务器),然后配置相应的必需参数,即使它们显示为可选也进行配置:

    应用程序服务器
    - AS 主机:SAP 应用程序服务器的主机名
    - AS 服务:SAP 应用程序服务器的服务名称或端口号
    - AS 系统编号:SAP 服务器的系统编号,范围为 00 到 99


    - MS Server 主机:SAP 消息服务器的主机名
    - MS 服务名称或端口号:SAP 消息服务器的服务名称或端口号
    - MS 系统 ID:SAP 服务器的系统 ID
    - MS 登录组:SAP 服务器的登录组。 在你的 SAP 服务器上,可以通过打开“CCMS:维护登录组 (T-Code SMLG)”对话框来查找或编辑登录组值。 有关详细信息,请参阅 SAP 说明 26317 - 为登录组设置自动负载均衡
    安全类型化 此选项用于实现后向兼容,它只会检查字符串长度。 默认会使用强类型化通过针对架构执行 XML 验证来检查无效值。 此行为可帮助提前检测问题。 详细了解安全类型化设置
    使用 SNC 若要创建 SNC 连接,请参阅启用安全网络通信 (SNC)

    有关其他可选的可用连接参数,请参阅默认连接信息

    Azure 逻辑应用设置好并测试连接后,将显示 SAP 操作信息框。 有关可能发生的任何连接问题的详细信息,请参阅排查连接问题

    屏幕截图显示具有名为“向 SAP 发送消息”的 SAP 托管操作的消耗工作流。

  4. 在“向 SAP 发送消息”操作中,查找并选择 SAP 服务器上的可用 SAP 操作以发送 IDoc。

    向 SAP 发送消息”操作是通用的,可以发送 BAPI、IDoc、RFC 或 tRFC 的消息,但必须首先选择要使用的消息类型和 SAP 操作。

    1. 在“SAP 操作”参数的编辑框中,选择文件夹图标。 从打开的列表中,选择“BAPI”、“IDOC”、“RFC”或 “TRFC”。 此示例选择了“IDOC”。 如果选择其他类型,则可用的 SAP 操作会根据你的选择而更改。

      备注

      如果收到了 Bad Gateway (500) 错误或 Bad request (400) 错误,请参阅 500 Bad Gateway 或 400 Bad request 错误

      屏幕截图显示为消耗工作流选择 IDOC。

    2. 使用箭头浏览 SAP 操作类型文件夹,查找并选择要使用的 SAP 操作。

      此示例选择了 ORDERS>ORDERS05>720>Send

      屏幕截图显示为消耗工作流查找订单操作。

      如果找不到所需的操作,可以手动输入路径,例如:

      屏幕截图显示为消耗工作流手动输入订单操作类型的路径。

      提示

      对于 SAP 操作参数,可以使用表达式编辑器提供参数值。 这样,便可以对不同的消息类型使用相同的 SAP 操作。

      有关 IDoc 消息的详细信息,请参阅 IDoc 操作的消息架构

    3. 在“向 SAP 发送消息”操作中,加入“请求”触发器的正文输出。

      1. 输入消息参数中,在编辑框中选择以打开动态内容列表。

      2. 在该动态内容列表中的“收到 HTTP 请求时”下面,选择“正文”。 “正文”字段包含“请求”触发器的正文输出。

        备注

        如果正文字段未出现在列表中,请选择“收到 HTTP 请求时”标签旁边的“查看更多”。

      屏幕截图显示为消耗工作流选择名为“正文”的请求触发器的输出。

      “向 SAP 发送消息”操作现在包括来自“请求”触发器的正文内容,它会将该输出发送到你的 SAP 服务器,例如:

      屏幕截图显示消耗工作流的已完成的 SAP 操作。

  5. 保存工作流。

将平面文件 IDoc 发送至 SAP 服务器(仅限托管连接器)

若要在试用 SAP 托管连接器时使用平面文件架构发送 IDoc,可以将 IDoc 包装在 XML 信封中,并按照常规步骤添加 SAP 操作以发送 IDoc,但需要进行以下更改。

注意

如果使用 SAP 内置连接器,请确保不要将平面文件 IDoc 包装在 XML 信封中。

使用 XML 信封包装 IDoc

  1. 在用于发送消息的 SAP 操作中,使用以下 URI:

    http://Microsoft.LobServices.Sap/2007/03/Idoc/SendIdoc

  2. 使用 XML 信封设置输入消息的格式。

下面的例子演示了一个示例 XML 有效负载:

<SendIdoc xmlns="http://Microsoft.LobServices.Sap/2007/03/Idoc/">
  <idocData>EDI_DC 3000000001017945375750 30INVOIC011BTSVLINV30KUABCABCFPPC LDCA X004010810 4 SAPMSX LSEDI ABCABCFPPC 000d3ae4-723e-1edb-9ca4-cc017365c9fd 20210217054521INVOICINVOIC01ZINVOIC2RE 20210217054520
E2EDK010013000000001017945375000001E2EDK01001000000010 ABCABC1.00000 0060 INVO9988298128 298.000 298.000 LB Z4LR EN 0005065828 L
E2EDKA1 3000000001017945375000002E2EDKA1 000000020 RS ABCABCFPPC 0005065828 ABCABCABC ABCABC Inc. Limited Risk Distributor ABCABC 1950 ABCABCABCA Blvd ABCABAABCAB L5N8L9 CA ABCABC E ON V-ABCABC LDCA
E2EDKA1 3000000001017945375000003E2EDKA1 000000020 AG 0005065828 ABCABCFPPC ABCABC ABCABC ABCABC - FPP ONLY 88 ABCABC Crescent ABCABAABCAB L5R 4A2 CA ABCABC 111 111 1111 E ON ABCABCFPPC EN
E2EDKA1 3000000001017945375000004E2EDKA1 000000020 RE 0005065828 ABCABCFPPC ABCABC ABCABC ABCABC - FPP ONLY 88 ABCABC Crescent ABCABAABCAB L5R 4A2 CA ABCABC 111 111 1111 E ON ABCABCFPPC EN
E2EDKA1 3000000001017945375000005E2EDKA1 000000020 RG 0005065828 ABCABCFPPC ABCABC ABCABC ABCABC - FPP ONLY 88 ABCABC Crescent ABCABAABCAB L5R 4A2 CA ABCABC 111 111 1111 E ON ABCABCFPPC EN
E2EDKA1 3000000001017945375000006E2EDKA1 000000020 WE 0005001847 41 ABCABC ABCABC INC (ABCABC) DC A. ABCABCAB 88 ABCABC CRESCENT ABCABAABCAB L5R 4A2 CA ABCABC 111-111-1111 E ON ABCABCFPPC EN
E2EDKA1 3000000001017945375000007E2EDKA1 000000020 Z3 0005533050 ABCABCABC ABCABC Inc. ABCA Bank Swift Code -ABCABCABCAB Sort Code - 1950 ABCABCABCA Blvd. Acc No -1111111111 ABCABAABCAB L5N8L9 CA ABCABC E ON ABCABCFPPC EN
E2EDKA1 3000000001017945375000008E2EDKA1 000000020 BK 1075 ABCABCABC ABCABC Inc 1950 ABCABCABCA Blvd ABCABAABCAB ON L5N 8L9 CA ABCABC (111) 111-1111 (111) 111-1111 ON
E2EDKA1 3000000001017945375000009E2EDKA1 000000020 CR 1075 CONTACT ABCABCABC 1950 ABCABCABCA Blvd ABCABAABCAB ON L5N 8L9 CA ABCABC (111) 111-1111 (111) 111-1111 ON
E2EDK02 3000000001017945375000010E2EDK02 000000020 0099988298128 20210217
E2EDK02 3000000001017945375000011E2EDK02 000000020 00140-N6260-S 20210205
E2EDK02 3000000001017945375000012E2EDK02 000000020 0026336270425 20210217
E2EDK02 3000000001017945375000013E2EDK02 000000020 0128026580537 20210224
E2EDK02 3000000001017945375000014E2EDK02 000000020 01740-N6260-S
E2EDK02 3000000001017945375000015E2EDK02 000000020 900IAC
E2EDK02 3000000001017945375000016E2EDK02 000000020 901ZSH
E2EDK02 3000000001017945375000017E2EDK02 000000020 9078026580537 20210217
E2EDK03 3000000001017945375000018E2EDK03 000000020 02620210217
E2EDK03 3000000001017945375000019E2EDK03 000000020 00120210224
E2EDK03 3000000001017945375000020E2EDK03 000000020 02220210205
E2EDK03 3000000001017945375000021E2EDK03 000000020 01220210217
E2EDK03 3000000001017945375000022E2EDK03 000000020 01120210217
E2EDK03 3000000001017945375000023E2EDK03 000000020 02420210217
E2EDK03 3000000001017945375000024E2EDK03 000000020 02820210418
E2EDK03 3000000001017945375000025E2EDK03 000000020 04820210217
E2EDK17 3000000001017945375000026E2EDK17 000000020 001DDPDelivered Duty Paid
E2EDK17 3000000001017945375000027E2EDK17 000000020 002DDPdestination
E2EDK18 3000000001017945375000028E2EDK18 000000020 00160 0 Up to 04/18/2021 without deduction
E2EDK28 3000000001017945375000029E2EDK28 000000020 CA BOFACATT Bank of ABCABAB ABCABC ABCABAB 50127217 ABCABCABC ABCABC Inc.
E2EDK28 3000000001017945375000030E2EDK28 000000020 CA 026000082 ABCAbank ABCABC ABCABAB 201456700OLD ABCABCABC ABCABC Inc.
E2EDK28 3000000001017945375000031E2EDK28 000000020 GB ABCAGB2L ABCAbank N.A ABCABA E14, 5LB GB63ABCA18500803115593 ABCABCABC ABCABC Inc. GB63ABCA18500803115593
E2EDK28 3000000001017945375000032E2EDK28 000000020 CA 020012328 ABCABANK ABCABC ABCABAB ON M5J 2M3 2014567007 ABCABCABC ABCABC Inc.
E2EDK28 3000000001017945375000033E2EDK28 000000020 CA 03722010 ABCABABC ABCABABC Bank of Commerce ABCABAABCAB 64-04812 ABCABCABC ABCABC Inc.
E2EDK28 3000000001017945375000034E2EDK28 000000020 IE IHCC In-House Cash Center IHCC1075 ABCABCABC ABCABC Inc.
E2EDK28 3000000001017945375000035E2EDK28 000000020 CA 000300002 ABCAB Bank of ABCABC ABCABAB 0021520584OLD ABCABCABC ABCABC Inc.
E2EDK28 3000000001017945375000036E2EDK28 000000020 US USCC US Cash Center (IHC) city USCC1075 ABCABCABC ABCABC Inc.
E2EDK29 3000000001017945375000037E2EDK29 000000020 0064848944US A CAD CA ABCABC CA United States US CA A Air Air
E2EDKT1 3000000001017945375000038E2EDKT1 000000020 ZJ32E EN
E2EDKT2 3000000001017945375000039E2EDKT2 000038030 GST/HST877845941RT0001 *
E2EDKT2 3000000001017945375000040E2EDKT2 000038030 QST1021036966TQ0001 *
E2EDKT1 3000000001017945375000041E2EDKT1 000000020 Z4VL
E2EDKT2 3000000001017945375000042E2EDKT2 000041030 0.000 *
E2EDKT1 3000000001017945375000043E2EDKT1 000000020 Z4VH
E2EDKT2 3000000001017945375000044E2EDKT2 000043030 *
E2EDK14 3000000001017945375000045E2EDK14 000000020 008LDCA
E2EDK14 3000000001017945375000046E2EDK14 000000020 00710
E2EDK14 3000000001017945375000047E2EDK14 000000020 00610
E2EDK14 3000000001017945375000048E2EDK14 000000020 015Z4F2
E2EDK14 3000000001017945375000049E2EDK14 000000020 0031075
E2EDK14 3000000001017945375000050E2EDK14 000000020 021M
E2EDK14 3000000001017945375000051E2EDK14 000000020 0161075
E2EDK14 3000000001017945375000052E2EDK14 000000020 962M
E2EDP010013000000001017945375000053E2EDP01001000000020 000011 2980.000 EA 298.000 LB MOUSE 298.000 Z4TN 4260
E2EDP02 3000000001017945375000054E2EDP02 000053030 00140-N6260-S 00000120210205 DFUE
E2EDP02 3000000001017945375000055E2EDP02 000053030 0026336270425 00001120210217
E2EDP02 3000000001017945375000056E2EDP02 000053030 0168026580537 00001020210224
E2EDP02 3000000001017945375000057E2EDP02 000053030 9100000 00000120210205 DFUE
E2EDP02 3000000001017945375000058E2EDP02 000053030 911A 00000120210205 DFUE
E2EDP02 3000000001017945375000059E2EDP02 000053030 912PP 00000120210205 DFUE
E2EDP02 3000000001017945375000060E2EDP02 000053030 91300 00000120210205 DFUE
E2EDP02 3000000001017945375000061E2EDP02 000053030 914CONTACT ABCABCABC 00000120210205 DFUE
E2EDP02 3000000001017945375000062E2EDP02 000053030 963 00000120210205 DFUE
E2EDP02 3000000001017945375000063E2EDP02 000053030 965 00000120210205 DFUE
E2EDP02 3000000001017945375000064E2EDP02 000053030 9666336270425 00000120210205 DFUE
E2EDP02 3000000001017945375000065E2EDP02 000053030 9078026580537 00001020210205 DFUE
E2EDP03 3000000001017945375000066E2EDP03 000053030 02920210217
E2EDP03 3000000001017945375000067E2EDP03 000053030 00120210224
E2EDP03 3000000001017945375000068E2EDP03 000053030 01120210217
E2EDP03 3000000001017945375000069E2EDP03 000053030 02520210217
E2EDP03 3000000001017945375000070E2EDP03 000053030 02720210217
E2EDP03 3000000001017945375000071E2EDP03 000053030 02320210217
E2EDP03 3000000001017945375000072E2EDP03 000053030 02220210205
E2EDP19 3000000001017945375000073E2EDP19 000053030 001418VVZ
E2EDP19 3000000001017945375000074E2EDP19 000053030 002RJR-00001 AB ABCABCABC Mouse FORBUS BLUETOOTH
E2EDP19 3000000001017945375000075E2EDP19 000053030 0078471609000
E2EDP19 3000000001017945375000076E2EDP19 000053030 003889842532685
E2EDP19 3000000001017945375000077E2EDP19 000053030 011CN
E2EDP26 3000000001017945375000078E2EDP26 000053030 00459064.20
E2EDP26 3000000001017945375000079E2EDP26 000053030 00352269.20
E2EDP26 3000000001017945375000080E2EDP26 000053030 01052269.20
E2EDP26 3000000001017945375000081E2EDP26 000053030 01152269.20
E2EDP26 3000000001017945375000082E2EDP26 000053030 0126795.00
E2EDP26 3000000001017945375000083E2EDP26 000053030 01552269.20
E2EDP26 3000000001017945375000084E2EDP26 000053030 00117.54
E2EDP26 3000000001017945375000085E2EDP26 000053030 00252269.20
E2EDP26 3000000001017945375000086E2EDP26 000053030 940 2980.000
E2EDP26 3000000001017945375000087E2EDP26 000053030 939 2980.000
E2EDP05 3000000001017945375000088E2EDP05 000053030 + Z400MS List Price 52269.20 17.54 1 EA CAD 2980
E2EDP05 3000000001017945375000089E2EDP05 000053030 + XR1 Tax Jur Code Level 6795.00 13.000 52269.20
E2EDP05 3000000001017945375000090E2EDP05 000053030 + Tax Subtotal1 6795.00 2.28 1 EA CAD 2980
E2EDP05 3000000001017945375000091E2EDP05 000053030 + Taxable Amount + TaxSubtotal1 59064.20 19.82 1 EA CAD 2980
E2EDP04 3000000001017945375000092E2EDP04 000053030 CX 13.000 6795.00 7000000000
E2EDP04 3000000001017945375000093E2EDP04 000053030 CX 0 0 7001500000
E2EDP04 3000000001017945375000094E2EDP04 000053030 CX 0 0 7001505690
E2EDP28 3000000001017945375000095E2EDP28 000053030 00648489440000108471609000 CN CN ABCAB ZZ 298.000 298.000 LB US 400 United Stat KY
E2EDPT1 3000000001017945375000096E2EDPT1 000053030 0001E EN
E2EDPT2 3000000001017945375000097E2EDPT2 000096040 AB ABCABCABC Mouse forBus Bluetooth EN/XC/XD/XX Hdwr Black For Bsnss *
E2EDS01 3000000001017945375000098E2EDS01 000000020 0011
E2EDS01 3000000001017945375000099E2EDS01 000000020 01259064.20 CAD
E2EDS01 3000000001017945375000100E2EDS01 000000020 0056795.00 CAD
E2EDS01 3000000001017945375000101E2EDS01 000000020 01159064.20 CAD
E2EDS01 3000000001017945375000102E2EDS01 000000020 01052269.20 CAD
E2EDS01 3000000001017945375000103E2EDS01 000000020 94200000 CAD
E2EDS01 3000000001017945375000104E2EDS01 000000020 9440.00 CAD
E2EDS01 3000000001017945375000105E2EDS01 000000020 9450.00 CAD
E2EDS01 3000000001017945375000106E2EDS01 000000020 94659064.20 CAD
E2EDS01 3000000001017945375000107E2EDS01 000000020 94752269.20 CAD
E2EDS01 3000000001017945375000108E2EDS01 000000020 EXT
Z2XSK010003000000001017945375000109Z2XSK01000000108030 Z400 52269.20
Z2XSK010003000000001017945375000110Z2XSK01000000108030 XR1 13.000 6795.00 CX
</idocData>
</SendIdoc>

添加响应操作

现在,将工作流设置为将结果从 SAP 服务器返回到原始请求者。 对于此任务,请执行以下步骤:

  1. 在工作流设计器中的 SAP 操作下,选择“新建步骤”。

  2. 在设计器中,按照这些常规步骤查找并添加名为“响应”的请求内置操作

  3. 在“响应”操作中,对于“正文”参数,在编辑框中选择以打开动态内容列表。

  4. 在动态内容列表的“向 SAP 发送消息”下,选择“正文”。 正文字段包含 SAP 操作的正文输出。

    屏幕截图显示为消耗工作流选择名为“正文”的 SAP 操作输出。

  5. 保存工作流。

创建远程函数调用 (RFC) 请求-响应模式

对于使用 SAP 托管连接器的消耗工作流,如果必须使用远程函数调用 (RFC) 接收从 SAP ABAP 到 Azure 逻辑应用的答复,则必须实现请求和响应模式。 若要在使用“请求”触发器时在工作流中接收 IDocs,请确保工作流的第一个操作是“响应操作”,它须使用没有任何内容的“200 OK”状态代码。 此建议步骤会立即通过 tRFC 完成 SAP 逻辑工作单元 (LUW) 异步传输,这会使 SAP CPIC 对话再次可用。 然后,可以向工作流添加更多操作,以处理收到的 IDoc,而不会阻止后续传输。

备注

SAP 触发器通过 tRFC 接收 IDoc,tRFC 在设计上没有响应参数。

若要实现请求和响应模式,必须首先使用 generate schema 命令发现 RFC 架构。 生成的架构包含两个可能的根节点:

  • 请求节点,即你从 SAP 接收的调用
  • 响应节点,即你对 SAP 的回应

在下面的示例中,STFC_CONNECTION RFC 模块生成了请求和响应模式。 解析请求 XML 以提取 SAP 请求 <ECHOTEXT> 的节点值。 响应将当前时间戳作为动态值插入。 从逻辑应用工作流向 SAP 发送 STFC_CONNECTION RFC 时,会收到类似的响应。

<STFC_CONNECTIONResponse xmlns="http://Microsoft.LobServices.Sap/2007/03/Rfc/">
  <ECHOTEXT>@{first(xpath(xml(triggerBody()?['Content']), '/*[local-name()="STFC_CONNECTION"]/*[local-name()="REQUTEXT"]/text()'))}</ECHOTEXT>
  <RESPTEXT>Azure Logic Apps @{utcNow()}</RESPTEXT>
</STFC_CONNECTIONResponse>

测试工作流

  1. 如果尚未启用消耗逻辑应用资源,请在逻辑应用菜单中选择“概述”。 在工具栏中选择“启用”。

  2. 在设计器工具栏中选择“运行”>“运行”以手动启动工作流。

  3. 若要模拟 Webhook 触发器有效负载并触发工作流,请使用 HTTP 请求工具及其说明,将 HTTP 请求发送到工作流的“请求”触发器创建的终结点 URL,包括“请求”触发器预期的方法。 确保在请求中加入消息内容。

    此示例使用“POST”方法和终结点 URL 发送 IDoc 文件,该文件必须采用 XML 格式,并包含所选 SAP 操作的命名空间,例如:

    <?xml version="1.0" encoding="UTF-8" ?>
    <Send xmlns="http://Microsoft.LobServices.Sap/2007/03/Idoc/2/ORDERS05//720/Send">
      <idocData>
        <...>
      </idocData>
    </Send>
    
  4. 发送 HTTP 请求之后,等待工作流返回响应。

现已创建一个可以发送 IDocs 并与 SAP 服务器通信的工作流。 现在你已经为你的工作流建立了一个 SAP 连接,你可以尝试用 BAPI 和 RFC 进行试验。

工作流超时问题

工作流在以下任一情况下超时:

  • 未在请求超时限制所规定的时间内完成响应所需的所有步骤。 如果发生这种情况,请求可能会被阻止。 为帮助诊断问题,请了解如何检查和监视逻辑应用工作流

  • SAP 系统的处理模式设置为默认“立即触发”的设置,这会导致 IDoc 完成处理前,SAP 系统会阻止 IDoc 传输的入站调用。

    例如,如果 SAP 系统负载不足,则当工作流一次性向 SAP 发送一批 IDocs 时,排队的 IDoc 调用会超时。默认的处理模式会导致 IDoc 完成处理前,SAP 系统会阻止 IDoc 传输的入站调用。 在 Azure 逻辑应用中,工作流操作默认超时为 2 分钟。

    若要解决此问题,请按照“先决条件”部分中的步骤操作,将设置更改为“后台程序触发”

安全类型化

为 SAP 托管操作创建连接时,默认会使用强类型化通过针对架构执行 XML 验证来检查无效值。 此行为可帮助提前检测问题。 “安全类型化”选项用于实现后向兼容,它只会检查字符串长度。 如果选择“安全类型化”,则 SAP 中的 DATS 类型和 TIMS 类型将被视为字符串而不是其 XML 等效形式 xs:time,其中 xmlns:xs="http://www.w3.org/2001/XMLSchema"。 安全类型化会影响所有架构生成操作、“被发送”有效负载和“被接收”响应的发送消息,以及触发器的行为。

使用强类型化时(未启用安全类型化),架构会将 DATS 和 TIMS 类型映射到更简单的 XML 类型:

<xs:element minOccurs="0" maxOccurs="1" name="UPDDAT" nillable="true" type="xs:date"/>
<xs:element minOccurs="0" maxOccurs="1" name="UPDTIM" nillable="true" type="xs:time"/>

使用强类型化发送消息时,DATS 和 TIMS 响应符合匹配的 XML 类型格式:

<DATE>9999-12-31</DATE>
<TIME>23:59:59</TIME>

启用安全类型化时,架构会将 DATS 和 TIMS 类型映射到只施加长度限制的 XML 字符串字段,例如:

<xs:element minOccurs="0" maxOccurs="1" name="UPDDAT" nillable="true">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:maxLength value="8" />
    </xs:restriction>
  </xs:simpleType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="UPDTIM" nillable="true">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:maxLength value="6" />
    </xs:restriction>
  </xs:simpleType>
</xs:element>

在启用安全类型化的情况下发送消息时,DATS 和 TIMS 响应如以下示例所示:

<DATE>99991231</DATE>
<TIME>235959</TIME>

高级方案

更改用于将数据发送到 SAP 的语言标头

从 Azure 逻辑应用连接到 SAP 时,英语是 SAP 连接用于将数据发送到 SAP 服务器的默认语言。 但是,SAP 托管连接器和 SAP 内置连接器以不同的方式处理更改和保存使用的语言。

  • 使用 SAP 内置连接器创建连接时,可以使用连接参数指定语言参数值并将其保存为 SAP 连接参数的一部分。

  • 创建与 SAP 托管连接器的连接时,连接参数没有语言参数。 因此,在此期间,无法指定或用于将数据发送到 SAP 服务器的语言。 相反,在工作流设计时和运行时,连接器会使用发送到你的服务器的每个请求中 Web 浏览器的本地语言。 例如,如果浏览器设置为葡萄牙语,Azure 逻辑应用会创建并测试葡萄牙语的 SAP 连接,但不保存使用该语言的连接。

    但是,可以通过对入站请求使用标准 HTTP 标头 Accept-Language 来设置连接的语言。 大多数 Web 浏览器会根据区域设置来添加 Accept-Language 标头。 在工作流设计器中创建新的 SAP 连接时,Web 浏览器会应用此标头。 所以,你可以更新 Web 浏览器的设置以使用首选语言,或使用 Azure 资源管理器而不是工作流设计器来创建 SAP 连接。

    例如,可以使用名为“收到 HTTP 请求时”的“请求”触发器将带有 Accept-Language 标头的请求发送到逻辑应用工作流。 你的工作流中的所有操作都将收到该标头。 然后,SAP 在其系统消息(如 BAPI 错误消息)中使用指定的语言。 如果未在运行时传递 Accept-Language 标头,则默认使用英语。

    如果你使用 Accept-Language 标头,可能会出现以下错误:请检查你的帐户信息和/或权限,然后重试。在这种情况下,请改为检查 SAP 组件的错误日志。 错误实际上发生在使用标头的 SAP 组件中,因此你可能会收到以下错误消息之一:

    • “SAP.Middleware.Connector.RfcLogonException:选择一种已安装的语言”

    • “SAP.Middleware.Connector.RfcAbapMessageException:选择一种已安装的语言”

单独和显式确认事务

将事务从 Azure 逻辑应用发送到 SAP 时,此交换以两步方式完成,详见 SAP 文档:事务性 RFC 服务器程序

默认情况下,名为“向 SAP 发送消息”的 SAP 托管连接器操作会处理转移函数和在单个调用中确认事务的步骤。 还可以选择分离这些步骤。 分离传输和确认步骤的功能对于不希望在 SAP 中重复事务的场景非常有用。 此类场景包括由于网络问题等原因而发生的故障。

可以使用名为 [IDOC] 向 SAP 发送文档的 SAP 托管连接器操作发送 IDoc,而无需自动确认事务。 然后,可以使用名为 [IDOC - RFC] 确认事务 ID的 SAP 托管连接器操作显式确认事务。当工作流在不同的步骤中单独确认事务时,SAP 系统仅完成一次事务。

在标准工作流中,SAP 内置连接器还具有单独处理传输和确认步骤的操作,也就是 [IDoc] 向 SAP 发送文档[IDOC - RFC] 确认事务 ID

以下示例工作流演示了此模式:

  1. 在设计器中使用空白工作流创建并打开消耗或标准逻辑应用。 添加“请求”触发器。

  2. 若要帮助避免将重复的 IDoc 发送到 SAP,请按照这些备用步骤在 SAP 操作中创建和使用 IDoc 事务 ID

  3. 将名为 [IDOC] 向 SAP 发送文档的 SAP 操作添加到工作流中。 提供发送到 SAP 系统的 IDoc 的信息以及以下值:

    参数 价值 说明
    确认 TID 请勿自动确认事务 ID,这在单独的步骤中显式发生。
    事务 Id GUID <IDoc-transaction-ID> 如果此参数未自动显示,请打开“添加新参数”列表,然后选择参数。

    可以手动指定此值,或者连接器可以自动生成此 GUID 作为 [IDOC] 向 SAP 发送文档操作的输出。 此示例将此参数留空以自动生成 GUID。

    消耗工作流

    屏幕截图显示了一个消耗工作流和名为“IDOC 向 SAP 发送文档”的操作。

    标准工作流

    屏幕截图显示了一个标准工作流和名为“IDOC 向 SAP 发送文档”的操作。

  4. 在名为 [IDOC] 向 SAP 发送文档的 SAP 操作上,打开“设置”以查看重试策略

    默认选项是建议的策略,但你可以根据特定需求选择自定义策略。 如果选择使用自定义策略,请至少设置一次重试以克服临时网络中断。

  5. 现在,添加名为 [IDOC - RFC] 确认事务 ID的 SAP 操作。

    1. 事务 ID 参数中,在编辑框中选择以打开动态内容列表。

    2. 在列表中的 [IDOC] 向 SAP 发送文档下,选择事务 ID 值,这是上一个 SAP 操作的输出。

      消耗工作流

      屏幕截图显示消耗工作流和名为“确认事务 ID”的操作,它包含来自之前操作的 GUID 输出。

      标准工作流

      屏幕截图显示标准工作流和名为“确认事务 ID”的操作,它包含来自之前操作的 GUID 输出。

    此步骤完成以后,会在两端(SAP 连接器端和 SAP 系统端)将当前的事务标记为完成。

避免发送具有事务 ID 变量的重复 IDoc

如果你的工作流遇到问题,向 SAP 发送了重复的 IDoc,可以创建一个字符串变量,用作 IDoc 事务标识符。 然后,可以使用此标识符来帮助防止在临时中断、网络问题或确认丢失等情况下发生重复网络传输。

  1. 在设计器中,添加“请求”触发器后,在添加名为“[IDOC] 向 SAP 发送文档”的 SAP 操作之前,将名为“初始化变量”的操作添加到工作流中。

  2. 将操作重命名为“创建 IDoc 事务 ID”。

  3. 在操作信息框中提供以下参数值:

    参数 价值 描述
    名称 <variable-name> 变量的名称,例如 IDocTransactionID
    类型 字符串 变量类型
    guid() 在编辑框中选择,打开表达式或函数编辑器,然后输入 guid()。 保存所做更改。

    现在“”参数设置为 guid() 函数,该函数将生成 GUID。

    消耗工作流

    屏幕截图显示了一个消耗工作流和名为“创建事务 ID”的操作。

    标准工作流

    屏幕截图显示了一个标准工作流和名为“创建事务 ID”的操作。

    注意

    SAP 系统会在指定时间后(默认情况下为 24 小时)忘记事务标识符。 因此,如果 ID 或 GUID 未知,SAP 一定会确认事务标识符。 如果确认事务标识符失败,则表明在 SAP 能够确认之前,与 SAP 系统的通信就已失败。

  4. 将名为 [IDOC] 向 SAP 发送文档的 SAP 操作添加到工作流中。 提供发送到 SAP 系统的 IDoc 的信息以及以下值:

    参数 价值 说明
    确认 TID 请勿自动确认事务 ID,这在单独的步骤中显式发生。
    事务 Id GUID <IDoc-transaction-ID> 如果此参数未自动显示,请打开“添加新参数”列表,然后选择参数。 若要选择所创建的事务 ID 变量,请执行以下步骤:

    1. 在事务 ID GUID 参数中,在编辑框中选择以打开动态内容列表。

    2. 从列表中的“变量”下,选择之前创建的变量,在本例中为 IDocTransactionID

    消耗工作流

    屏幕截图显示了一个消耗工作流和名为“IDOC 向 SAP 发送文档”的操作。

    标准工作流

    屏幕截图显示了一个标准工作流和名为“IDOC 向 SAP 发送文档”的操作。

  5. 对于名为 [IDOC] 向 SAP 发送文档的 SAP 托管操作,打开“设置”以查看重试策略

    默认选项是建议的策略,但你可以根据特定需求选择自定义策略。 如果选择使用自定义策略,请至少设置一次重试以克服临时网络中断。

    备注

    目前只有托管连接器操作具有重试策略设置,而内置的、基于服务提供者的连接器没有。

  6. 现在,添加名为 [IDOC - RFC] 确认事务 ID的 SAP 操作。

    1. 事务 ID 参数中,在编辑框中选择以打开动态内容列表。

    2. 从列表中的“变量”下,选择创建的变量名,在本例中为 IDocTransactionID

      消耗工作流

      屏幕截图显示了一个消耗工作流和使用变量、名为“确认事务 ID”的操作。

      标准工作流

      屏幕截图显示了一个标准工作流和使用变量、名为“确认事务 ID”的操作。

  7. (可选)在测试环境中验证重复数据删除。

    1. 添加另一个名为 [IDOC] 向 SAP 发送文档的 SAP 操作。 在“事务 ID”参数中,选择在上一步中使用的事务 ID GUID。

    2. 要验证每次调用名为“[IDOC] 向 SAP 发送文档”的操作后是否分配了 IDoc 编号,请将名为“[IDOC] 获取事务的 IDOC 列表”的操作添加到工作流,并采用相同的“事务 ID”和“接收”方向。

      如果两个调用返回了相同的 IDoc 编号,则 IDoc 已进行了去重。

如果两次发送相同的 IDoc,可以验证 SAP 是否可以识别 tRFC 调用的重复项,并将两个调用解析为一条入站 IDoc 消息。

排查问题

连接问题

在连接创建期间,如果收到以下错误,则说明 SAP NCo 客户端库的安装存在问题:

测试连接失败。 错误“无法处理请求”。 错误详细信息:“无法加载文件或程序集 'sapnco, Version=3.0.0.42, Culture=neutral, PublicKeyToken 50436dca5c7f7d23' 或某个依赖项。 系统找不到指定的文件。

确保安装所需版本的 SAP NCo 客户端库并满足所有其他先决条件

500 Bad Gateway 或 400 Bad Request 错误

如果收到“500 网关错误”或“400 请求错误”,并且其中包含类似“sapgw00 服务未知”的消息,则对端口号的网络服务名称解析失败,例如:

{
   "body": {
      "error": {
         "code": 500,
         "source": "EXAMPLE-FLOW-NAME.eastus.environments.microsoftazurelogicapps.net",
         "clientRequestId": "00000000-0000-0000-0000-000000000000",
         "message": "BadGateway",
         "innerError": {
            "error": {
               "code": "UnhandledException",
               "message": "\nERROR service 'sapgw00' unknown\nTIME Wed Nov 11 19:37:50 2020\nRELEASE 721\nCOMPONENT NI (network interface)\nVERSION 40\nRC -3\nMODULE ninti.c\nLINE 933\nDETAIL NiPGetServByName: 'sapgw00' not found\nSYSTEM CALL getaddrinfo\nCOUNTER 1\n\nRETURN CODE: 20"
            }
         }
      }
   }
}
  • 选项 1:在 API 连接和触发器配置中,将网关服务名称替换为其端口号。 在错误示例中,sapgw00 需要替换为实际端口号,例如 3300

  • 选项 2:如果使用的是本地数据网关,可以将网关服务名称添加到 中的端口映射,然后重启本地数据网关服务,例如:

    sapgw00  3300/tcp
    

SAP 应用程序服务器或消息服务器名称解析为 IP 地址时,可能会出现类似的错误。 对于本地数据网关,可以改为将名称添加到 %windir%\System32\drivers\etc\hosts 中的 IP 地址映射,例如:

10.0.1.9 SAPDBSERVER01 # SAP System Server VPN IP by computer name
10.0.1.9 SAPDBSERVER01.someguid.xx.xxxxxxx.chinacloudapp.cn # SAP System Server VPN IP by fully qualified computer name

将 IDoc 数据包从 SAP 发送到触发器时出错

如果无法将 IDoc 数据包从 SAP 发送到触发器,请参阅 SAP tRFC (T-code SM58) 对话框中的事务性 RFC (tRFC) 调用拒绝消息。 在 SAP 接口中,你可能会得到以下错误消息,由于“状态文本”字段上的 substring 限制,这些消息会被剪裁。

在 IDoc 元数据中找不到段或组定义 E2EDK36001

此错误消息表示出现预期故障和其他错误。 例如,由于 IDoc XML 有效负载的片段不是由 SAP 发布的,因此无法生成该有效负载。 因此,缺少转换所需的段类型元数据。

若要将这些段发布到 SAP,请联系 SAP 系统的 ABAP 工程师。

IReplyChannel 上的 RequestContext 已关闭,未发送回复

对于 SAP 托管连接器,此错误消息表示当通道的通用处理程序由于错误终止通道并重建通道以处理其他消息时,发生了意外的失败。

注意

SAP 托管触发器是一种 Webhook 触发器,它使用了基于 SOAP 的 SAP 适配器。 但是,SAP 内置触发器是基于 Azure Functions 的触发器,它不使用 SOAP SAP 适配器,不会收到此错误消息。

  • 若要确认逻辑应用工作流已收到 IDoc,请添加一个会返回 200 OK 状态代码的响应操作。 将正文留空,不更改标头或向其添加内容。 IDoc 是通过 tRFC 传输的,tRFC 不允许响应有效负载。

  • 若要改为拒绝 IDoc,请使用除 200 OK 以外的任何 HTTP 状态代码。 然后,SAP 适配器会代表你将异常返回到 SAP。 你应仅拒绝 IDoc 将传输错误的信号发回到 SAP,如应用程序无法处理的被错误路由的 IDoc。 不应因应用程序级别的错误而拒绝 IDoc,例如 IDoc 中包含有问题的数据。 如果因应用程序级别的验证延迟传输接受,可能会由于阻碍连接传输其他 IDoc,而对性能造成不良影响。

  • 如果收到此错误消息,并在调用 Azure 逻辑应用时出现系统故障,请检查是否已针对你的特定环境为本地数据网关服务配置网络设置。 例如,如果网络环境需要使用代理来调用 Azure 终结点,则需要将本地数据网关服务配置为使用代理。 有关详细信息,请参阅代理配置

  • 如果收到此错误消息,并在调用 Azure 逻辑应用时出现间歇性故障,则可能需要增加重试次数和/或重试间隔时间,请按照以下步骤操作:

    1. 检查名为 Microsoft.PowerBI.EnterpriseGateway.exe.config 的本地数据网关服务配置文件中的 SAP 设置。

      1. configuration 根节点下,添加一个 configSections 元素(如果不存在)。

      2. configSections 节点下,添加一个具有以下属性的 section 元素(如果不存在):name="SapAdapterSection" type="Microsoft.Adapters.SAP.Common.SapAdapterSection, Microsoft.Adapters.SAP.Common"

        重要

        不要更改现有 section 元素中的属性(如果此类元素已存在)。

        如果网关服务配置中未声明其他节或节组,则 configSections 元素类似于以下版本:

        <configSections>
          <section name="SapAdapterSection" type="Microsoft.Adapters.SAP.Common.SapAdapterSection, Microsoft.Adapters.SAP.Common"/>
        </configSections>
        
      3. configuration 根节点下,添加一个 SapAdapterSection 元素(如果不存在)。

      4. SapAdapterSection 节点下,添加一个具有以下属性的 Broker 元素(如果不存在):WebhookRetryDefaultDelay="00:00:00.10" WebhookRetryMaximumCount="2"

        重要

        更改 Broker 元素的属性,即使该元素已存在。

        如果 SAP 适配器配置中未声明其他元素或属性,则 SapAdapterSection 元素类似于以下版本:

        <SapAdapterSection>
          <Broker WebhookRetryDefaultDelay="00:00:00.10" WebhookRetryMaximumCount="2" />
        </SapAdapterSection>
        

        重试次数设置类似于 WebhookRetryMaximumCount="2"。 重试间隔设置类似于 WebhookRetryDefaultDelay="00:00:00.10",其中时间跨度格式为 HH:mm:ss.ff

      注意

      有关配置文件的详细信息,请查看 .NET Framework 的配置文件架构

    2. 保存所做更改。

    3. 如果使用的是本地数据网关,请重启网关。

后续步骤