从 Azure 逻辑应用中的工作流连接到 SAP

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

本操作指南包含多个部分,介绍了如何使用 SAP 连接器从 Azure 逻辑应用中的工作流访问 SAP 服务器。 你可以使用 SAP 连接器操作来创建自动化工作流,这些工作流在被 SAP 服务器或其他系统中的事件触发后运行,通过运行操作来管理 SAP 服务器上的资源。

标准和消耗逻辑应用工作流都提供在多租户 Azure 中托管和运行的 SAP 托管连接器。

SAP 兼容性

SAP 连接器与以下类型的 SAP 系统兼容:

  • 本地和基于云的 SAP HANA 系统,例如 S/4 HANA。

  • 经典本地 SAP 系统,例如 R/3 和 ECC。

SAP 必须支持要连接的 SAP 系统版本。 否则,可能无法解决有可能遇到的任何问题。 有关 SAP 系统版本和维护信息的详细信息,请查看 SAP 产品可用性对照表 (PAM)

SAP 连接器支持基于 SAP NetWeaver 的系统中的以下消息和数据集成类型:

  • 中间文档 (IDoc)

  • 商业应用程序编程接口 (BAPI)

  • 远程函数调用 (RFC) 和事务 RFC (tRFC)

SAP 连接器使用 SAP .NET 连接器 (NCo) 库

若要使用 SAP 连接器操作,必须先对连接进行身份验证,并使用以下选项:

可以将 SNC 用于 SAP NetWeaver 单一登录 (SSO),或用于外部产品的安全功能。 如果选择使用 SNC,请查看 SNC 先决条件ISE 连接器的 SNC 先决条件

连接器技术参考

FTP 连接器具有不同的版本,具体取决于逻辑应用类型和主机环境

逻辑应用 环境 连接器版本
消耗 多租户 Azure 逻辑应用 托管连接器,显示在设计器中的“企业”标签下。 有关详细信息,请查看以下文档:

- SAP 托管连接器参考
- Azure 逻辑应用中的托管连接器
标准 单租户 Azure 逻辑应用和应用服务环境 v3(仅限 Windows 计划) 托管连接器显示在连接器库中的“运行时”>“共享”下,而内置连接器显示在连接器库中的“运行时”>“应用内”下,并且基于服务提供商。 内置连接器可以使用连接字符串直接访问 Azure 虚拟网络,不需要本地数据网关。 有关详细信息,请查看以下文档:

- SAP 托管连接器参考
- SAP 内置连接器参考

- Azure 逻辑应用中的托管连接器
- Azure 逻辑应用中的内置连接器

连接器差异

SAP 内置连接器在以下方面与 SAP 托管连接器和 SAP ISE 版本控制连接器明显不同:

  • 本地连接不需要本地数据网关。

    SAP 内置连接器改为直接与集成虚拟网络中的 SAP 服务器通信,从而避免了网络网关的跃点、延迟和故障点。 请确保使用逻辑应用工作流应用程序上传或部署不可再发行的 SAP 客户端库。 有关详细信息,请参阅本指南中的先决条件

  • 支持高达 100 MB 的有效负载大小,因此不必对大型请求使用 Blob URI。

  • 特定操作可用于调用 BAPI调用 RFC发送 IDoc。 这些专用操作为有状态 BAPI、RFC 事务和 IDoc 重复数据删除提供了更好的体验,并且不使用较旧的 SOAP Windows Communication Foundation (WCF) 消息传送模型。

    调用 BAPI操作最多包括两个响应,其中包含返回的 JSON、来自调用 BAPI 的 XML 响应以及 BAPI 提交或 BAPI 回滚响应(如果使用自动提交)。 此功能解决了 SAP 托管连接器的问题,即自动提交的结果无提示,只能通过日志观察到。

  • 与托管连接器和 ISE 版本控制连接器相比,超时时间更长,为 5 分钟。

    SAP 内置连接器不使用共享或全局连接器基础结构,这意味着与 SAP 托管连接器(两分钟)和 SAP ISE 版本连接器(四分钟)相比,超时时间更长,为 5 分钟。 长时间运行的请求无需实现长时间运行的基于 Webhook 的请求操作模式即可运行。

  • 默认情况下,SAP 内置连接器操作是无状态的。 但是,可以为这些操作启用有状态模式(相关性)

    在有状态模式下,SAP 内置连接器支持高可用性和水平横向扩展配置。 相比之下,SAP 托管连接器对本地数据网关的限制仅限于触发器的单个实例,以及仅在故障转移模式下执行操作的群集。 有关详细信息,请参阅SAP 托管连接器 - 已知问题和限制

  • 标准逻辑应用工作流需要并使用 SAP NCo 3.1 客户端库,而不是 SAP NCo 3.0 版本。 有关详细信息,请参阅先决条件

  • 标准逻辑应用工作流提供应用程序设置,可在其中指定个人安全环境 (PSE) 和 PSE 密码。

    此更改可阻止上传多个 PSE 文件,这不受支持并会导致 SAP 连接失败。 在消耗型逻辑应用工作流中,SAP 托管连接器允许通过连接参数指定这些值,这允许上传多个 PSE 文件,但不受支持,会导致 SAP 连接失败。

  • 生成架构操作

    • 可以从多种操作类型(例如 BAPI、IDoc、RFC 和 tRFC)中进行选择,而 SAP 托管连接器中的相同操作使用SapActionUris参数和文件系统选取器体验。

    • 可以直接提供参数名称作为自定义值。 例如,可以从调用 RFC操作指定RFC 名称参数。 相比之下,在 SAP 托管连接器中,必须提供复杂的操作 URI参数名称。

    • 根据设计,此操作不支持在 SAP 托管连接器支持的单个操作执行中为 RFC、BAPI 或 IDocs 生成多个架构。 此功能更改现在可阻止尝试在单个调用中发送大量内容。

