ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

S/4HANA前端显示:从SAP GUI到Fiori Launchpad排错

S/4HANA前端显示:从SAP GUI到Fiori Launchpad排错 很多做 SAP 的朋友第一次登录 S/4HANA脑子里冒出来的第一个问题不是新功能在哪而是我的绿屏呢。尤其是做了十几年 ECC 的老顾问看到满屏的瓷砖Tile和卡片式布局第一反应往往是觉得花哨、不踏实。但如果你真在项目里推过一轮S/4HANA 前端显示界面的落地就会明白这套东西不是把 SAP GUI 换个皮肤那么简单——它把导航入口、权限分配、应用发布、缓存机制整个重构了一遍。这篇是前世今生系列的第三篇专门聊前端这块。我不会去复述官方帮助文档里能查到的东西而是把从绿屏时代一路走过来到底哪些东西被换掉了、哪些坑会反复出现、出了问题从哪一层开始查讲清楚。不管你是刚接手 Fiori 的 BASIS/顾问还是从 Web 前端转过来第一次看 SAPUI5 的开发者看完应该能少走不少弯路。1. 从绿屏到瓷砖S/4HANA 前端到底换掉了什么1.1 SAP GUI 并没有被废除它只是从主角变成了配角先把最容易误判的一点说清楚S/4HANA 不是没有 SAP GUI了而是SAP GUI 不再是唯一的入口。经典事务码、Dynpro 屏幕、自己写的 Z 报表这些东西在 S/4HANA 里照样能跑SAP GUI for Windows、SAP GUI for Java、以及走 ICF 节点发布的 SAP GUI for HTML也就是老 WebGUI都还在维护。区别在于SAP 的产品策略变成了Fiori first——新发布的功能只给 Fiori经典事务码只做维护不接新需求。为什么不能一刀切因为一套跑了二十年的 ECC 系统里真正被高频使用的自开发 Dynpro 程序、行业增强、打印表单数量可能是几百上千个。全部重写成 Fiori 应用成本比升级本身还高。所以现实中的 S/4HANA 前端是两岸并存业务用户的日常操作往 Fiori 迁深水区的配置和自开发留在 GUI。理解这个前提后面关于权限、导航、排错的所有讨论才有意义。顺带说一个实际项目里经常被忽略的细节SAP GUI 的版本和补丁级别在混合场景下会直接影响体验。比如从 Fiori Launchpad 上用sapgui://协议唤起本机 GUI如果客户端版本太老、或者补丁没打全会出现点了没反应或者打开了但窗口标题乱码。我在一个项目里就遇到过整层楼用户点瓷砖没反应最后查到是终端上装的是很早的客户端版本统一升级后问题消失。1.2 Fiori Launchpad 真正取代的是 NWBC 和门户很多人以为 Fiori Launchpad 是来替代 SAP GUI 的这个说法不准确。从演进脉络看FLP 真正接替的是NetWeaver Business ClientNWBC和企业门户Enterprise Portal这两个外壳角色。回忆一下那个时代的技术栈ITS 时代WebGUI 靠 ITS 把 Dynpro 屏幕转成 HTML后来有了 Web Dynpro ABAPESS/MSS 这类应用跑在里面再到 NWBCSAP 想做的事是给用户一个统一的桌面窗口把 Web Dynpro、ITS 页面、经典事务码都塞进同一个壳里导航靠 PFCG 角色菜单驱动。NWBC 的思路是对的但它的短板也很明显——依赖本地客户端安装、导航结构写死在角色菜单里、移动端完全没戏。Fiori Launchpad 把这套东西搬到了浏览器里导航不再由角色菜单决定而是由业务目录Catalog 目标映射Target Mapping决定。这个变化带来的最大好处是同一个应用可以被无数个业务场景复用导航结构可以根据业务场景自由重组而不是跟着角色的技术结构走。版本演进上2013 年 Fiori 1.0 出来时只有二十多个应用本质上是给几个高频场景审批、查询做的补充2016 年前后的 Fiori 2.0 把通知、企业搜索、我区域Me Area加进了 Shell到 Fiori 3 时代引入 Spaces 和 Horizon 主题界面组织方式发生了质变再往后的版本继续在 Horizon 上打磨同时把我的主页My Home这类聚合页面做进来。如果你现在做的是较新版本的 S/4HANA看到的界面基本已经是 Fiori 3/4 的形态了。1.3 一颗瓷砖背后站着三层对象缺一层都点不开这是新手最容易栽跟头的地方。用户看到的是一颗瓷砖但要让这颗瓷砖能被点开后端至少要配齐三层东西我把它们对应到实际操作上讲层作用配在哪缺了会怎样语义对象 动作Intent定义要干什么如#PurchaseOrder-manage/UI2/SEMOBJ 之类应用无法被导航到目标映射Target Mapping把 Intent 绑到具体应用 URL 和参数业务目录里维护瓷砖是死的点不开业务目录Catalog承载瓷砖和目标映射通过角色分配给人通过 PFCG 角色挂载用户根本看不到瓷砖关键点在于业务目录本身只是容器它不解决权限问题。我见过太多案例顾问在开发系统里把目录调好、挂到角色、用户也能看到瓷砖了结果一上线点进去就报权限错误。原因很简单——用户有权限看见这颗瓷砖但没有权限执行它背后的后端事务或 OData 服务。前者靠业务目录后者靠后端的权限对象比如服务授权、ICF 节点授权、以及具体业务对象的权限这是两条完全独立的线。在 PFCG 里挂目录的时候还有个细节角色改完之后要做用户比较User Comparison否则新加的目录不会生效到已有用户身上。这个操作不复杂但漏掉的概率极高尤其是改一批角色的时候。我自己的习惯是改完角色立刻跑一次批量用户比较然后再让用户去测——能省掉至少一半我改了怎么没生效的来回。2. 嵌入式还是 Hub前端部署形态决定了后面所有的坑2.1 两种形态的边界与选型逻辑S/4HANA 的前端有两种部署形态选错了后面迁移成本很高所以这一节值得单独展开。嵌入式Embedded前端服务器和 S/4HANA 后端在同一套 ABAP 系统里Gateway 也在里面。优点是链路短、少一跳、配置简单、没有跨系统的信任和网络问题。缺点是前端组件的升级节奏被后端绑死如果你有多个后端系统想做统一入口嵌入式帮不上忙。Hub 部署独立的 S/4HANA 前端服务器或 NetWeaver 前端服务器通过 RFC 目标SM59 里配置连到后端系统。UI5 应用、Launchpad 内容、Gateway 服务注册都在前端服务器上数据从后端取。优点是入口统一、前后端升级解耦、可以挂多个后端。缺点是每一层都多了一个出错点。选型的判断依据其实就三条后端系统是不是只有一套、要不要统一入口、前端组件的升级能不能跟着后端走。只有一套系统、用户规模不大直接嵌入式最省事多套系统、有统一门户诉求Hub 值得多花的那点运维成本。我见过一个反例客户就一套 S/4HANA硬是搭了独立前端服务器结果所有问题都变成到底是前端还是后端排查成本翻倍最后又改回嵌入式。2.2 ICF 节点和 Gateway 服务到底谁在干活搞不清这条链路排错就只能靠重启。用最直白的话说ICF 节点是门Gateway 服务是店。门ICF用事务码 SICF 看决定外部请求能不能进到系统里。S/4HANA 前端场景下几个关键节点/sap/bc/ui2/flpLaunchpad 本身的入口/sap/bc/ui5_ui5SAPUI5 应用的静态资源/sap/bc/ui2/start_upLaunchpad 启动时的初始化请求/sap/opu/odataOData 服务调用入口/sap/bc/gui/sap/its/webguiWebGUI经典事务码走 HTML 的时候用店Gateway 服务用事务码 /IWFND/MAINT_SERVICE 看决定某个 OData 服务有没有被激活、能不能被调用。这里有个 Hub 场景下特别容易混的点服务要在前端服务器注册有些服务还需要在后端激活两边不一致就会出现服务已激活但取不到数据。排查的时候有个技巧特别省时间用事务码 /IWFND/GW_CLIENTGateway 客户端直接构造一次 OData 请求打过去。如果这里能返回正确数据说明后端和服务都没问题那问题一定在前端配置或者浏览器侧如果这里就报错那就在后端授权、服务实现或者数据层面找。这一步能把问题范围直接砍掉一半比在浏览器 F12 里翻半天 Network 面板高效得多。配套的两个日志事务码也要记住/IWFND/ERROR_LOG 看前端侧的 Gateway 错误/IWBEP/ERROR_LOG 看后端侧的。2.3 域名、反向代理和单点登录那几个绕不开的坑这三个东西单独看都不复杂凑在一起就是事故高发区。第一对外域名必须和内部保持一致。前端服务器给浏览器返回的资源里很多 URL 是拼出来的如果对外域名和系统里的配置对不上就会出现资源加载不到、登录后反复跳转、甚至白屏。第二路径前缀要保留。有些客户习惯把/sap/bc/ui2/flp反代成/flp省事是省事了但 Fiori Launchpad 对路径很敏感很容易出问题。反代规则我建议能不动路径就不动。第三单点登录。用 SAML2 的话前端服务器的信任配置STRUST、ICF 节点的登录流程、以及身份提供方的实体标识三处必须对得上。这个环节最典型的症状是浏览器在登录页和系统之间来回跳或者登录成功但拿不到用户上下文。我的经验是先在最简单的直连 HTTPS 环境下把登录跑通再一层一层往上加代理和 SSO——一次只改一个变量真出问题才知道是谁干的。3. Spaces 与 PagesFiori 3 之后内容组织方式的换代3.1 Group 的三层结构为什么不够用了早期的 FLP 是目录 - 组 - 瓷砖三层目录Catalog管应用组Group管布局瓷砖挂在组里。这东西在小范围用没问题规模一上来就露怯——组本质上是一堵平铺的瓷砖墙没有层级没有场景划分。用户多了每个角色的首页都要单独做一个组维护成本随人数线性上涨。移动端体验更糟一堵几十颗瓷砖的墙在小屏上基本没法看。Spaces 和 Pages 引入的是两级结构空间Space代表一个业务场景页面Page是场景下的子模块页面上再分节Section放瓷砖。比如采购是个空间采购订单处理供应商管理收货是三个页面。这样带来的好处很实在页面可以复用、空间可以通过业务目录批量分发、页面加载是按需的打开哪个页面加载哪个页面的瓷砖移动端也能自适应。还有一个容易被忽略的差异Spaces 和 Groups 是互斥的由系统级开关控制。你在配置里启用了 Spaces用户看到的就是空间导航切回 Groups之前的组配置还在。这一点在做迁移的时候特别有用等于给了你一个随手可用的回退开关。3.2 用 Fiori 应用来配置 Launchpad老版本的 Launchpad Designer事务码 /UI2/FLPD_CUST在较新的版本里已经不被推荐了现在主流的做法是用 Fiori 应用来配置 Launchpad——在应用库里搜 Manage Launchpad 能搜到一组管理应用分别管空间、页面和设置。用 Fiori 应用配 Fiori听起来有点自举的意味但实际体验比老的 Designer 顺手尤其是拖拽排序和实时预览。配置一条完整链路大致是这样建空间Space填一个用户能看懂的业务名称和描述在空间下建页面Page规划好这个页面上要放哪几块内容在页面里加节Section每个节配一个标题下面挂瓷砖从已有业务目录里挑瓷砖挂到节里并排序把空间分配出去——可以直接分配给用户也可以挂到业务目录上通过 PFCG 角色批量分发角色改完后做用户比较然后清一次 Launchpad 缓存这里面最容易翻车的不是前四步而是第五步。空间建好了、瓷砖也挂上了用户就是看不到原因通常是三个空间没挂到业务目录挂到了目录但角色没做用户比较前两个都对但缓存没清。我习惯在这三步之后让用户用无痕窗口重新登录一次能排除掉浏览器侧的缓存干扰。3.3 从 Group 迁到 Spaces 的落地路径迁移这件事最忌讳的是推倒重来。我的做法是分三步走第一步先盘点把现有业务目录和角色的对应关系理清楚搞清楚哪些目录是给哪些岗位用的。这一步不产出界面上能看的东西但决定了后面拆空间的粒度。第二步挑一个部门试点把一个典型的组翻译成一个空间和两三个页面让这个部门的人先用一周。第三步再全量推推的时候保留 Groups 的回退开关用户抱怨多了立刻切回去别让业务停摆。这里有个经验值得说别按技术模块拆空间按业务场景拆。我见过有人按 SAP 模块拆成MM 空间SD 空间FI 空间用户完全不买账——业务人员不关心模块边界只关心我要干这件事入口在哪。正确的做法是按岗位职责划比如采购执行应付核算仓库作业一个空间里混着 MM 和 FI 的瓷砖反而更符合实际。4. 前端显示异常与性能问题的排查链路4.1 三类表象背后是三层的不同原因Fiori 前端出问题症状看着都差不多打不开、转圈、白屏但根因分层很明显。先把对应关系记住能让排查少绕很多路。现象最可能的层先查什么打开地址就 403 / 空白ICF 节点、前端授权SICF 节点是否激活、用户是否缺管理类角色瓷砖显示但内容为空 / 无数据OData 服务、服务授权/IWFND/MAINT_SERVICE 服务状态、S_SERVICE 授权点瓷砖报找不到应用目标映射、应用缓存目标映射 URL、语义对象与动作是否匹配页面一直转圈 / 超时数据请求、后端性能浏览器 Network、/IWFND/ERROR_LOG界面样式错乱、布局塌陷UI5 版本、主题、浏览器浏览器版本与缩放、主题设置部分人能打开部分人打不开角色、授权、缓存对比两个用户的角色差异这张表的价值在于先分层再找因。我见过太多人一上来就重启前端服务或者在浏览器里清缓存清半天实际上问题在后端授权上。从外往里剥先确认能不能访问到 Launchpad网络和 ICF 层再确认瓷砖能不能正常显示内容缓存层再确认点进去的请求服务和授权层最后才是具体业务逻辑。这个顺序基本能保证你不做无用功。4.2 缓存与应用索引九成的改完不生效都在这里传输、改配置、加应用之后发现不生效先别怀疑人生去清缓存。Fiori 前端的缓存至少有三层很多人只清了一层就以为搞定了第一层是浏览器缓存前端静态资源JS、CSS默认会被浏览器缓存很久改动后用无痕窗口或者 F12 里勾上禁用缓存。第二层是前端服务器的 UI5 应用缓存传输了自开发的 UI5 应用之后必须重建应用索引否则应用查找器里搜不到、Launchpad 也找不到这个应用用的是程序/UI5/APP_INDEX_CALCULATE。第三层是 Launchpad 的内容缓存目录、目标映射、空间这些配置对象都缓存在里面用事务码/UI2/INVALIDATE_GLOBAL_CACHES清掉。我把这三步固化成一条上线检查清单传应用 → 重建应用索引 → 清 Launchpad 全局缓存 → 用户用无痕窗口验证。这条清单看起来啰嗦但真能避免大量我明明传上去了的争吵。另外提醒一句清全局缓存对在线的用户是有影响的最好放在低峰期做或者在变更窗口里做。4.3 终端、浏览器和主题那些容易甩锅给系统的问题有些界面显示问题压根不在系统里而在用户那台机器上。分辨率和缩放是第一嫌疑。Windows 上把显示缩放设成 125% 或 150%一些 Fiori 页面的布局会出现错位、按钮被截断。这不是系统 bug是浏览器像素映射的问题让用户把缩放调回 100% 再看一眼基本就能确认。浏览器版本也很关键——现在主流版本早就把 IE 全面淘汰了S/4HANA 的 Fiori 前端也不支持 IE如果还有用户在 IE 里打开各种莫名其妙的显示问题都会来。另外Chrome 之外的一些浏览器在 WebSocket、批量请求上的行为有细微差异遇到只有某个浏览器不行的情况换个内核试试往往能快速定位。主题这块也值得说一句。Horizon 是较新版本 Fiori 的默认主题视觉上比早期的 Quartz 更扁平、更适合长时间看。但要注意主题和 UI5 版本的匹配关系UI5 版本太旧配新主题会出现样式缺失。如果公司想用自己的品牌色可以通过 UI 主题设计器做一套自定义主题但改完之后要测一遍关键页面尤其是表格和图标——改主题改出显示异常的情况我遇到过不止一次。顺带回应一个从 Web 前端圈子里经常被问到的类比有人把 Fiori Launchpad 理解成微前端里的主应用壳子把一个个 SAPUI5 应用理解成独立子应用。这个类比大体成立Launchpad 确实管路由、管登录态、管应用加载应用之间也基本独立部署。但有个关键差异别搞混Fiori 应用的独立性是靠在 ABAP 里注册服务和应用描述文件实现的不是靠前端打包工具和运行时沙箱。所以排查问题的思路也不一样Web 微前端去看控制台Fiori 前端要去看 Gateway 日志。4.4 一个完整的排查案例把链路串起来讲个真实场景方便你把上面的东西串起来。问题现象某个用户反馈打开一个和供应商发票相关的 Fiori 应用时报应用无法启动同一层楼其他用户正常。第一步先确认范围——同一个应用别人能打开说明应用本身和服务没问题问题在这个用户的上下文里。第二步让用户按 F12 打开开发者工具看 Network发现关键的一个 OData 请求返回 403。这一步很关键它把问题从应用打不开精确定位到了这一个 OData 调用被拒。第三步去 /IWFND/ERROR_LOG 里翻这条请求的错误详情发现是缺少服务相关的授权对象。第四步对比这个用户和其他正常用户的角色确实少了一个业务角色。第五步补上角色、做用户比较再让用户重新登录——还是打不开因为客户端缓存了之前的失败状态清掉浏览器缓存后恢复正常。整个过程没用上重启也没改一行代码。我想强调的方法论是把应用打不开这种模糊描述一步步精确成某个具体请求返回某个具体错误。Fiori 的好处是链路清晰、日志完整只要你愿意顺着 Network 面板和 Gateway 日志走下去绝大多数问题都能定位到确切的配置项。5. 经典事务码的去留谁替代谁怎么共存5.1 已经有 Fiori 对应的日常操作如果你在规划用户培训或者写操作手册下面这张对照表能帮你判断哪些操作该往 Fiori 引导。经典事务码Fiori 侧对应能力上手时的主要差异BP业务伙伴维护类应用字段分组和导航方式变化较大MIRO供应商发票创建与清单类应用列表加详情模式批量处理逻辑不同ME21N / ME23N采购订单管理类应用查询条件和变式的保存方式不一样FB50 / FB60总账凭证过账类应用借贷方录入交互重新设计MD07物料覆盖监控类应用覆盖范围不完全等价要看具体场景FBL5N客户行项目管理类应用筛选和导出方式变化这里有个务实的态度要说清楚Fiori 应用不是经典事务码的像素级复刻。同样的业务Fiori 侧的交互逻辑通常是先列表筛选、再进详情、再操作而经典事务所是一个屏幕上填一堆字段、回车、保存。这导致很多老用户第一反应是找不到那个按钮了。所以推行的时候与其发一份事务码对照表不如按我要完成什么任务写简短的操作卡片两三步一页用户接受度高得多。5.2 短期内还是离不开 SAP GUI 的地方哪些场景短期内别硬推 Fiori我按经验列几类一是配置类工作。后台配置的绝大部分还在 SAP GUI 里虽然部分配置有了 Fiori 化的应用但覆盖面有限做实施和运维的同事该装 GUI 还得装。二是自开发的 Dynpro 程序和报表尤其是带复杂选择屏幕、ALV 交互、导出格式定制的 Z 程序重写成 Fiori 应用的性价比通常不高除非这个程序使用频率极高。三是深水区功能比如序列号管理、批次管理的某些特殊处理以及早期仓储管理模块的配置清单、EWM 里打印相关的框架配置这些操作在 GUI 里更直接。四是BW 建模这类专业工具前端界面和业务操作完全是两个世界。判断原则我总结成一句话看这个操作未来三年还有多少人每天要用。每天几十个人用的高频操作值得投入做 Fiori 化或者找替代应用一年用两次的运维操作留在 GUI 里完全没问题。SAP 的产品路线确实是新功能只给 Fiori但这不等于你必须把所有老东西都换掉。5.3 把 GUI 事务优雅地收进 Launchpad混合场景下最实际的做法是把必要的经典事务码也做成瓷砖让用户只需要记住一个入口。有三种做法各有各的适用边界第一种是SAP GUI for HTMLWebGUI。通过 ICF 的 webgui 节点用带事务码参数的 URL 直接调起经典事务在浏览器里以 HTML 形式呈现。这种方式部署成本最低不需要用户装客户端缺点是界面还是绿屏风格和周围的 Fiori 页面放在一起有明显的割裂感而且部分复杂事务在 HTML 下表现不稳定。适合那种偶尔用一下、不值得重写的场景。第二种是通过sapgui://协议唤起本机的 SAP GUI 客户端。在目标映射里把应用类型配成经典事务用户点击后由浏览器调起本地 GUI。体验上最接近原生前提是终端都装好了客户端、版本统一、浏览器的协议注册正常。这个方案对客户端管理要求高我一般建议在有统一终端管理能力的环境里用。第三种是用 SAP Business Client 这类容器把 GUI 事务和 Fiori 应用放在同一个窗口里。适合那种用户确实需要频繁在两种界面之间切换、又不想开两个窗口的场景。代价是客户端要维护版本升级节奏要跟着走。不管用哪种有个细节必须做在瓷砖的名字和描述里写清楚这是经典界面。用户看到一颗瓷砖点进去是绿屏如果不提前说明第一反应是系统是不是出问题了。这种沟通成本几乎为零但能省掉大量求助工单。最后分享一个我在项目里坚持了很多年的小习惯也是踩坑踩出来的每次 Fiori 相关变更上线前我会挑三个有代表性的角色——一个管理层、一个高频操作岗、一个只用审批的岗位——让他们各点一遍自己首页上的所有瓷砖点了之后随便进一个详情页再返回。这个动作十五分钟能做完但能覆盖掉绝大多数配置遗漏目录没挂全、目标映射参数错、授权不全、缓存没清基本都会在这轮里暴露。等到上线当天业务大面积反馈代价就完全不一样了。至于前端界面往后会怎么走我能观察到的是对话式交互正在被引入类似 Joule 这样的助手开始承担帮我找到那个应用的角色。但落到明天的工作上还是先把手里那堆角色的业务目录理清楚、把缓存清单固化成流程这些基础活儿做扎实了后面不管界面怎么变都不会慌。
返回列表