你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Power Query 为实时 OData 源启用 SAP 主体传播

在 Microsoft Excel 或 Power BI 中使用 SAP 数据集是客户的常见要求。

本文介绍使用 Power Query 启用 OData SAP 数据集消耗所需的配置和组件。 SAP 数据集成可视为“实时”,因为客户端(如 Microsoft Excel 或 Power BI)可以按需对其进行刷新,这与数据导出(如 SAP 列表查看器 (ALV) CSV 导出)等不同。 这些导出本质上是“静态”的,与数据源没有持续关系。

本文重点介绍 Power Query 中的已知 Microsoft Entra 标识与 SAP 后端用户之间的端到端用户映射。 此机制通常称为 SAP 主体传播。

所述配置重点关注 Azure API 管理SAP 网关SAP OAuth 2.0 Server with AS ABAP 和 OData 源,但所用观念适用于任何基于 Web 的资源。

重要

注意:SAP 主体传播可确保用户映射到已获授权的命名 SAP 用户。 有关任何 SAP 许可证相关问题,请联系 SAP 代表。

Microsoft 产品与 SAP 集成概述

SAP 产品与 Microsoft 365 项目组合(从自定义代码、合作伙伴加载项到完全自定义的 Office 产品)之间的集成。 下面是几个示例:

本文中所述的机制使用 Power Query 的标准内置 OData 功能,并重点介绍在 Azure 上部署的 SAP 环境。 使用 Azure API 管理自承载网关搭建本地环境。

有关总体支持 Power Query 的 Microsoft 产品的详细信息,请参阅 Power Query 文档

安装注意事项

最终用户可以选择本地桌面或基于 Web 的客户端(例如 Excel 或 Power BI)。 对于客户端应用程序与目标 SAP 工作负载之间的网络路径,需要考虑客户端执行环境。 网络访问解决方案(如 VPN)不适用于 Excel 网页版等应用。

Azure API 管理反映了采用可应用于 Azure 环境(内部外部)的不同部署模式的本地和基于 Web 的环境需求。 Internal 是完全受专用虚拟网络限制的实例,而 external 则保留了对 Azure API 管理的公共访问权限。 本地安装需要使用混合部署来应用此方法,就像使用 Azure API 管理自承载网关一样。

Power Query 需要匹配 API 服务 URL 和 Microsoft Entra 应用程序 ID URL。 为 Azure API 管理配置自定义域以满足此要求。

需要将 SAP 网关配置为公开所需的目标 OData 服务。 通过 SAP 事务代码 /IWFND/MAINT_SERVICE 发现和激活可用服务。 有关详细信息,请参阅 SAP 的 OData 配置

Azure API 管理自定义域配置

请参阅下面的屏幕截图,其显示了将名为 api.custom-apim.domain.com 的自定义域与托管证书和 Azure 应用服务域结合使用的 API 管理配置示例。 有关更多域证书选项,请参阅 Azure API 管理文档

显示 Azure API 管理中的自定义域配置的屏幕截图。

根据域要求完成自定义域的设置。 有关详细信息,请参阅自定义域文档。 若要证明域名所有权并授予对证书的访问权限,请将以下 DNS 记录添加到 Azure 应用服务域 custom-apim.domain.com,如下所示:

显示自定义域映射到 Azure API 管理域的屏幕截图。

Azure API 管理租户的相应 Microsoft Entra 应用程序注册如下所示。

屏幕截图显示 Microsoft Entra ID 中的 Azure API 管理的应用注册。

注意

如果不想选择 Azure API 管理的自定义域,则需要改用自定义 Power Query 连接器

适用于 Power Query 的 Azure API 管理策略

Azure API 管理策略用于目标 OData API 以支持 Power Query 的身份验证流。 请参阅以下该策略中的代码片段,其中突出显示了身份验证机制。 在此处查找用于 Power Query 的已用客户端 ID。

