
1. 先弄明白 Designers 到底在管理什么不少人第一次接触 SAP Fiori Launchpad Designer 的时候第一反应是这不就是个画磁贴的工具吗。这种理解不算错但很容易把后续的方向带偏。Launchpad Designer 的真正价值不是视觉排版而是企业级应用入口的内容建模和分层治理。你能不能在系统里快速给一个新入职的销售搭出我的销售工作台能不能在季度末把几十个混乱的磁贴重新归位能不能保证生产环境里的入口内容和开发环境完全一致——这些问题的答案全都藏在你对 Launchpad 内容体系的理解深度上。Fiori 体系的整个入口逻辑可以拆成四层内容层Content、传输层Transport、运行时层Runtime、个性化层Personalization。Designer 主要管的是内容层和一部分运行时配置。所谓内容建模就是你先定义这个应用是什么、能干什么、什么角色能用然后通过目录、分组、角色、目标映射这些概念把这些语义落成一套结构。听起来抽象其实每家公司实施 Fiori 的时候都绕不开这套动作。在你打开设计器之前必须先问自己三个问题这个系统里有哪些 Fiori 应用这些应用分别解决什么业务问题谁应该在哪个菜单层级看到这些应用这三个问题回答清楚了才轮到设计器登场。2. 核心概念拆解语义对象、目录、分组与目标映射2.1 语义对象与动作入口不管系统只管人话很多刚接触 Fiori 的人会纠结一个问题我为什么不直接在磁贴上放一个 URL为什么要搞出语义对象Semantic Object和动作Action这一套因为 URL 是写给系统看的语义对象是写给人和业务看的。比如销售订单审批这件事业务人员的理解是我要看公文包里有几单待审。如果你给每个用户都硬编码一个 URL那一旦应用地址变了、系统迁移了、或者同一个应用在测试环境和生产环境路径不同你就得把所有磁贴改一遍。而语义对象加动作的组合本质上是一种逻辑地址。语义对象定义为销售订单动作定义为审批系统在运行时通过条件解析去匹配真正的应用地址。哪个系统环境里配了哪个 URL那是系统层面的事情内容建模不需要关心。这里我建议你在实际项目中按名词动词去拆。名词就是语义对象比如物料、销售订单、采购申请动词就是动作显示、审批、追补。不要搞出销售订单审批总览这种既是名词又是动词、边界模糊的对象到后面你会被自己在语义层制造的混乱反噬。2.2 目录与分组逻辑归类和物理呈现完全两回事目录Catalog解决的授权问题分组Group解决的呈现问题。这两个概念放一起说是因为几乎所有人都会在这里犯同一个错——把目录当菜单用。目录是内容集合它决定了一个用户能访问什么应用通常挂到业务角色Business Role下面。分组是用户启动界面上的页签或者工作区在这个区域里你可以把不同目录中的磁贴进行二次编排、排序、分页签。举一个实际例子你有一百个 Fiori 应用分成财务、物流、人事三个目录。销售部门的角色只需要财务里的发票查询和物流里的发货跟踪那你给销售角色挂这两个目录就行。如果不下发任何分组销售用户登录后只能看到目录样式的产品页体验非常差。所以在角色里你还要绑定分组把销售相关的磁贴放到销售工作台这个组里。这样用户一登录就直达常用功能而不是在整张目录清单里翻找。这里有一个非常关键的经验Catalog 要做得细Group 要做得粗。目录小了授权灵活你可以给不同角色组合出不同权限面组大了前台界面干净用户不用一屏看几十个 tiles。我见过一些项目把目录建得无比巨大每个目录塞两百个应用结果每次权限调整都要动一堆角色运维成本直线上升。反过来有些项目把分组拆得极细页签变成二三十个用户自己都找不到功能藏在哪里。2.3 目标映射磁贴背后的路由中枢目标映射Target Mapping才是 Fiori Launchpad 里真正的技术核心。一个 Tile 只是前台的门面真正负责点了这个磁贴之后系统把用户带到哪去的是目标映射。一个目标映射由语义对象、动作、应用类型Application Type和参数组成。配置的时候你要注意应用类型直接影响运行时的渲染方式。最常见的类型是 SAPUI5 Component输入 Component 名称和 Usage ID 即可适合标准 Fiori 应用URL 类型适合跳转到外部系统或者老的 GUI 页面还有一种是自定义页面类型适合嵌入 HTML 片段。配置目标映射时最容易踩的坑是参数定义方式。比如你希望用户从磁贴点击后直接带出公司代码有人会把公司代码直接写死在 URL 里这样做基建环境没问题但一到生产环境或者换了公司主体你就要全量重配。正确做法是在目标映射里用占位符参数Placeholder Parameter比如?CompanyCode{CompanyCode}然后在磁贴级或者角色级填充默认值运行时再通过上下文解析替主人拿真实数据。这一步做好了你的 Fiori 入口才真正具备模型化、可移植的潜力。2.4 磁贴类型选择信息呈现的层次感Fiori Launchpad 里的磁贴不是只有一种图标加文字。标准磁贴Static Tile是最简单、最常见的形式基本等于一个带图标的入口。如果你只做导航用这个没错。但如果你希望用户在启动页上直接看到业务数据就要考虑动态磁贴了。动态磁贴分为两种一种是基于 OData 服务的数值磁贴Numeric Tile它会实时显示一个数字比如待审批单据数、未读邮件数再配一个趋势标一种是带图表的丰富动态磁贴Rich Tile可以显示柱形图或环形图的一部分。这类磁贴适合做 KPI 层面的最浅层展示它不替代 Fiori 应用但能让用户打开启动台的第一眼就获得信息。在配置动态磁贴时要特别关心 OData 服务的响应时间。磁贴数据请求如果设计得不好会出现一种尴尬情况磁贴内容比应用本身加载还慢。生产环境中我一般建议对动态磁贴的数据服务做额外缓存设置并严格控制返回行数。你不希望用户在启动页触发几十个 OData 请求那会让登录体验瞬间变糟。3. 分层治理从单张磁贴到企业级入口体系3.1 为什么需要分层混乱的根源在哪里很多企业搞 Fiori 建设第一年是热情高涨的试点阶段各种部门都来提需求我要一张报销磁贴、我要一张物料查询磁贴、我要一张生产工单磁贴。如果没有分层治理的框架一年之后你面对的就是几百张磁贴散落在各种目录里连创建人都说不清某个磁贴给谁用、参数怎么配更糟的是同一个应用被重复创建了十几次目标映射每次的组件版本还不一致。我见过某企业上线两年后的 Fiori 内容库Catalog 数量超过一百五十个其中一半只有一两个磁贴Tile 数量接近两千大量重复入口。这样的内容库不只是混乱还会直接导致运行时性能退化、权限审计困难、故障定位难。你根本没法跟审计人员说清楚为什么这个用户能访问这五百个磁贴。分层治理的含义是在混乱发生之前就把内容管理的规则定清楚。谁有权限创建 Catalog 和 Group命名规范是什么内容是否要走传输链哪类内容属于基础架构层哪类属于业务能力层哪类仅仅属于本地临时微调每一层都有不同的管理策略和责任人。3.2 内容层级规划基座层、业务层、部门层基于实操经验我把 Fiori 内容规划分成三个层级供你参考。基座层是指那些被所有用户共享的基础内容比如通用的首页我的待办个人设置这些入口。这一层的 Catalog 应该保持非常精简由核心管理员统一建立和修改不开放给项目组成员自由创建目的是维持入口体系的一致性。业务层是按业务流程组织的 Catalog 和 Group比如采购业务销售业务财务管理。这一层通常由各业务域的 Fiori 负责人来管理。他们要负责维护本域的语义对象字典、确保本域的 Target Mapping 引用的应用都是最新版本、清理废弃的磁贴。业务层的 Catalog 命名我建议用业务域缩写_场景比如FIN_PAYABLE表示财务应付场景。部门层是可以稍微灵活的个性化区域比如某个团队单独需要一个临时项目工作区。这层内容允许团队管理员自行创建分组但 Catalog 依然要经过审批避免产生孤岛式内容。这三层之间不是物理隔离而是管理责任和变更控制策略的分层。基座层不允许随便改业务层要定期盘点部门层允许适度自服务这才是治理而非遏制。3.3 命名规范与维护策略治理的落地抓手治理不能停留在口头要求上必须沉淀成可执行的规范。我强烈建议在你的项目 Wiki 里维护一张命名规范表至少包含以下几类Catalog 命名业务域_场景全部大写下划线分隔。例如FIN_AP_AR、MM_PURCHASING。Group 命名用户视角名称例如我的采购任务财务月结工作台。分组名是用户直接看得到的尽量用自然语言。Target Mapping 命名建议用语义对象_动作_后缀。例如Material_Display_MainView。这样排序之后所有同一对象的映射会聚在一起排查效率高。Tile 命名可以用业务标题 目标映射简称但关键是磁贴 ID 要具备唯一性和可读性尽量避免无意义的 UUID。命名规范在项目前期看起来像形式主义但等到内容库上百个条目时合理的命名能让你在搜索和过滤器里快速定位。单个系统里没什么感觉跨服务器传输的时候你就知道有一个统一标识体系有多重要了。3.4 跨环境传输内容也要走代码上线流程不少新手在项目实施时把 Fiori 内容建在开发机上然后直接在生产机上再手动敲一遍。短期是小系统问题不大但一旦内容量变大手工重建就是灾难源。SAP Fiori 内容对象和其他 ABAP 对象一样可以通过请求号被传送到后续环境。只要你在创建 Catalog、Group、Target Mapping 时把它们放到同一个传输请求里就能通过标准流程往质量保证环境和生产环境推送。在传输中最容易出问题的是字典表不一致。你开发环境的语义对象在生产环境没有激活或者目标映射里引用了另一个还没传走的应用组件接收方会出现启动失败。所以推送之前我会先做一次依赖检查目标映射引用了哪些应用这些应用的组件是否已经存在于目标系统Catalog 里引用的 Tile 是否都完整依赖检查不是 SAP 设计器自动帮你做的这需要项目自己积累一套检查清单。如果你在实施 SAP S/4HANA 新项目还可能会遇到 Fiori Content 的交付模式差异。云版本通常语义对象和 Catalog 是预交付的你更多是做选择与配置而本地部署版本里你需要从空白开始或者基于激活的 Fiori 内容手动去整合。搞清楚你所在环境的交付模式会直接影响你内容建模的方式。4. 实操指南从零开始玩转 Launchpad Designer4.1 前置环境确认哪些系统版本支持 Designer新版 Fiori Launchpad Designer也叫 FLP Designer是一个基于 SAPUI5 Flex 功能的 Web 工具它替代了老旧的 FLP 内容管理器即原来的/defaultsap/site配置界面。判断你的系统用的是新设计器还是老工具一个简单的方法是看启动页地址。如果登录后直接是/sap/bc/ui2/flp并且能通过 FLP 右侧的配置按钮进入可视化编辑界面说明你已经有新版 Designer 能力。新版 Designer 支持的 Fiori 应用类型更多尤其是基于 SAP Fiori elements 的应用。它不仅能建磁贴还能直接修改应用内部的页面布局比如新增自定义字段、调整列表列顺序、配置过滤器默认值。这种扩展能力是旧版内容管理器完全不具备的。如果你在老旧版本上还看不到 Configure 按钮需要先确认前端组件版本是否符合要求。4.2 三种进入方式浏览器直接访问和条件配置进入 Launchpad Designer最常见的方式是从 Fiori Launchpad 页面右侧点击用户头像在下拉菜单里找到配置链接。这个入口只有在你有SAP_FLP_ADMIN或具备相应角色权限时才会显示。如果你是管理员也可以直接通过 URL 访问设计器页面避免反复点击。通过/sap/bc/ui2/flp_cmp_content可以进入内容管理侧通过/sap/bc/ui2/flp进入启动页。你不需要记所有 URL只要知道设计器是基于 Web 的权限到位之后一定有入口就行。这里我提一个实操心得在开发或者配置环境里尽量给自己分配一个专用的管理账号不要在日常使用的业务账号上做内容配置。原因很简单设计器的变更实时生效而你日常账号往往挂着很多业务角色一旦误操作改了公共分组或者删了别人正在用的磁贴连排查都费劲。4.3 创建目录与分组的完整流程在 Designers 左侧面板中你会看到四个页签Tile、Catalog、Group、Target Mapping。这是新版和旧版的最大区别之一——旧版是先建分组再挂内容新版则是内容对象独立存在再在 Catalog 和 Group 里引用。创建 Catalog 的流程是进入 Catalog 页签点击新建输入名称和 ID。这时你可以把已经存在的 Tile 拖入该目录。注意 Catalog 本身不包含权限控制它是资产归集。真正把 Catalog 授给用户是在业务角色的应用权限里选择这个目录。针对你只想让一个人或者一个小组看到某几个磁贴的场景不要单独建一个只含一张磁贴的 Catalog这会导致一两年后 Catalog 数量失控。灵活的做法是用同一个细分 Catalog 比如销售订单查询挂到多个角色下面权限粒度通过角色来区分。创建 Group 的流程类似进入 Group 页签新建分组输入标题然后在页面分配里勾选你想放的 Catalog 和 Tile。分组是可以嵌套页签的最顶层的 Tab 就是你登录后看到的导航区。设计器支持拖拽排序这在视觉呈现上很方便但要注意配置保存后有一定的延迟才能在运行时看到效果。4.4 创建目标映射和磁贴的关键路径创建目标映射的路径是Target Mapping 页签 → 新建 → 填写语义对象、动作、应用类型、参数等字段。这里有一个重要的输入项叫使用应用 IDUsage ID。如果你是 SAP Fiori elements 或者使用标准应用这里通常填一个逻辑名比如审批中心的F0402或某个自定义应用的 usage。真正渲染的时候系统会通过 Usage ID 去解析 UI5 组件。很多项目实施中我发现大家经常把Tile 名称和Target Mapping 标题搞混。Tile 名称是显示在启动台上的文案Target Mapping 标题是后台逻辑对象的描述。两者可以不同但我在实际项目中会尽量保持一致或者 Tile 名称用业务长名Target Mapping 标题用简短唯一名。这样在后台排查时搜索结果的辨识度会大幅提升。磁贴创建还有一个小细节如果你希望磁贴能带一组默认参数比如从磁贴直接打开物料清单页面可以在目标映射级别配置参数值。但同时在磁贴级别有一个参数组的概念不同用户看到同样的磁贴可能会被分发不同参数这个是后台在授权时动态替换的。实际使用中我见过不少因为没有理解这个参数替换机制导致某个用户点击磁贴报缺少公司代码的错误其实不是授权问题是参数组没配好。4.5 角色分配到用户最终一步往往被轻视内容建模建得再好如果角色分配没跟上用户在启动页还是什么都看不到。Fiori 上的角色分配其实分为两层PFCG 角色和 Fiori 业务角色。传统 ABAP 环境中你要在 PFCG 里给角色分配菜单也就是 Catalog 和 Group然后通过 SU01 把用户分配给角色。在进行角色分配时最影响使用体验的是默认分组的设定。一个角色可以关联多个分组但用户登录后启动页只展示选中的主分组Default Group。如果你一个用户被分配了多个角色每个角色都有默认分组系统会挑其中一个作为启动页主分组其他分组会出现在下拉菜单或者页面页签里。这个默认到底是哪个角色说了算很多项目都没跟用户讲明白所以经常出现我明明有销售权限但升级之后打开启动页却默认在采购页面的问题。我给你的建议是在角色设计阶段就把登录默认落地页面这个信息体现在角色命名里例如加一个_HOME后缀的群组专门作为默认首页其他业务功能都通过页签方式呈现。这样无论用户有多少角色默认分组都是统一的首页入口不会因为某个角色的默认分组而出现每次登录都到不同页的怪象。5. 常见问题与排查技巧5.1 创建的内容消失了缓存与同步时间新手大概率会经历这么一件事在 Designers 里明明新建了一个分组也把磁贴放进去了但退出再登录启动页上什么都没有。不要先怀疑自己操作错了先考虑缓存问题。Fiori Launchpad 是前端渲染模式它的内容存储在后台但不一定会触发浏览器立即重新拉取。最直接的排查方式是按CtrlF5强制刷新或者清除浏览器本地存储里的FLP缓存。如果还是没有检查这个用户关联的业务角色是否包含新创建的 Catalog 或 Group。记住一个原则Designer 里的内容只是配方用户能不能看到菜品完全取决于角色这道授权链有没有传给厨师。另外如果你修改了现有目录里磁贴的顺序或者新增磁贴有时候在前台看到的变化会有延迟。SAP 后台有缓存机制需要等一段时间才会刷新或者你可以手动清除 Gateway 系统上的缓存。不过这个操作建议谨慎在繁忙时段不要随便清理影响面比较大。5.2 组件不一致为什么刷新后磁贴直接报错另一个高频问题磁贴在某个环境里点开是正常的到了另一个环境就报错。这种情况很大概率是目标映射指向的应用组件版本在目标系统里没有激活或者是语义对象没有同步过去。排查顺序建议为先在启动台后台打开 Tile 对应的 Target Mapping查看它引用的应用类型和组件名。然后去目标系统的/sap/bc/ui2/flp_cmp_content检查该组件是否存在。如果组件存在但版本不同需要确认前端构建和部署时间线是否已完成。Fiori 前端应用发布时通常要经过独立构建部署不是内容传输完成后立刻生效。如果是目标映射没有问题再看 OData 服务是否激活。很常见的一种错误是组件虽已部署但服务没有在/n/IWFND/MAINT_SERVICE里激活结果磁贴加载到了但数据请求失败。这也是我强烈建议每个 Fiori 项目建立一个应用上线检查表的原因。没有检查表上面任何一个环节缺失都会让一个简单磁贴变成难解之谜。5.3 多人协作时的覆盖冲突Designer 支持多人同时编辑同一个内容库这种灵活性的代价是容易互相覆盖。你们项目如果有多个人同时维护 Catalog 和分组我建议做一个简单的内部约定建立内容变更申请记录。谁在哪个时间点修改了哪个 Catalog 或者 Target Mapping至少要在团队通信渠道里喊一声。系统本身没有强制的锁机制当你保存一个目录时不会提醒你有人在你之后改过这个内容。所以覆盖是静默发生的。如果你想稍微稳一点可以在做出重大修改之前先把当前内容导出Designer 支持 JSON 导出保存一份快照。等修改确认没有问题后再删除快照。这样即便出了问题恢复是五分钟以内的事情。5.4 传输请求遗漏生产怎么找都对不上最后聊聊传输环节的排查。配置机改了内容目标机看不到首先不要怀疑系统问题大概率是请求没有释放或者传输途中被跳过。去传输管理界面看一下这个请求的状态是已释放还是可修改。有时候两个内容对象在同一个请求里其中一个传输失败会导致另一个也被回滚。如果传输状态正常但内容依然缺失再去检查目标系统的包分配。因为 Fiori 内容对象必须有软件组件归属如果对象被放到了本地包Local Package它就不会出现在传输请求里。这个坑非常隐蔽因为你在开发机上能正常看到内容一传到生产就消失。排查办法是查看对象的包属性确保属于可传输的软件组件。提示我自己在项目中会把所有 Fiori 内容对象固定在同一个自定义软件组件里不分散到多个包。这样在传输时只需要跟踪一个组件管理成本极低。6. 我的实操心得与底层建议Fiori Launchpad Designer 用熟了之后你会发现这个工具的设计哲学跟它表面上呈现的拖拽式配置完全不同。它真正要求你具备的是把业务应用抽象成语义对象的建模能力是把大量内容梳理成分层结构的治理能力是让内容变化带着添加上线流程一起走的管控能力。我个人在实际操作中体会最深的是不要在实施第一天就把所有 Catalog 和分组搭好。先挑一个真实的业务场景比如采购员工作台完整地走一遍建模、建目录、建分组、建映射、角色分配、跨环境传输的全链路。场景跑通了你再批量复制时所有流程的坑都已经踩平了。再分享一个高频生效的小技巧在实际交付给用户之前至少用一个测试用户登录验证一遍而且要刻意使用一个非管理员的低权限用户验证。因为管理员账号往往因为权限过大而掩盖很多内容缺失的问题。用测试用户过一遍场景你才能看到用户真正看到的世界。Fiori 的内容建模和治理这件事不会有做完的一天。新的应用会加进来旧的功能会被替换组织架构调整会改变角色权限。但只要你的底层设计是分层清晰、命名规范、传输可控的这些变化就只是日常维护而不是一次又一次的返工重建。从一个磁贴的快感中抽身出来站在整套入口体系的视角去管理内容你才算是真正掌握了 Launchpad Designer 的正确打开方式。