连接器参数

除了简单的字符串和数字输入,SAP 连接器还接受以下表参数(Type=ITAB 输入):

  • 适用于较早 SAP 版本的表方向参数(输入和输出)。
  • 参数更改,用于替换较新 SAP 版本的表方向参数。
  • 分层表参数。

已知问题和限制

SAP 托管连接器

  • SAP 连接器目前不支持 SAP 路由器字符串。 本地数据网关必须存在于虚拟网络上,网关可以在该虚拟网络上直接访问要连接的 SAP 系统。

  • 通常,SAP 触发器不支持数据网关群集。 在某些故障转移案例中,与 SAP 系统通信的数据网关节点可能不同于主动节点,从而导致意外的行为。

    • 对于“发送消息”方案,支持在故障转移模式下使用数据网关群集。

    • 监控状态的 SAP 操作不支持在负载均衡模式下使用数据网关群集。 监控状态通信必须保留在同一个数据网关群集节点上。 请在非群集模式或仅为故障转移设置的群集中使用数据网关。 例如,这些操作包括:

      • 指定会话 ID 值的所有操作
      • [BAPI] 提交事务
      • [BAPI] 回退事务
      • [BAPI-RFC] 关闭监控状态会话
      • [BAPI-RFC] 创建监控状态会话
  • 在名为“[BAPI] 调用 SAP 中的方法”的操作中,如果该操作返回的 CallBapiResponse 对象中至少存在一个警告,则自动提交功能将不会提交 BAPI 更改。 若要在出现任何警告的情况下提交 BAPI 更改,请执行以下步骤:

    1. 使用名为“[BAPI - RFC] 创建监控状态会话”的操作显式创建会话。
    2. 在名为“[BAPI] 调用 SAP 中的方法”的操作中,禁用自动提交功能。
    3. 改为调用名为“[BAPI] 提交事务”的操作。

与 SAP 消息服务器的基于 IP 的连接(负载均衡配置)

如果指定一个 IP 地址以连接到 SAP 消息服务器(例如负载均衡器),连接可能仍然会失败,并显示类似于“主机名�SAPDBSERVER01.example.com�未知”的错误消息。 消息服务器指示 SAP 连接器使用一个主机名连接到后端 SAP 应用程序服务器或负载均衡器后的服务器。 如果 DNS 无法解析该主机名,连接失败。

对于此问题,存在以下解决方法或解决方案:

  • 确保建立连接的客户端(如具有 SAP 连接器的本地数据网关的计算机或基于 ISE 的 SAP 连接器的 ISE 连接器主机)可以解析消息服务器返回的主机名。

  • 在名为 RZ11 的事务中,更改或添加名为 ms/lg_with_hostname=0 的 SAP 设置

问题上下文或背景

