你当前正在访问 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 管理文档。
根据域要求完成自定义域的设置。 有关详细信息,请参阅自定义域文档。 若要证明域名所有权并授予对证书的访问权限,请将以下 DNS 记录添加到 Azure 应用服务域 custom-apim.domain.com
,如下所示:
Azure API 管理租户的相应 Microsoft Entra 应用程序注册如下所示。
注意
如果不想选择 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>
通过 Excel 桌面版上的 Power Query 进行 SAP OData 身份验证
借助给定的配置,Power Query 的内置身份验证机制可供公开的 OData API 使用。 通过“数据”功能区(“获取数据”->“从其他源”->“从 OData 源”)向 Excel 工作表添加新的 OData 源。 维护目标服务 URL。 以下示例使用 SAP 网关演示服务 GWSAMPLE_BASIC。 使用 SAP 事务 /IWFND/MAINT_SERVICE
发现或激活它。 最后,使用官方 OData 导入指南将其添加到 Azure API 管理。
检索基本 URL 并插入目标应用程序中。 以下示例显示了与 Excel Desktop 的集成体验。
将登录方法切换到“组织帐户”,然后单击“登录”。 提供使用 SAP 主体传播映射到 SAP 网关上的命名 SAP 用户的 Microsoft Entra 帐户。 有关此配置的详细信息,请参阅 Microsoft 教程。 通过此处 SAP 社区帖子和此处视频系列了解有关 SAP 主体传播的详细信息。
继续选择 Excel 上的 Power Query 应应用的身份验证设置级别。 以下示例显示了将应用于目标 SAP 系统上托管的所有 OData 服务(不仅仅应用于示例服务 GWSAMPLE_BASIC)的设置。
注意
以下屏幕中有关 URL 级别的授权范围设置独立于 SAP 后端的实际授权。 SAP 网关仍然是映射的命名 SAP 用户的每个请求及相关授权的最终验证程序。
重要
上述指南重点介绍通过 Power Query 从 Microsoft Entra ID 获取有效身份验证令牌的过程。 需要进一步处理此令牌以进行 SAP 主体传播。
使用 Azure API 管理配置 SAP 主体传播
使用 SAP 的第二个 Azure API 管理策略来完成中层 SAP 主体传播的配置。 有关此 SAP 网关后端配置的详细信息,请参阅 Microsoft 教程。
此策略依赖于 Microsoft Entra ID 和 SAP 网关之间已建立的 SSO 设置(使用 Microsoft Entra 库中的 SAP NetWeaver)。 请参阅以下演示用户 Adele Vance 的示例。 Microsoft Entra ID 与 SAP 系统之间发生用户映射基于用户主体名称 (UPN) 为唯一用户标识符这一事实。
UPN 映射是使用事务 SAML2 在 SAP 后端维护的。
根据此配置,命名 SAP 用户将映射到相应的 Microsoft Entra 用户。 请参阅以下 SAP 后端中使用事务代码 SU01 维护的示例配置。
有关所需的 SAP OAuth 2.0 Server with AS ABAP 配置的详细信息,请参阅 Microsoft 教程,了解如何使用 OAuth 通过 SAP NetWeaver 进行 SSO。
使用所述的 Azure API 管理策略后,任何已启用 Power Query 的 Microsoft 产品都可能会调用 SAP 托管的 OData 服务,同时采用 SAP 命名用户映射。
通过其他启用了 Power Query 的应用程序和服务访问 SAP OData
上面的示例显示了 Excel Desktop 的流,但此方法适用于任何已启用 Power Query OData 的 Microsoft 产品。 有关 Power Query 的 OData 连接器以及哪些产品支持此连接器的更多信息,请参阅 Power Query 连接器文档。 有关通常支持 Power Query 的产品的详细信息,请参阅 Power Query 文档。
常用的使用者包括 Power BI、Excel 网页版、Power Apps(数据流)和 Analysis Service。
使用 Power Automate 处理 SAP 写回方案
描述的方法也适用于写回方案。 例如,可以使用 Power Automate 通过 OData 和已启用 http 的连接器更新 SAP 中的业务合作伙伴(也可以使用 RFC 或 BAPI)。 请查看下面的 Power BI 服务仪表板示例,该仪表板通过基于值的警报和一个按钮(在屏幕截图上突出显示)连接到 Power Automate。 通过 Power Automate 文档详细了解如何触发 Power BI 报表中的流。
突出显示的按钮可触发将 OData PATCH 请求转发到 SAP 网关以更改业务合作伙伴角色的流。
注意
将 Azure API 管理策略用于 SAP 以处理身份验证、刷新令牌、CSRF 令牌和流外令牌的总体缓存。
后续步骤
了解可以将 OData 与 Power Query 一起使用的场合
在 Azure API 管理中使用 SAP OData API