回答朋友提问:Fiori UI 中如何知道当前系统 Client ID (一)

发布时间 2023-06-19 23:21:34作者: JerryWang_汪子熙

今天我的 SAP 开发技术交流群里,有朋友问这样的问题:

在 Fiori 界面中,怎么查看当前 Client?

我觉得要回答这个问题,需要提问的朋友提供更多的背景信息,比如:

Fiori 界面,是运行在 ABAP On-Premises 上,还是 Cloud 环境(Cloud 环境下想知道 Client ID 貌似没有意义,因为这个字段值只对 SAP Support Engineer 有用)?

Fiori 界面是 Fiori 1.0,2.0 还是 Fiori 3.0?

在不同的 Fiori 部署方式和版本,查看当前 Client 的方法略微有些差异。Jerry 近期会逐一介绍。

在开始介绍查看 Client 方法之前,我们可以先复习一下这几篇文章介绍到的知识:

下面我们从 Fiori 1.0 开始聊起。

SAP Fiori 1.0 正式发布于 2013 年,旨在通过 Mobile First(移动设备优先)的设计策略,对 SAP 不同领域使用频率最高的应用进行重构。Fiori 1.0 在这门设计语言发展历史上,起到的最重要的作用,就是提出了基于角色的应用访问原则(Role-based Access Principle),目标是开发出具备 simple, responsive, coherent 和 delightful 特性的应用程序。这些原则和目标,贯穿于 Fiori 长达10年的漫长演进历史中。

Fiori 1.0 基于的 SAP UI5 版本号范围是 1.26 到 1.38. 下图是我早在 2014年时,在 SAP 成都研究院 CRM Fiori 开发团队负责开发的 My Opportunity 应用的截图。

从应用的地址栏里,可以一眼看出这个 Fiori 应用的 ABAP 系统名称为 GM4,Client ID 为 001.

如果用户访问的系统 url 被重定向或者由于种种其他原因,无法直接从地址中提取出系统名称和 Client ID,可以打开 Chrome 开发者工具,切换到 network 面板,输入关键字 start_up 进行过滤:

这个 start_up 请求的响应里,就包含了当前系统的 System 和 Client ID,如下图图例1和2所示。除此之外,还有当前登录用户的明细,比如使用的语言,所处时区等信息。

知道了 ABAP On-Premises 系统的系统 ID 和 Client ID,准确的说,这个系统特指 SAP Gateway(也称为 Frontend) 服务器。

Frontend 服务器通过 ABAP RFC 与运行 SAP 业务逻辑的后台系统连接。

在 SAP Gateway 系统上的事务码 /IWFND/MAINT_SERVICE 里,可以指定 Frontend 服务器同后台服务器的映射关系。比如下图的配置,语义就是 GM4 Gateway 系统,可以通过 RFC 连接到两个后台 ABAP 系统,分别是 GHD/504 和 AG3/001. 至于当前登录用户,运行时实际被分配到哪个后台系统,是通过用户分配的 PFCG role,即下图绿色高亮区域所示的角色决定的。

在 Gateway 系统的 /IWFND/CL_MGW_REQUEST_MANAGER~CALL_BACKEND 方法设置断点,运行时通过 Destination 的值,就能分辨出当前用户的请求,到底被 Gateway 系统分发到哪个后台服务器上了。

后续我会介绍如何在更高版本的 SAP Fiori UI 中实现同样的目的,比如 SAP S/4HANA 2021 的 Fiori 3.0 界面里如何找到 Client ID.

我之前写过一套基于 SAP ABAP SEGW 实现的 OData 服务开发教程,已经更新了 35 篇,里面包含了 SAP ABAP OData 服务的开发技巧,以及相关的系统设计原理,思路和相关开发工具。下面是 35 篇文章的目录:

  1. 在 SAP ABAP 事物码 SEGW 里创建 SAP OData 项目

  2. 在 SAP ABAP 系统对事物码 SEGW 创建的 OData 服务进行配置并测试

  3. SAP ABAP OData 服务诊断工具 /IWFND/ERROR_LOG 的使用方法

  4. SAP ABAP OData 服务 Data Provider Class 的 GET_ENTITYSET 方法实现指南

  5. SAP ABAP OData 服务如何支持 $filter (过滤)操作

  6. 使用 Postman 工具高效管理和测试 SAP ABAP OData 服务

  7. SAP ABAP OData 服务如何支持 $orderby (排序)操作

  8. SAP ABAP OData 服务如何支持创建(Create)操作

  9. SAP ABAP OData 服务如何支持删除(Delete)操作

  10. SAP ABAP OData 服务如何支持修改(Update)操作

  11. 使用 HTTP PUT, PATCH 以及 MERGE 请求消费 SAP ABAP OData 服务修改操作的实现及其区别

  12. SAP ABAP OData 服务如何支持 $select 有选择性地仅读取部分模型字段值

  13. SAP ABAP OData 服务的分页加载数据集的实现(Paging)

  14. 几种 SAP ABAP OData 服务的性能评估和测试工具介绍

  15. SAP ABAP OData 服务里 EntityType 和 EntitySet 的区别

  16. 如何修改 SAP ABAP OData 模型,使其支持 $expand 操作

  17. 如何通过 SAP ABAP OData $expand 操作在同一个 HTTP 请求中返回多个节点的数据

  18. SAP ABAP OData 服务嵌套创建功能的实现步骤(Create Deep)

  19. 如何使用 ABAP 程序消费 SAP ABAP OData 服务

  20. 如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务

  21. SAP ABAP OData 服务的 $count 操作实现

  22. SAP ABAP OData 服务的 $count 和 $inlinecount 两个操作的区别

  23. 如何给 SAP ABAP SEGW 开发的 OData 服务添加 Access-Control-Allow-Origin 响应头

  24. SAP 标准产品里使用 OData 服务的一些细节分享

  25. 答疑 - SAP OData 框架处理 Metadata 元数据请求的实现细节,前后端组件部署在同一台物理服务器

  26. SAP ABAP OData Gateway 框架里 /IWFND, /IWBEP 这些缩写代表了什么含义?

  27. SAP OData 框架里的缓存(Cache)设计专题讲座

  28. 如何使用 SAP OData 服务向 ABAP 服务器上传文本格式的文件

  29. 如何通过 ABAP 代码给 SAP OData 元数据增添注解

  30. 如何使用 SEGW 的 redefine 功能对 SAP 标准 OData 服务进行扩展

  31. SAP UI5 Fiori 应用在启动时向 ABAP 后台发起的 OData 请求序列的顺序和作用分析

  32. 关于 Fiori 应用里 SAP UI5 前端开发和 SEGW 后台 OData 服务开发的工作量比值问题

  33. 如何找出 SAP Fiori Launchpad 里点击 tile 之后,读取业务数据调用的是哪个 SAP 后台系统的 OData 服务

  34. 如何使用 Postman 发送 SAP OData Batch 请求到 ABAP 后台服务器

  35. 如何自行查找出 SAP ABAP 标准的 OData 服务返回数据的后台数据库表和表字段名称