SAP 将其 .NET 连接器 (NCo) 升级到版本 3.1,这改变了连接器从消息服务器请求连接到后端服务器的方式。 连接器现通过消息服务器使用新的 API 进行应用程序服务器解析,除非你通过名为 ms/lg_with_hostname=0` 的设置强制连接器使用以前的 API。 有关详细信息,请参阅 SAP 知识库文章 3305039 - 在登录组登录期间未考虑 SMLG IP 地址设置

先决条件

  • Azure 帐户和订阅。 如果没有 Azure 订阅,请注册一个 Azure 帐户

  • 要从 Azure 逻辑应用访问的 SAP 应用程序服务器SAP 消息服务器

    • 请将你的 SAP 服务器和用户帐户设置为允许使用 RFC。

      如要了解包括受支持的用户帐户类型和每种操作类型所需的最低授权(RFC、BAPI、IDoc)等更多详情,请查看以下 SAP 说明:460089 - 适用于外部 RFC 计划的最低授权配置文件

    • SAP 用户帐户需要访问 RFC_METADATA 函数组和相应的函数模块,以便执行以下操作:

      Operations 访问功能模块
      RFC 操作 RFC_GROUP_SEARCHDD_LANGU_TO_ISOLA
      BAPI 操作 BAPI_TRANSACTION_COMMITBAPI_TRANSACTION_ROLLBACKRPY_BOR_TREE_INITSWO_QUERY_METHODSSWO_QUERY_API_METHODS
      IDoc 操作 IDOCTYPES_LIST_WITH_MESSAGESIDOCTYPES_FOR_MESTYPE_READINBOUND_IDOCS_FOR_TIDOUTBOUND_IDOCS_FOR_TIDGET_STATUS_FROM_IDOCNRIDOC_RECORD_READ
      读取 SAP 表操作 RFC BBP_RFC_READ_TABLERFC_READ_TABLE
      为您的 SAP 连接授予对 SAP 服务器的严格最低访问权限 RFC_METADATA_GETRFC_METADATA_GET_TIMESTAMP
  • 你要从其访问 SAP 服务器的逻辑应用工作流。

  • 默认情况下,SAP 内置连接器操作是无状态的。 若要在监控状态模式下运行这些操作,请参阅为无状态内置连接器启用监控状态模式

  • 若要使用名为“收到消息时”的 SAP 托管或内置连接器触发器,请完成以下任务

    • 设置 SAP 网关的安全权限或访问控制列表 (ACL)。 在显示 secinfo 和 reginfo 文件的“网关监视器”(T-Code SMGW) 对话框中,打开“转到”菜单,选择“专家功能”>“外部安全”>“ACL 文件维护”。

      需要以下权限设置:

      P TP=LOGICAPP HOST=<on-premises-gateway-server-IP-address> ACCESS=*

      此行格式如下:

      P TP=<trading-partner-identifier-(program-name)-or-*-for-all-partners> HOST=<comma-separated-list-with-external-host-IP-or-network-names-that-can-register-the-program> ACCESS=<*-for-all-permissions-or-a-comma-separated-list-of-permissions>

      如果未配置 SAP 网关安全权限,则可能会收到以下错误:

      不允许从主机 host-name> 注册 tp Microsoft.PowerBI.EnterpriseGateway

      有关详细信息,请参阅 SAP 说明 1850230 - GW:“不允许注册事务程序<程序 ID>”

    • 设置 SAP 网关安全日志记录,以帮助查找访问控制列表 (ACL) 问题。 有关详细信息,请参阅设置网关日志记录的 SAP 帮助主题

    • 在“RFC 连接配置”(T-Code SM59) 对话框中,使用“TCP/IP”类型创建 RFC 连接。 确保“激活类型”设置为“已注册的服务器程序”。 将 RFC 连接的“与目标系统的通信类型”值设为“Unicode”。

    • 如果使用“IDOC 格式”参数设置为“FlatFile”的 SAP 触发器和“平面文件解码”操作,则必须在平面文件架构中使用 属性,并将值设为

      因为在 tRFC 调用 IDOC_INBOUND_ASYNCHRONOUS 中由 SAP 发送的平面文件 IDoc 数据记录不会填充到完整的 SDATA 字段长度,所以这是必要要求。 Azure 逻辑应用会提供未填充的平面文件 IDoc 原始数据,与接收自 SAP 的格式相同。 此外,将此 SAP 触发器与平面文件解码操作组合使用时,提供给操作的架构必须与之相匹配。

    注意

    在消耗和标准工作流中,名为“收到消息时”的 SAP 托管触发器使用相同的 URI 位置来续订和取消订阅 Webhook 订阅。 续订操作使用 HTTP PATCH 方法,而取消订阅操作使用 HTTP DELETE 方法。 此行为可能会使续订操作在触发器历史记录中显示为取消订阅操作,但实际上它仍然是续订操作,因为触发器使用 PATCH 作为 HTTP 方法,而不是 DELETE

    在标准工作流中,名为“收到消息时”的 SAP 内置触发器改为使用 Azure Functions 触发器,并仅显示来自 SAP 的实际回调

    • WEBSITE_PRIVATE_IP:将此环境变量值设置为 127.0.0.1 作为 localhost 地址。
    • WEBSITE_PRIVATE_PORTS:将此环境变量值设置为本地计算机上的两个空闲可用端口,用逗号 (,) 分隔这两个值,例如 8080,8088。
  • 要发送到 SAP 服务器的消息内容,例如示例 IDoc 文件。 此内容必须采用 XML 格式,并且包含要使用的 SAP 操作的命名空间。 你可以通过将 IDoc 包装在 XML 信封中来发送带有平面文件架构的 IDoc

网络连接先决条件

SAP 系统需要来自 SAP .NET 连接器 (NCo) 库主机的网络连接:

  • 对于多租户 Azure 逻辑应用中的消耗逻辑应用工作流,本地数据网关托管 SAP .NET 连接器 (NCo) 库。 如果你使用本地数据网关群集,群集的所有节点都需要与 SAP 系统建立网络连接。

  • 对于单租户 Azure 逻辑应用中的标准逻辑应用工作流,逻辑应用资源托管 SAP .NET 连接器 (NCo) 库。 因此,逻辑应用资源本身必须启用虚拟网络集成,并且该虚拟网络必须与 SAP 系统建立网络连接。

  • 对于 ISE 中的消耗逻辑应用工作流,ISE 虚拟网络托管 SAP .NET 连接器 (NCo) 库。

SAP 系统所需的网络连接包括以下服务器和服务:

  • SAP 应用程序服务器、Dispatcher 服务(适用于所有登录类型)

    SAP 系统可以包含多个 SAP 应用程序服务器。 SAP .NET 连接器 (NCo) 库的主机需要能够访问每个服务器及其服务。

  • SAP 消息服务器、消息服务(用于登录类型组)

    消息服务器和服务将重定向到一个或多个应用程序服务器的 Dispatcher 服务。 SAP .NET 连接器 (NCo) 库的主机需要能够访问每个服务器及其服务。

  • SAP 网关服务器、网关服务

  • SAP 网关服务器、网关保护服务

    SAP 系统所需的网络连接也包括此服务器和服务,以便与安全网络通信 (SNC) 一起使用。

从应用程序服务器、Dispatcher 服务到网关服务器、网关服务的请求重定向是在 SAP .NET 连接器 (NCo) 库中自动发生的。 即使连接参数中只提供了应用程序服务器、Dispatcher 服务信息,也会发生此重定向。

如果在 SAP 系统前面使用负载均衡器,就必须将所有服务重定向到各自的服务器。 有关 SAP 服务和端口的详细信息,请查看 所有 SAP 产品的 TCP/IP 端口

注意

确保从 SAP .NET 连接器 (NCo) 库的主机启用了网络连接,并且所需的端口在防火墙和网络安全组上处于打开状态。 否则,你会收到诸如“无法从 NI (网络接口)组件访问合作伙伴”之类的错误,以及诸如“WSAECONNREFUSED: 连接被拒绝”之类的错误文本。

SAP NCo 客户端库先决条件

若要使用 SAP 连接器,必须安装适用于 Microsoft .NET 3.1 的 SAP 连接器 NCo 客户端库。 以下列表根据使用 SAP 连接器的工作流介绍了安装 SAP NCo 客户端库的先决条件:

  • 版本:

  • 根据你的方案,从客户端库的默认安装文件夹,将程序集 (.dll) 文件复制到其他位置,如下所示。 或者,如果仅使用 SAP 托管连接器,请在安装 SAP NCo 客户端库时选择“全局程序集缓存注册”。 ISE zip 存档和 SAP 内置连接器目前不支持 GAC 注册。

    • 对于在多租户 Azure 逻辑应用中运行并使用本地数据网关的消耗工作流,请将以下程序集 (.dll) 文件复制到本地数据网关安装文件夹,例如 C:\Program Files\On-Premises Data Gateway。 SAP NCo 3.0 客户端库包含以下程序集:

      • libicudecnumber.dll
      • rscp4n.dll
      • sapnco.dll
      • sapnco_utils.dll

      确保将程序集文件复制到数据网关的安装文件夹。 否则,SAP 连接可能会失败并显示错误消息:“请检查你的帐户信息和/或权限,然后重试”。 可以使用 .NET 程序集绑定日志查看器来排除进一步的问题。 使用此工具可以检查程序集文件是否位于正确的位置。

    • 对于标准工作流,请将以下程序集 (.dll) 文件复制到可分别在 Azure 门户或本地 Visual Studio Code 中将文件上传到要在其中生成工作流的逻辑应用资源或项目的位置。 SAP NCo 3.1 客户端库包含以下程序集:

      • rscp4n.dll
      • sapnco.dll
      • sapnco_utils.dll
    • 对于 ISE 中的消耗工作流,请遵循 ISE 先决条件

SAP NCo 客户端库、.NET Framework、.NET 运行时和数据网关之间存在以下关系:

  • Microsoft SAP 适配器和网关主机服务都使用 .NET Framework 4.7.2。

  • SAP NCo for .NET Framework 4.0 适用于使用 .NET 运行时 4.0 到 4.8 的进程。

  • SAP NCo for .NET Framework 2.0 适用于使用 .NET 运行时 2.0 到 3.5 的进程,但不再适用于最新网关。

SNC 先决条件

对于使用本地数据网关和 SNC(可选)的多租户 Azure 逻辑应用中的消耗工作流,还必须配置以下设置。

  • 确保 SNC 库的版本及其依赖项与 SAP 环境兼容。 若要排查任何库兼容性问题,可以使用本地数据网关和数据网关日志。

  • 请确保将 SAP NCo 3.0 客户端库中的以下程序集 (.dll) 文件复制到本地数据网关的安装文件夹,例如 C:\Program Files\On-Premises Data Gateway

    • libicudecnumber.dll
    • rscp4n.dll
    • sapnco.dll
    • sapnco_utils.dll
  • 对于 SAPGENPSE 实用工具,必须专门使用 sapgenpse.exe。

  • 如果通过连接提供个人安全环境 (PSE),则无需为本地数据网关复制和设置 PSE 和 SECUDIR。

  • 如果通过外部安全产品(例如 sapseculib、Kerberos 或 NTLM)启用 SNC,请确保 SNC 库与数据网关安装位于同一台计算机上。 对于此任务,请将 SNC 库的二进制文件复制到本地计算机上的数据网关安装所在的文件夹,例如 C:\Program Files\On-Premises Data Gateway

    注意

    在具有数据网关安装和 SNC 库的计算机上,请勿为 SNC_LIB 和 SNC_LIB_64 设置环境变量。 否则,这些环境变会优先于通过连接器传递的 SNC 库值。

  • 若要将 SNC 用于单一登录 (SSO),请确保以映射到 SAP 用户的用户身份运行数据网关服务。 若要更改网关服务帐户的默认帐户,请选择“更改帐户”并输入用户凭据。

    屏幕截图:显示本地数据网关安装程序和“服务设置”页面,已选中“更改网关服务帐户”按钮。

有关启用 SNC 的详细信息,请参阅启用安全网络通信 (SNC)

Azure 逻辑应用环境先决条件

对于多租户 Azure 逻辑应用中的消耗工作流,SAP 托管连接器通过本地数据网关与 SAP 系统集成。 例如,在将工作流发送消息到 SAP 系统的方案中,数据网关将充当 RFC 客户端,将从工作流收到的请求转发到 SAP。 同样,在工作流从 SAP 接收消息的方案中,数据网关将充当 RFC 服务器,接收来自 SAP 的请求并将其转发到工作流。

  1. 在与要连接的 SAP 系统位于同一虚拟网络中的主机或虚拟机上,下载并安装本地数据网关

    数据网关有助于安全访问本地数据和资源。 请确保使用受支持版本的网关。 如果网关遇到问题,请尝试升级到最新版本,其中可能包括可解决问题的更新。

  2. 在 Azure 门户中,为本地数据网关安装创建 Azure 网关资源

  3. 在安装本地数据网关的同一台本地计算机上,下载并安装最新的 SAP NCo 客户端库

  4. 针对安装了本地数据网关的主机,请配置网络主机名和服务名称解析。

    • 在从 Azure 逻辑应用连接时,如果要使用主机名或服务名称,必须为每个 SAP 应用程序、消息和网关服务器及其服务设置名称解析:

      • 在 %windir%\System32\drivers\etc\hosts 文件中,或在本地数据网关安装的主机可用的 DNS 服务器中,设置网络主机名称解析。

      • 在 %windir%\System32\drivers\etc\services 文件中设置服务名称解析。

    • 如果你不打算使用网络主机名或服务名称进行连接,可以改用主机 IP 地址和服务端口号。

    • 如果没有适用于 SAP 系统的 DNS 条目,请参阅下例中适合主机文件的条目示例:

      10.0.1.9           sapserver                   # SAP single-instance system host IP by simple computer name
      10.0.1.9           sapserver.contoso.com       # SAP single-instance system host IP by fully qualified DNS name
      

      以下列表显示了服务文件的示例条目集:

      sapdp00            3200/tcp              # SAP system instance 00 dialog (application) service port
      sapgw00            3300/tcp              # SAP system instance 00 gateway service port
      sapmsDV6           3601/tcp              # SAP system ID DV6 message service port
      

将二进制 PSE 文件转换为 base64 编码格式

  1. 使用 PowerShell 脚本,例如:

    Param ([Parameter(Mandatory=$true)][string]$psePath, [string]$base64OutputPath)
    $base64String = [convert]::ToBase64String((Get-Content -path $psePath -Encoding byte))
    if ($base64OutputPath -eq $null)
    {
        Write-Output $base64String
    }
    else
    {
        Set-Content -Path $base64OutputPath -Value $base64String
        Write-Output "Output written to $base64OutputPath"
    } 
    
  2. 将脚本保存为 pseConvert.ps1 文件,然后调用该脚本,例如:

    .\pseConvert.ps1 -psePath "C:\Temp\SECUDIR\request.pse" -base64OutputPath "connectionInput.txt"
    Output written to connectionInput.txt 
    

    如果未提供输出路径参数,则脚本到控制台的输出将包含换行符。 删除连接输入参数的 base 64 编码字符串的换行符。

设置并测试将 IDoc 从 SAP 发送到工作流

仅当使用逻辑应用工作流测试 SAP 配置时,才按照这些步骤操作。 生产环境需要其他配置。

若要将 IDoc 从 SAP 发送到工作流,需要满足以下最低配置:

  1. 创建 RFC 目标。
  2. 创建 ABAP 连接。
  3. 创建接收方端口。
  4. 创建发送方端口。
  5. 创建逻辑系统合作伙伴。
  6. 创建合作伙伴配置文件。
  7. 测试发送消息。

创建 RFC 目标

此目标将逻辑应用工作流标识为接收方端口。

  1. 在 SAP 中,打开“RFC 连接配置”设置。 可以使用带有 /n 前缀的 sm59 事务代码 (T-Code)。

  2. 选择“TCP/IP 连接”“创建”。

  3. 使用以下设置创建新 RFC 目标:

    1. 为“RFC 目标”输入名称。

    2. 在“技术设置”选项卡上,对于“激活类型”,选择“注册服务器程序” 。

    3. 为“程序 ID”输入一个值。 在 SAP 服务器中,使用此标识符来注册工作流的触发器。

      重要

      SAP“程序 ID”区分大小写。 配置工作流和 SAP 服务器时,请确保“程序 ID”始终使用相同的大小写格式。 否则,当你尝试将 IDoc 发送到 SAP 时,可能会在 tRFC 监视器 (T-Code SM58) 中收到以下错误:

      • 找不到函数 IDOC_INBOUND_ASYNCHRONOUS
      • 不支持非 ABAP RFC 客户端(合作伙伴类型)

      有关 SAP 的详细信息,请参阅以下说明(需要登录):

    4. 在“Unicode”选项卡上,对于“与目标系统的通信类型”,选择“Unicode” 。

      注意

      SAP .NET 客户端库仅支持 Unicode 字符编码。 如果在将 IDoc 从 SAP 发送到 Azure 逻辑应用时出现错误“不支持非 ABAP RFC 客户端(合作伙伴类型)”,请检查“与目标系统的通信类型”值是否设置为“Unicode”。

  4. 保存所做更改。

  5. 创建一个以名为“收到消息时”的 SAP 托管触发器启动的逻辑应用工作流,使用 Azure 逻辑应用注册新的“程序 ID”。

    这样一来,保存工作流时,Azure 逻辑应用就会在 SAP 网关上注册“程序 ID”。

  6. 在工作流的触发器历史记录、本地数据网关 SAP 适配器日志(如适用)和 SAP 网关跟踪日志中检查注册状态。

    在 SAP 网关监视器对话框 (T-Code SMGW) 中,在“已登录客户端”下,新注册显示为“已注册的服务器”。

  7. 若要测试连接,请在新“RFC 目标”下,选择“连接测试”。

创建 ABAP 连接

此目标将 SAP 系统标识为发送方端口。

  1. 在 SAP 中,打开“RFC 连接配置”设置。 可以使用带有 /n 前缀的 sm59 事务代码 (T-Code)。

  2. 选择“ABAP 连接”“创建”。

  3. 对于“RFC 目标”,输入测试 SAP 系统的标识符。

  4. 在“技术设置”中,将目标主机留空以创建与 SAP 系统的本地连接。

  5. 保存所做更改。

  6. 若要测试你的连接,请选择“连接测试”。

创建接收方端口

  1. 在 SAP 中,打开“IDOC 处理中的端口”设置。 可以使用带有 /n 前缀的 we21 事务代码 (T-Code)。

  2. 选择“端口”事务 RFC”“创建”。

  3. 在打开的设置框中,选择“自己的端口名”。 为测试端口输入一个名称。 保存所做更改。

  4. 在新接收方端口的设置中,对于“RFC 目标”,输入测试 RFC 目标的标识符。

  5. 保存所做更改。

创建发送方端口

  1. 在 SAP 中,打开“IDOC 处理中的端口”设置。 可以使用带有 /n 前缀的 we21 事务代码 (T-Code)。

  2. 选择“端口”事务 RFC”“创建”。

  3. 在打开的设置框中,选择“自己的端口名”。

  4. 对于测试端口,输入以 SAP 开头的名称 。 保存所做更改。

    所有发送方端口名称必须以字母 SAP 开头,例如 SAPTEST 。

  5. 在新的发送方端口的设置中,对于 RFC 目标,输入 ABAP 连接的标识符。

  6. 保存所做更改。

创建逻辑系统合作伙伴

  1. 在 SAP 中,打开“更改视图“逻辑系统”: 概览”设置。 可以使用 bd54 事务代码 (T-Code)。

  2. 接受出现的以下警告消息:“注意: 该表是跨客户端的”

  3. 在显示现有逻辑系统的列表上方,选择“新条目”。

  4. 对于新的逻辑系统,请输入 Log.System 标识符和简短的名称描述 。 保存所做更改。

  5. 出现“工作台提示”时,通过提供描述来创建新请求,或者如果已经创建了请求,则跳过此步骤。

  6. 创建工作台请求后,将该请求链接到表更新请求。 若要确认表已更新,请保存所做的更改。

创建合作伙伴配置文件

对于生产环境,必须创建两个合作伙伴配置文件。 第一个配置文件用于发送方,即你的组织和 SAP 系统。 第二个配置文件用于接收方,即逻辑应用资源和工作流。

  1. 在 SAP 中,打开“合作伙伴配置文件”设置。 可以使用带有 /n 前缀的 we20 事务代码 (T-Code)。

  2. 在“合作伙伴配置文件”下,选择“合作伙伴类型 LS”“创建”。

  3. 使用以下设置创建新合作伙伴配置文件:

    设置 说明
    Partner No.(合作伙伴编号) 输入逻辑系统合作伙伴的标识符
    Partn. Type(合作伙伴类型) 类型 输入 LS。
    代理 输入在注册 Azure 逻辑应用或其他非 SAP 系统的程序标识符时要使用的 SAP 用户帐户的标识符。
  4. 保存所做更改。

    如果尚未创建逻辑系统合作伙伴,则会收到错误消息,“请输入有效的合作伙伴编号”。

  5. 在合作伙伴配置文件设置中的“出站参数”下,选择“创建出站参数” 。

  6. 使用以下设置新建出站参数:

  7. 保存所做更改。

测试发送消息

  1. 在 SAP 中,打开“IDoc 处理的测试工具”设置。 可以使用带有 /n 前缀的 we19 事务代码 (T-Code)。

  2. 在“测试模板”下,选择“通过消息类型”。 输入消息类型,例如 CREMAS。 选择“创建”。

  3. 对于消息“哪个 IDoc 类型?”,通过选择“继续”进行确认 。

  4. 选择“EDIDC”节点。 为接收方和发送方端口输入合适的值。 选择“继续”。

  5. 选择“标准出站处理”。

  6. 要启动出站 IDoc 处理,请选择“继续”。

    当工具处理完以后,将显示“IDoc 已发送到 SAP 系统或外部程序”消息。

  7. 要检查是否存在处理错误,请使用前缀为“/n”的“sm58”事务代码 (T-Code)。

为常见 SAP 方案创建工作流

有关为常见 SAP 集成工作负载创建工作流的操作指南,请参阅以下步骤:

为高级 SAP 方案创建工作流

查找扩展错误日志(仅托管连接器)

如果使用 SAP 托管连接器,可以通过检查 SAP 适配器的扩展日志来查找完整的错误消息。 你还可以为 SAP 连接器启用扩展日志文件

  • 对于 2020 年 4 月或更早发布的本地数据网关,默认情况下禁用日志。

  • 对于 2020 年 6 月及之后发布的本地数据网关,你可以在应用设置中启用网关日志

    • 默认的日志记录级别为“警告”。

    • 如果在本地数据网关应用的“诊断”设置中启用了“附加日志记录”,则日志记录级别将提升至“信息”。

    • 要将日志记录级别提升至“详细”,请在配置文件中更新以下设置。 通常,配置文件位于 C:\Program Files\On-premises data gateway\Microsoft.PowerBI.DataMovement.Pipeline.GatewayCore.dll.config

      <setting name="SapTraceLevel" serializeAs="String">
         <value>Verbose</value>
      </setting>
      

在本地数据网关设置扩展 SAP 日志记录(仅托管连接器)

如果为 Azure 逻辑应用使用本地数据网关,则可以为 SAP 连接器配置扩展日志文件。 你可以使用本地数据网关将 Windows 事件跟踪 (ETW) 事件重定向到包含在网关的日志记录 zip 文件中的轮换日志文件中。

你可以将网关的所有配置和服务日志从网关应用的设置导出到 .zip 文件中。

注意

扩展日志记录处于始终启用状态时,可能会影响工作流的性能。 最佳做法是在完成问题分析和故障排除后关闭扩展日志文件。

捕获 ETW 事件

作为可选的高级日志记录任务,可以直接捕获 ETW 事件,然后在事件中心 Azure 诊断中使用数据,或者将数据收集到 Azure Monitor 日志。 有关详细信息,请参阅收集和存储数据的最佳做法

若要处理生成的 ETL 文件,可以使用 PerfView,也可以编写自己的程序。 以下演练使用 PerfView:

  1. 在 PerfView 菜单中,选择“收集”“收集”以捕获事件。

  2. 在“其他提供程序”参数中,输入 *Microsoft-LobAdapter 以指定用于捕获 SAP 适配器事件的 SAP 提供程序。 如果未指定此信息,则跟踪只包含常规 ETW 事件。

  3. 保留其他默认设置。 如果需要,可以在“数据文件”参数中更改文件名或位置。

  4. 选择“开始收集”以开始跟踪。

  5. 重现问题或收集足够的分析数据后,请选择“停止收集”。

  6. 若要与另一方(如 Azure 支持工程师)共享你的数据,请压缩 ETL 文件。

  7. 查看跟踪的内容:

    1. 在 PerfView 中,选择“文件”“打开”,然后选择刚刚生成的 ETL 文件。

    2. 在 PerfView 侧栏中,ETL 文件下的“事件”部分。

    3. 在“筛选器”下,按 筛选以仅查看相关事件和网关进程。

测试工作流

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

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

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

  3. 若要触发工作流,请从 SAP 系统发送一条消息。

  4. 返回到逻辑应用的“概览”窗格。 在“运行历史记录”下,查找工作流的新运行。

  5. 打开最近的运行,其中显示了手动运行。 查找并查看触发器输出部分。

启用 SAP 客户端库(NCo)日志记录和跟踪(仅内置连接器)

当必须调查此组件的任何问题时,可以设置基于自定义文本文件的 NCo 跟踪,SAP 或 Microsoft 支持人员可能会要求该跟踪。 默认情况下,此功能处于禁用状态,因为启用此跟踪可能会对性能产生负面影响,并快速消耗应用程序主机的存储空间。

可以通过添加以下设置在应用程序级别控制此跟踪功能:

  1. Azure 门户中,打开你的标准逻辑应用资源。

  2. 在逻辑应用菜单的“设置”下,选择“环境变量”以查看应用程序设置。

  3. 在“环境变量”页的“应用设置”选项卡上,添加以下应用程序设置:

    • SAP_RFC_TRACE_DIRECTORY:存储 NCo 跟踪文件的目录,例如C:\home\LogFiles\NCo

    • SAP_RFC_TRACE_LEVEL:将Level4用作典型详细日志记录的建议值的 NCo 跟踪级别。 SAP 或 Microsoft 支持人员可能会要求设置不同的跟踪级别

    • SAP_CPIC_TRACE_LEVEL:通用通信编程接口 (CPI-C) 跟踪级别,“详细”是典型详细日志记录的建议值。 SAP 或 Microsoft 支持人员可能会要求设置不同的跟踪级别

    有关添加应用程序设置的详细信息,请参阅编辑标准逻辑应用工作流的主机和应用设置

  4. 保存所做更改。 此步骤会重启应用程序。

可用的跟踪级别

NCo 跟踪级别

说明
Level1 用于跟踪远程函数调用的级别。
Level2 用于跟踪远程函数调用和公共 API 方法调用的级别。
Level3 用于跟踪远程函数调用、公共 API 方法调用和内部 API 方法调用的级别。
级别 4 用于跟踪远程函数调用、公共 API 方法调用、内部 API 方法调用、RFC 协议的十六进制转储以及网络相关信息的级别。
锁定 将数据写入跟踪文件,其中显示线程什么时候请求、获取和释放对象锁。
元数据 跟踪每个调用的远程函数调用中涉及的元数据。
禁止显示所有跟踪输出的级别。
ParameterData 跟踪每次远程函数调用期间发送和接收的容器数据。
性能 将数据写入有助于分析性能问题的跟踪文件。
PublicAPI 跟踪公共 API 的大多数方法,getter、setter 或相关方法除外。
InternalAPI 跟踪内部 API 的大多数方法,getter、setter 或相关方法除外。
RemoteFunctionCall 跟踪远程函数调用。
RfcData 跟踪每次远程函数调用期间发送和接收的字节。
SessionProvider 跟踪当前使用的 ISessionProvider实现的所有方法。
SetValue 将有关为函数的参数、结构或表的字段设置的值的信息写入跟踪文件。

CPIC 跟踪级别

说明
无日志记录
基本 基本日志记录
详细 详细日志记录
VerboseWithData 包含所有服务器响应转储的详细日志记录

查看跟踪

  1. 在标准逻辑应用资源菜单中的“开发工具”下,选择“高级工具>”“转到”。

  2. Kudu工具栏上,选择“调试控制台>”“CMD”。

  3. 浏览到名为$SAP_RFC_TRACE_DIRECTORY的应用程序设置文件夹。

    对于之前设置的应用程序设置值C:\home\LogFiles\NCo,会显示名为NCo的新文件夹或你使用的任何文件夹名称。

    打开 $SAP_RFC_TRACE_DIRECTORY 文件夹后,你将找到:

    1. NCo 跟踪日志:一个名为 dev_nco_rfc.log 的文件、一个或多个名为 nco_rfc_NNNN.log 的文件,以及一个或多个名为 nco_rfc_NNNN.trc 的文件,其中 NNNN 是线程标识符。
    2. CPIC 跟踪日志:一个或多个名为 nco_cpic_NNNN.trc 的文件,其中 NNNN 是线程标识符。
  4. 要查看日志或跟踪文件中的内容,请选择文件旁边的“编辑”按钮。

    注意

    如果下载逻辑应用工作流已打开并当前正在使用的日志或跟踪文件,下载可能会导致文件为空。

将�本地数据网关的 SAP 遥测发送到 Azure Application Insights

本地数据网关进行 2021 年 8 月更新之后,SAP 连接器操作可以将来自 SAP NCo 客户端库的遥测数据和来自 Microsoft SAP 适配器的跟踪发送到 Azure Monitor 中的 Application Insights 功能。 该遥测主要包含以下数据:

  • 基于 SAP NCo 指标和监视器的指标和跟踪。

  • 来自 Microsoft SAP 适配器的跟踪。

来自 SAP NCo 客户端库的指标和跟踪

指标是根据本地数据网关上资源的使用情况和可用性,在一段时间内可能会变化,也可能不会变化的数值。 这些指标可用于更好地了解系统运行状况并创建有关以下活动的警报:

  • 系统健康状况下降。
  • 异常事件。
  • 系统负载过高。

此信息将发送到名为 customMetrics 的 Application Insights 表。 默认情况下,每隔 30 秒发送一次指标。

SAP NCo 指标和跟踪基于 SAP NCo 指标,特别是以下 NCo 类:

  • RfcDestinationMonitor。
  • RfcConnectionMonitor。
  • RfcServerMonitor。
  • RfcRepositoryMonitor。

有关每个类提供的指标的详细信息,请查看 SAP NCo 文档(需要登录)

跟踪包含与指标一起使用的文本信息。 此信息将发送到名为 traces 的 Application Insights 表。 默认情况下,每隔 10 分钟发送一次跟踪。

为 Application Insights 设置 SAP 遥测

需要先创建并设置 Application Insights 资源,然后才能将网关安装的 SAP 遥测发送到 Application Insights。 有关详细信息,请查看以下文档:

若要实现将 SAP 遥测发送到 Application Insights,请执行以下步骤:

  1. 从以下位置下载 Microsoft.ApplicationInsights.EventSourceListener.dll 的 NuGet 包:

  2. 将下载的文件添加到本地数据网关安装目录,例如“C:\Program Files\On-Premises Data Gateway”。

  3. 在本地数据网关安装目录中,检查 Microsoft.ApplicationInsights.dll 文件是否与添加的 Microsoft.ApplicationInsights.EventSourceListener.dll 文件具有相同的版本号 。 该网关当前使用版本 2.14.0。

  4. 在 ApplicationInsights.config 文件中,通过取消注释带有 元素的行来添加 Application Insights 检测密钥。 将占位符 your-Application-Insights-instrumentation-key 替换为你的密钥,例如:

    <?xml version="1.0" encoding="utf-8"?>
    <ApplicationInsights schemaVersion="2014-05-30" xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
       <!-- Uncomment this element and insert your Application Insights key to receive ETW telemetry about your gateway <InstrumentationKey>*your-instrumentation-key-placeholder*</InstrumentationKey> -->
       <TelemetryModules>
          <Add Type="Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing.DiagnosticsTelemetryModule, Microsoft.ApplicationInsights">
             <IsHeartbeatEnabled>false</IsHeartbeatEnabled>
          </Add>
          <Add Type="Microsoft.ApplicationInsights.EventSourceListener.EventSourceTelemetryModule, Microsoft.ApplicationInsights.EventSourceListener">
             <Sources>
                <Add Name="Microsoft-LobAdapter" Level="Verbose" />
             </Sources>
          </Add>
       </TelemetryModules>
    </ApplicationInsights>
    
  5. 在 ApplicationInsights.config 文件中,可以根据要求更改 SAP 连接器操作所需的跟踪 值,例如:

    <Add�Type="Microsoft.ApplicationInsights.EventSourceListener.EventSourceTelemetryModule,�Microsoft.ApplicationInsights.EventSourceListener">
       <Sources>
          <Add�Name="Microsoft-LobAdapter"�Level="Verbose"�/>
       </Sources>
    </Add>
    

    有关详细信息,请查看以下文档:

  6. 应用所做的更改后,重启本地数据网关服务。

在 Application Insights 中查看指标

在逻辑应用工作流中运行 SAP 操作后,可以查看发送到 Application Insights 的遥测。

  1. 在 Azure 门户中,打开 Application Insights 资源。

  2. 在资源菜单的“监视”下,选择“日志” 。

    以下屏幕截图显示 Azure 门户中打开“日志”窗格的 Application Insights:

    屏幕截图显示 Azure 门户中打开“日志”窗格以创建查询的 Application Insights。

  3. 在“日志”窗格中,可以使用基于特定要求的 Kusto 查询语言 (KQL) 创建查询

    可以使用类似于以下示例查询的查询模式:

    customMetrics
    | extend DestinationName = tostring(customDimensions["DestinationName"])
    | extend MetricType = tostring(customDimensions["MetricType"])
    | where customDimensions contains "RfcDestinationMonitor"
    | where name contains "MaxUsedCount"
    
  4. 运行查询后,查看结果。

    以下屏幕截图显示示例查询的指标结果表:

    显示 Application Insights 中的指标结果表的屏幕截图。

    • MaxUsedCount 是“受监视目标同时使用的最大客户端连接数”,如 SAP NCo 文档(需要登录)中所述。 可以使用该值来了解同时打开的连接数。

    • “valueCount”列的每个读数显示为“2”,因为指标每隔 30 秒生成。 Application Insights 每分钟聚合一次这些指标。

    • DestinationName 列包含一个字符串,该字符串是 Microsoft SAP 适配器的内部名称。

      为了更好地了解此远程函数调用 (RFC) 目标,请将该值与 traces 配合使用,例如:

      customMetrics
      | extend DestinationName = tostring(customDimensions["DestinationName"])
      | join kind=inner (traces
         | extend DestinationName = tostring(customDimensions["DestinationName"]),
         AppServerHost = tostring(customDimensions["AppServerHost"]),
         SncMode = tostring(customDimensions["SncMode"]),
         SapClient = tostring(customDimensions["Client"])
         | where customDimensions contains "RfcDestinationMonitor"
         )
         on DestinationName , $left.DestinationName == $right.DestinationName
      | where customDimensions contains "RfcDestinationMonitor"
      | where name contains "MaxUsedCount"
      | project AppServerHost, SncMode, SapClient, name, valueCount, valueSum, valueMin, valueMax
      

也可以使用 Application Insights 中的以下功能创建指标图表或警报,例如:

显示 Application Insights 中采用图表格式的结果的屏幕截图。

来自 Microsoft SAP 适配器的跟踪

可以使用从 Microsoft SAP 适配器发送的跟踪来进行问题后分析,并查找任何现有的内部系统错误,这些错误可能会在 SAP 连接器操作中出现,也可能不会出现。 这些跟踪已将 message 设置为 "n\a",因为它们来自早于 Application Insights 的早期事件源框架,例如:

traces
| where message == "n/a"
| where severityLevel > 0
| extend ActivityId = tostring(customDimensions["ActivityId"])
| extend fullMessage = tostring(customDimensions["fullMessage"])
| extend shortMessage = tostring(customDimensions["shortMessage"])
| where ActivityId contains "8ad5952b-371e-4d80-b355-34e28df9b5d1"

以下屏幕截图显示示例查询的跟踪结果表:

显示 Application Insights 中的跟踪结果表的屏幕截图。

后续步骤