升级这件事,项目组最怕的不是程序起不来,而是界面上的功能悄悄变了。SAP Fiori 尤其如此,系统升完、用户登录 Launchpad,马上有人喊“这个应用怎么不见了”“权限怎么突然不够了”。你打开 PFCG 一看,业务角色还在,角色里的菜单、目录、组却已经对不上新版标准模板——这就是典型的“升级后业务角色模板变更”问题。
这篇文章不聊宏观升级规划,只讲一个具体场景:S/4HANA 或 Fiori 前端组件升级后,标准模板变了,你怎么发现变更、怎么评估影响、怎么把自定义业务角色安全拉回新版轨道。内容基于我最近一次从 S/4HANA 2021 FPS02 升级到 2023 FPS00 的实战经历,适合正在做升级的 BASIS、Fiori 管理员、权限顾问,以及刚升级完正收拾残局的实施团队。
1. 升级前先弄明白:业务角色模板在升级里到底会怎么变
1.1 先理清概念:模板、业务角色、目录三者是什么关系
在 SAP Fiori 这套体系里,“业务角色”这个词经常跟“PFCG 角色”“权限角色”混着用,实际上它是权限角色在 Fiori 场景下的一个综合体。你在 PFCG 里维护的单一角色(Single Role)里,既有权限对象(Authorization Objects)、事务代码(Transaction Codes),也可能带上一整套 Fiori 的菜单结构——也就是目录(Catalog)和组(Group)。目录是一组应用(App)的逻辑集合,组则是用户在 Launchpad 上看到的磁贴分栏。
业务角色模板(Business Role Template)是 SAP 预先根据某个业务岗位设计好的标准角色,名称一般带 SAP_BR_ 前缀,比如 SAP_BR_GL_ACCOUNTANT 就是总账会计的角色模板。它定义好了这个岗位应该有哪些权限、应该看到哪些 Fiori 应用、Launchpad 上应该分成哪些组。实施项目里最常见的做法是从模板复制一个自定义角色(Z 开头或 Y 开头),再按客户要求做增删,这就是业务角色与模板之间的“引用关系”。
搞清楚这层关系,你就能明白为什么升级会出问题:模板是标准图纸,自定义业务角色是按图纸盖起来的楼。系统升级后,SAP 把图纸改了——换掉了旧应用、调了权限对象、重组了目录,但楼不会自动跟着改。你需要在升级后把楼重新修整到符合新图纸,而这个“修整”动作,就是本文要讲的核心。
可以把这个关系整理成下面这张表:
| 层级 | 作用 | 升级后谁受影响 |
|---|---|---|
| 业务角色模板(SAP_BR_*) | 标准岗位的权限与菜单定义 | SAP 随版本更新,落地即变 |
| 自定义业务角色(Z* / Y*) | 实际分配给用户的角色,引用模板 | 需要人工或工具同步更新 |
| Fiori 目录(Catalog) | 一组应用的集合,对应权限与磁贴来源 | 可能增删、拆分、合并 |
| Fiori 组(Group) | Launchpad 上的磁贴分组 | 可能重组、新增、失效 |
| 应用(App/旧事务代码) | 用户实际使用的功能入口 | 可能被替换、废弃、改名 |
1.2 升级到底会触发哪些模板变更
在我做的这次升级里,后台程序、数据库迁移这些大块头反而不是最费劲的,真正让团队逐字核对的是业务角色模板的隐形变化。注意,模板变更不完全等于权限变更,它还包含用户在 Launchpad 上看得到、点得着的那些应用和磁贴。
常见的模板变更至少有这几类:
第一类是应用被替换。标准模板里旧的 Fiori 应用 ID 在新版本里不再维护,SAP 换成新的应用,但目录并不会自动把新旧应用同时换上。如果你的自定义角色是直接从旧模板复制的,升级后菜单里挂的还是旧应用 ID,Launchpad 上表现就是“磁贴在,但点不开”。
第二类是目录和组的重组。新版本里 SAP 可能把原来一个大的目录拆成两个,或者把跨应用的组重新分组。目录 ID 可能是新的,也可能 ID 没变但内部应用清单换了。ID 不变最坑人,因为你按老 ID 核对的时候一眼看上去觉得没问题,实际上应用列表早就不一样了。
第三类是权限对象和授权数据的变化。升级带来新的权限检查逻辑,标准模板里权限对象、字段值、甚至审批条件值都可能是新版本,但自定义角色里的授权数据不会自动重新生成。用户表现是“功能找得到,一操作就报无权限”。
第四类是参数与服务路径变化。比如某些应用依赖的 OData 服务在新的 Fiori 前端组件下换路径了,模板里的 Tile 配置参数却没同步,点击后直接 404 或者白屏。
我把这些影响整理成一张速查表,升级后对号入座就行:
| 变更类型 | 升级后典型表现 | 影响对象 |
|---|---|---|
| 应用替换 | 磁贴点击失效、应用从目录中消失 | 自定义角色菜单、用户实际操作 |
| 目录/组重组 | 目录 ID 失效、磁贴分栏错乱 | 角色菜单、Launchpad 展示 |
| 权限对象调整 | 功能正常但操作报无授权 | 用户权限、审批流程 |
| 参数/服务路径变化 | Tile 无法跳转、白屏、404 | 应用配置、后台服务 |
| 新增目录/组 | 升级后多了新应用但角色没挂 | 用户需求、测试范围 |
这张表我是升级后才总结出来的,当时要是提前画出来,后面能省一半时间。建议你把表头当成模板,结合自己系统里实际看到的变更记录,在升级前就把可能的变更项列进去。
这一章还有个关键点必须强调:标准模板落地后,在客户端里往往是“未激活”状态。也就是说,SAP 把新版模板、目录、组都传到你的系统里,但不会自动激活。没激活的东西,自定义角色就算重新引用了也不生效。这个“激活”动作,是升级后最容易忽略的第一步。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 升级前必须完成的基线盘点
2.1 把“谁用了哪个模板”先摸透
升级前的基线盘点,说实话没有太多技术含量,但极考验细心。第一步是把“人—角色—模板”的关系彻底理清。别以为项目文档里写过就完事,文档跟实际系统经常对不上,一切以当前生产系统为准。
我在系统里是这样摸底的:先用 SUIM(用户信息系统)进入角色分析,把 PFCG 里所有单一角色列出来;然后在 PFCG 里逐个查看角色的“引用角色”字段,确认它是否基于 SAP_BR_ 标准模板,以及引用的是哪个模板。如果是复合角色(Composite Role),还要再看它底下挂的单一角色清单,因为复合角色本身没有权限数据,权限来自子角色。
这一步的输出是一张 Excel 清单,我习惯按下面几列整理:
- 角色名称
- 角色类型(单一/复合)
- 是否自定义(Z 开头 / Y 开头)
- 引用模板(SAP_BR_ 前缀)
- 是否有 Fiori 菜单(是否挂了目录/组)
- 责任人
- 升级前导出文件编号
理文档这件事,我吃过不少亏。有一次升级前没把角色跟模板的对应关系核对全,漏了一个财务共享中心共用的复合角色,结果升级后那个角色底下二十几个用户集体看不到应付账款的应用,周日晚上被连环催,场面极其混乱。从那以后,我养成了习惯:但凡要升级,第一步一定是把角色清单冻结成文件,跟模板对应关系一起归档。这一步在公司流程里可能不算强制项,但相信我,它比大多数升级后的修补都值钱。
2.2 用导出与比对的方式把模板内容固化下来
光有角色清单还不够。升级前你还得把每个模板、每个自定义角色当前的“菜单定义”和“权限数据”固化到系统外,升级后再导一次,两份对比着看。这是最笨、但最不会出错的基线方法。
导出的方式有几个选择。如果你是 Fiori 内容管理员,可以在 Fiori Launchpad 的管理界面上把目录和组的配置导出为文件;如果你是权限顾问,在 PFCG 里打开角色,用“菜单”功能把菜单结构导出到本地文件夹,或者用 SE16 查看角色相关的表,比如 AGR_1252(角色菜单结构)、AGR_TCDIR(角色事务代码分配)、AGR_FLAGS 等。不用追求一次全抓,关键是升级前抓的这批文件能和升级后的文件做 diff。
实际比对的时候,重点看三个地方。第一,自定义角色菜单里引用的目录 ID 和组 ID,升级后是否还在;第二,目录里引用的应用 ID,升级后是否还在;第三,角色授权数据里涉及的关键权限对象,比如在 S/4HANA 里常见的会计、物料、SD 相关对象,字段值有没有变化。工具层面,能用文本对比工具最好,如果导出的文件结构复杂,也可以直接在 Excel 里用 VLOOKUP 把两版清单关联起来看差异。
如果条件允许,我强烈建议在测试系统里先把升级过一遍。测试系统的意义不只是验证程序,更是验证这套“导出—对比—更新”流程。我这次就是在测试环境里先做了一轮模板激活和角色更新,把流程跑顺了,生产升级的时候基本是照抄操作步骤。生产库直接开搞容易出现两个问题:一是操作顺序着急容易出错,二是出了问题没有回滚参照。
还有一个小技巧:升级前把每个自定义角色的 PFCG 菜单截图或导出文件按角色名归档,升级过程中如果角色真被改烂了,至少有一份可恢复的基准。不要过分依赖传输请求,权限对象的变化有时候不会完全跟传输走。
3. 升级后的模板变更处理流程
3.1 先激活再同步:模板与权限的激活顺序
升级完成后,千万别一个猛子扎进 PFCG 里手工改角色。我第一次接手这类工作时就是没经验,看到磁贴丢了直接去给角色加应用,结果白忙活半天,因为根因是模板和目录没激活。后来我总结出升级后的第一动作序列,就八个字:先激活模板,再同步角色。
先说激活。Fiori 内容激活的标准入口,一般是 Fiori Launchpad 的 Content Manager(对应 Fiori Launchpad Designer 管理界面),通过事务代码 /UI2/FLPD_CUST 之类的入口进入,把升级落地的标准目录、组、模板逐项激活。这个动作的实质是:新版标准内容在你的客户端里正式生效,占位状态变成可用状态。目录、组的激活不复杂,但一定不要漏。
再说权限数据的同步。这里涉及一个容易混淆的概念——授权数据(Authorization Data)和菜单(Menu)是两回事。菜单更新了,角色菜单结构能拉到新应用,但如果授权数据还是旧的,用户依然会报无权限。SAP 在升级场景下提供了维护工具,比如事务代码 SU25 可以基于升级后的模板重置授权数据,也可以对单个角色做“权限生成”(Generate)操作。
激活顺序上,我建议严格按“目录/组激活 → 模板级角色(如果有)处理 → 自定义角色更新 → 用户测试”四步走。顺序乱了的典型后果是:你先手工改了自定义角色,后面模板一激活,自定义角色里的旧引用又被新模板“压”了一遍,前面白改。
还有个细节:同一套标准内容在系统里可能同时存在于多个客户端,比如开发、测试、生产。每个端都要单独激活,而且激活之前要确认这个端对应的业务版本。我的经验是,先在一个非生产客户端完整跑通,确认操作无副作用,再在生产环境执行同样的动作。
3.2 自定义业务角色的三种更新路线
模板激活之后,自定义角色的更新其实分三种情况,处理思路完全不同,别拿一套方案套所有角色。
路线 A:简单的“模板复制型”角色。这类角色完全基于单个标准模板复制,没有或极少自己加东西。处理比较简单,在 PFCG 里打开角色,确认引用的模板已经更新,重新执行一次“从模板生成”,让菜单和权限数据跟模板对齐,保存并传输即可。注意,这一步会覆盖角色内的自定义内容,所以动手前务必确认这个角色确实没有额外的个性化配置。
路线 B:复杂的“多模板叠加型”角色。不少企业的关键岗位角色会同时引用多个标准模板,再加上大量自定义事务代码、自定义权限对象。这种角色最危险,因为重新生成会覆盖或冲突,人工逐项核对又耗时。我的建议是分两步:先更新模板相关的菜单部分,再单独核对自定义部分。你可以用升级前导出的基线文件跟升级后的当前值做对比,把新增、删除、变化的项列出来,挨个确认业务影响。碰到拿不准的权限对象变更,宁可先不授权,让业务用户在测试环境验证后再说。
路线 C:需要清理无效引用的角色。升级后有些旧目录被合并、废弃,角色菜单里会残留无效引用,PFCG 打开时会有黄标或报错。这类角色要把失效引用替换为新目录,或者从菜单里移除。特别提醒:不要因为看着碍眼就顺手把整个角色删了。先停用(Deactivate),确认没有用户在使用,再做删除。停用角色在 SAP 系统里并不难,但一旦删除,历史记录和回滚路径就彻底没了,几乎所有做过权限管理的顾问都在这个点上吃过亏。
三种路线处理完之后,都要同步处理角色分配关系。如果升级过程中改了复合角色结构,还要记得重新检查用户分配。这一步经常被漏掉,因为 SU01 里用户看到的功能入口还在,分配关系也还在,但细分角色更新后权限实际已经变化了。
3.3 一份可以直接抄的升级后操作清单
下面这份清单是这次升级里逐步跑出来的,我直接整理成可执行版本。你们可以按系统实际情况增减,但顺序建议不要乱。
- 升级完成后,进入 Fiori Content Manager,把标准目录、组、模板逐个激活。
- 用事务代码 SU25 执行升级授权调整,系统会对比新旧授权数据并生成变更建议。这一步在大型升级里需要时间,安排在工作窗口里跑,别拖到上班时间。
- 按第二章整理的 Excel 角色清单,逐个打开自定义角色,按“模板复制型 / 多模板叠加型 / 含无效引用型”分类标记处理方式。
- 先处理简单角色:确认引用模板,重新生成菜单和权限数据。
- 再处理复杂角色:导出当前菜单和权限,与升级前基线做 diff,逐项核对差异。
- 清理无效引用:用 PFCG 的检查功能定位失效目录、组,统一替换或移除。
- 处理复合角色与用户分配:确认复合角色下子角色清单完整,没有变成孤儿角色。
- 拉一个测试用户集合,按业务岗位做 Fiori Launchpad 登录测试,重点验证磁贴可见性、点击跳转、权限操作三个维度。
- 测试通过后,将角色相关修改传输到生产,并保留升级前基线文件作为长期留档。
步骤 2 的 SU25 调整尤其要说一下。升级前后权限对象的新增和删除,SU25 可以给出一个较系统的对比和调整界面,但它只是辅助工具,不是自动修复工具。生成建议之后,每条变更还是要由权限顾问人工判断——尤其是删权限的变更,SAP 会替你列出来,但不会替你做业务决策。这个窗口期一定要安排有业务经验的权限顾问在场。
4. 常见问题与排查技巧实录
4.1 升级后常见的六类问题速查表
这一部分全部来自这次升级和过去几次项目的实战记录。遇到下面的现象,先别急着改配置,按表格里的排查路径走,通常不会走偏。
| 现象 | 常见原因 | 排查路径 | 处理建议 |
|---|---|---|---|
| 升级后磁贴消失 | 标准目录未激活 | 查看目录激活状态 | 激活目录/组,再刷新 Launchpad |
| 磁贴在但点击报错 | 应用 ID 或 OData 服务路径变更 | 查看应用配置与服务目录 | 更新角色菜单引用,检查服务路径 |
| 操作提示无授权 | 授权数据未重新生成 | PFCG 查看权限数据结构 | 重新生成授权数据或用 SU25 调整 |
| 角色菜单里目录报无效 | 目录被合并/废弃 | PFCG 检查功能 | 替换为新目录或移除引用 |
| 同一个角色用户表现不一致 | 部分用户使用旧缓存 | 查看登录时间和会话 | 清缓存或换新会话测试 |
| 升级后新权限缺失 | 新版本新增了权限对象 | 对比模板与角色权限 | 按模板补齐授权数据 |
排查的时候记住一个原则:先看“目录/组有没有生效”,再看“角色菜单挂得对不对”,最后才看“授权数据够不够”。顺序反了,很容易被表面现象带偏,特别是权限问题,十个里有六个根源不在权限对象,而在菜单引用或服务配置。
4.2 三个容易翻车的细节与我的踩坑经历
第一个坑:在生产库直接激活全部模板。我见过一个项目,升级后 BASIS 为了图省事,把生产系统里所有标准目录一键激活,结果把还在用的旧版内容也覆盖了,上线当天用户反馈大量磁贴排列与升级前不同,最后只能紧急回退内容传输。正确做法是先在一个非生产客户端跑完整流程,产出差异清单,再在生产上做定向激活。不要做“全部激活”,要做“按需激活”。
第二个坑:清缓存问题。升级完成后,Launchpad 的本地缓存、浏览器缓存、甚至 Fiori 客户端缓存都可能存着旧版应用清单。你明明配置已经改对了,用户登录看到的还是旧页面。测试的时候一定要让测试用户重新登录、清掉缓存,最好在无痕模式或者全新浏览器下验证。我这次就因为在有缓存的浏览器里检查,误判了一个角色没更新,白排查了一个多小时。
第三个坑:在 PFCG 里把标准模板当普通角色改动。标准模板是 SAP 后续升级和维护的基础,你手工改了,下次升级传输一覆盖就是冲突源。规范做法是标准模板保持原样,所有配置差异都放在自定义角色里。如果确实要调整模板行为,先确认有没有标准扩展点,再考虑是否修改,并且一定在文档里记录清楚。这条规矩我前期没当回事,后来吃够了升级冲突的苦。
分享一个我这次的踩坑经历,希望能帮你们少走弯路。升级完第三天,业务反馈“采购申请审批”入口打开后一直转圈。我查了角色、查了目录、查了权限对象,都没问题。最后抓了网络请求才发现,那个 Tile 里配置的 OData 服务路径还指向旧的前端组件版本,而新版服务已经换路径了。问题根本不在角色,而在应用内容(App Content)的配置参数。这类问题在升级文档里通常不会醒目标注,只能靠你在测试环境里逐个 Tile 点一遍才能发现。所以我后来把“逐 Tile 点击验证”写进了升级检查单,宁可慢一点,也不留死角。
5. 把模板变更管理固化进日常运维
5.1 建立模板变更登记与回归测试机制
一次升级处理完不算结束。业务角色模板变更是有规律的事,SAP 的每个功能包、每个 SP 都可能带来标准内容调整。如果不建立机制,下次升级依然是一地鸡毛。我现在的做法是,每做一次升级或补丁,就在变更登记表里记录:涉及哪些标准模板、哪些目录/组发生增删合并、影响了哪些自定义角色、处理人是谁、业务测试结论是什么。这张表看起来简单,但持续维护下来,能让你在任何一次升级前快速回答“这次会动到谁”。
回归测试也要固化。每次模板变更后,至少要选业务关键岗位的几个代表性用户,做一版标准验收路径:登录 Launchpad、查看磁贴分组、打开核心应用、执行审批/查询/录入的代表性操作。不要等最终用户发现才去补,主动做一次全流程验证,成本远低于事后紧急修复。
5.2 给以后升级的几点长期建议
最后说几点沉淀下来的长期建议,都是拿时间换来的教训。一是把角色清单的“引用模板”字段纳入权限管理的常规检查,有新人加角色时,强制要求填写模板来源,避免产生大量脱离模板的野角色。二是定期清理无效角色和孤儿分配,控制在用的自定义角色数量,数量越多,升级时逐角色核对的成本就越大。三是保持测试环境与生产的版本落后不超过一个功能包,这样任何一次升级都有提前演练的可能,而不是生产直接面对未知。
还有一个容易被忽略的点:重视权限顾问的参与时机。很多项目把权限顾问安排在升级的收尾阶段,只负责“改角色”,这是本末倒置。权限角色的模板变更分析应该在升级范围评估阶段就介入,因为有些变更会直接影响业务流程,比如某个审批条件的权限字段值变了,业务上可能意味着审批人范围变化。这种影响不是上线后靠测试能完全兜住的,需要提前沟通业务确认。
我自己在做完这次升级后,把整个流程整理成了一套四阶段的检查单:升级前基线盘点、升级中模板激活、升级后角色同步、上线前业务回归。现在每次做版本升级,团队直接按检查单推进,不再反复试错。这个流程不一定适合所有企业,但框架是通用的。你们可以拿自己现有的升级流程对照,把角色模板变更这一块填进去,下次升级就会比我这次从容得多。