<!-- if empty Bearer token supplied assume Power Query sign-in request as described [here:](/power-query/connectorauthentication#supported-workflow) -->
<when condition="@(context.Request.Headers.GetValueOrDefault("Authorization","").Trim().Equals("Bearer"))">
    <return-response>
        <set-status code="401" reason="Unauthorized" />
        <set-header name="WWW-Authenticate" exists-action="override">
            <!-- Check the client ID for Power Query [here:](/power-query/connectorauthentication#supported-workflow) -->
            <value>Bearer authorization_uri=https://login.microsoftonline.com/{{AADTenantId}}/oauth2/authorize?response_type=code%26client_id=a672d62c-fc7b-4e81-a576-e60dc46e951d</value>
        </set-header>
    </return-response>
</when>

除了支持组织帐户登录流外,该策略还支持 OData URL 响应重写,因为目标服务器的答复中包含原始 URL。 请参阅以下上述策略中的代码片段:

<!-- URL rewrite in body only required for GET operations -->
<when condition="@(context.Request.Method == "GET")">
    <!-- ensure downstream API metadata matches Azure API Management caller domain in Power Query -->
    <find-and-replace from="@(context.Api.ServiceUrl.Host +":"+ context.Api.ServiceUrl.Port + context.Api.ServiceUrl.Path)" to="@(context.Request.OriginalUrl.Host + ":" + context.Request.OriginalUrl.Port + context.Api.Path)" />
</when>

注意

有关从 Internet 安全访问 SAP 以及 SAP 外围网络设计的详细信息,请参阅此指南。 有关使用 Azure 保护 SAP API 的信息,请参阅此文章

通过 Excel 桌面版上的 Power Query 进行 SAP OData 身份验证

借助给定的配置,Power Query 的内置身份验证机制可供公开的 OData API 使用。 通过“数据”功能区(“获取数据”->“从其他源”->“从 OData 源”)向 Excel 工作表添加新的 OData 源。 维护目标服务 URL。 以下示例使用 SAP 网关演示服务 GWSAMPLE_BASIC。 使用 SAP 事务 /IWFND/MAINT_SERVICE 发现或激活它。 最后,使用官方 OData 导入指南将其添加到 Azure API 管理。

显示如何在 Azure API 管理中发现 OData URL 的屏幕截图。

检索基本 URL 并插入目标应用程序中。 以下示例显示了与 Excel Desktop 的集成体验。

显示 Excel Desktop 中的 OData 配置向导的屏幕截图。

将登录方法切换到“组织帐户”,然后单击“登录”。 提供使用 SAP 主体传播映射到 SAP 网关上的命名 SAP 用户的 Microsoft Entra 帐户。 有关此配置的详细信息,请参阅 Microsoft 教程。 通过此处 SAP 社区帖子和此处视频系列了解有关 SAP 主体传播的详细信息。

继续选择 Excel 上的 Power Query 应应用的身份验证设置级别。 以下示例显示了将应用于目标 SAP 系统上托管的所有 OData 服务(不仅仅应用于示例服务 GWSAMPLE_BASIC)的设置。

注意

以下屏幕中有关 URL 级别的授权范围设置独立于 SAP 后端的实际授权。 SAP 网关仍然是映射的命名 SAP 用户的每个请求及相关授权的最终验证程序。

显示 Excel 中“组织帐户”选项的登录流的屏幕截图。

重要

上述指南重点介绍通过 Power Query 从 Microsoft Entra ID 获取有效身份验证令牌的过程。 需要进一步处理此令牌以进行 SAP 主体传播。

使用 Azure API 管理配置 SAP 主体传播

使用 SAP 的第二个 Azure API 管理策略来完成中层 SAP 主体传播的配置。 有关此 SAP 网关后端配置的详细信息,请参阅 Microsoft 教程

注意

通过此处 SAP 社区帖子和此处视频系列了解有关 SAP 主体传播的详细信息。

此图显示了本文中涉及的 Microsoft Entra 应用注册。

此策略依赖于 Microsoft Entra ID 和 SAP 网关之间已建立的 SSO 设置(使用 Microsoft Entra 库中的 SAP NetWeaver)。 请参阅以下演示用户 Adele Vance 的示例。 Microsoft Entra ID 与 SAP 系统之间发生用户映射基于用户主体名称 (UPN) 为唯一用户标识符这一事实。

屏幕截图显示 Microsoft Entra ID 中的演示用户的 UPN。

显示具有 UPN 声明的 SAP 网关的 SAML2 配置的屏幕截图。

UPN 映射是使用事务 SAML2 在 SAP 后端维护的。

显示 SAP SAML2 事务中电子邮件映射模式的屏幕截图。

根据此配置,命名 SAP 用户将映射到相应的 Microsoft Entra 用户。 请参阅以下 SAP 后端中使用事务代码 SU01 维护的示例配置。

事务 SU01 中具有映射的电子邮件地址的指定 SAP 用户的屏幕截图。

有关所需的 SAP OAuth 2.0 Server with AS ABAP 配置的详细信息,请参阅 Microsoft 教程,了解如何使用 OAuth 通过 SAP NetWeaver 进行 SSO。

使用所述的 Azure API 管理策略后,任何已启用 Power Query 的 Microsoft 产品都可能会调用 SAP 托管的 OData 服务,同时采用 SAP 命名用户映射。

显示 Excel Desktop 中的 OData 响应的屏幕截图。

通过其他启用了 Power Query 的应用程序和服务访问 SAP OData

上面的示例显示了 Excel Desktop 的流,但此方法适用于任何已启用 Power Query OData 的 Microsoft 产品。 有关 Power Query 的 OData 连接器以及哪些产品支持此连接器的更多信息,请参阅 Power Query 连接器文档。 有关通常支持 Power Query 的产品的详细信息,请参阅 Power Query 文档

常用的使用者包括 Power BIExcel 网页版Power Apps(数据流)Analysis Service

使用 Power Automate 处理 SAP 写回方案

描述的方法也适用于写回方案。 例如,可以使用 Power Automate 通过 OData 和已启用 http 的连接器更新 SAP 中的业务合作伙伴(也可以使用 RFC 或 BAPI)。 请查看下面的 Power BI 服务仪表板示例,该仪表板通过基于值的警报和一个按钮(在屏幕截图上突出显示)连接到 Power Automate。 通过 Power Automate 文档详细了解如何触发 Power BI 报表中的流。

显示已启用流的 Power BI 服务仪表板的屏幕截图。

突出显示的按钮可触发将 OData PATCH 请求转发到 SAP 网关以更改业务合作伙伴角色的流。

注意

将 Azure API 管理策略用于 SAP 以处理身份验证、刷新令牌、CSRF 令牌和流外令牌的总体缓存。

显示 Power Automate 上请求业务合作伙伴对 SAP 后端进行更改的流的屏幕截图。

后续步骤

了解可以将 OData 与 Power Query 一起使用的场合

在 Azure API 管理中使用 SAP OData API

为 SAP API 配置 Azure API 管理

教程:分析来自 Excel 和 OData 源的销售数据

使用应用程序网关和 API 管理来保护 API

将内部虚拟网络中的 API 管理与应用程序网关集成

了解适用于 SAP 的 Azure 应用程序网关和 Web 应用程序防火墙

使用 APIOps 自动执行 API 部署