1. 项目概述:Fiori应用交付的最后一公里挑战
在SAP Fiori项目实施过程中,开发团队往往把90%的精力放在前端界面开发和后端服务对接上,却忽略了最关键的用户交付环节。我经历过多个Fiori项目,发现一个共同现象:当开发团队宣布"应用开发完成"时,业务用户的实际使用体验往往与预期相差甚远。最常见的问题包括:
- 用户登录后找不到应用入口(尽管技术配置已完成)
- 应用出现在Launchpad但点击提示无权限
- 关键应用被淹没在一堆不相关的磁贴中
- 跨系统应用分散在不同位置难以统一访问
这些问题的根源在于:Fiori应用的交付不是简单的技术部署,而是一套完整的用户体验工程。它需要打通三个关键层次:
- 权限层:通过PFCG角色确保用户有权访问
- 目录层:通过Business Catalog组织应用功能
- 展示层:通过Spaces/Pages构建用户界面
提示:Fiori Launchpad的设计理念是"权限与展示分离"。这意味着一个应用可以配置给用户权限,但不一定展示在他的默认视图中。这种灵活性带来了配置复杂性。
2. 核心链路解析:从权限到展示的完整路径
2.1 PFCG角色:权限控制的中枢神经
PFCG(Profile Generator)是SAP权限管理的核心工具。在Fiori场景下,它的作用是将业务岗位职责转化为系统访问边界。与传统的GUI事务码授权不同,Fiori角色需要特别关注:
- Fiori特有的授权对象:如S_ICF(Internet Communication Framework)、S_RFC(远程函数调用)等
- OData服务授权:每个Fiori应用依赖的/UI2/、/IWFND/等服务都需要显式授权
- 前端组件权限:UI5组件库、i18n资源等需要HTTP访问权限
实际操作中,我推荐使用事务码PFCG创建"空壳角色",然后通过"菜单"选项卡添加对应的Business Catalog。例如:
abap复制// 典型Fiori角色结构示例
角色: ZFIORI_ACCOUNTANT
- 菜单项: SAP_GL_ACCOUNTING_FIORI_BC (总账会计业务目录)
- 授权数据:
* S_TCODE: Fiori Launchpad事务码(如/UI2/FLP)
* S_ICF: /UI2/, /IWFND/, /SAP/BC/UI5_UI5/等路径
* S_RFC: 相关RFC目标(如连接Gateway系统)
2.2 Business Catalog:功能模块的集装箱
Business Catalog(业务目录)是连接技术实现与业务功能的桥梁。它与传统GUI事务码目录的最大区别在于:
- 应用导向:按业务场景而非技术模块组织
- 多级结构:支持Catalog→Group→App的层级关系
- 跨系统整合:可聚合来自不同系统的应用
创建Catalog的最佳实践:
- 使用事务码SBWP进入Business Catalog Builder
- 避免过度细分(单个Catalog包含5-15个应用为佳)
- 为跨系统应用创建"虚拟Catalog"
- 使用语义明确的ID和描述(如SAP_MM_PURCHASING_BC)
注意:Catalog只是逻辑容器,不包含任何授权数据。实际权限仍然由PFCG角色控制。
2.3 Spaces & Pages:用户体验的设计画布
Spaces/Pages是Fiori Launchpad的新一代信息架构,取代了传统的Groups概念。其三层结构为:
- Space(空间):对应业务领域(如"财务"、"采购")
- Page(页面):对应业务流程(如"应付账款"、"费用报销")
- Section(区域):对应任务类型(如"常用功能"、"待办事项")
配置示例(通过Fiori Launchpad Designer):
xml复制<!-- 典型Space结构示例 -->
<Space id="FINANCE_SPACE">
<Page id="AP_PAGE">
<Section id="QUICK_ACTIONS">
<App id="APPROVE_INVOICES" />
<App id="CREATE_PAYMENT" />
</Section>
<Section id="REPORTS">
<App id="AP_AGING_REPORT" />
</Section>
</Page>
</Space>
3. 实施路线图:从设计到交付的完整流程
3.1 阶段一:业务场景解构(耗时30%)
- 角色矩阵分析:列出所有用户类型及其业务职责
- 示例:应付会计需要发票审核、付款执行、账务查询
- 应用清单整理:映射每个职责对应的Fiori应用
- 权限边界确认:识别敏感操作(如过账、审批)的特殊控制
工具推荐:使用Excel制作"角色-应用矩阵表",标注必须/可选应用。
3.2 阶段二:技术配置实施(耗时40%)
- PFCG角色创建(事务码PFCG)
- 复制标准角色模板(如SAP_FIORI_ACCOUNTANT)
- 调整授权参数(特别是公司代码、工厂等组织单元)
- Catalog分配(事务码SBWP)
- 将Catalog关联到开发包(避免传输冲突)
- 设置正确的语义对象和动作(如Display、Manage)
- Spaces设计(Fiori Launchpad Designer)
- 遵循"3-5-7"原则:不超过3级Space、5个主Page、7个Section
- 为高频应用设置固定位置(视觉热区研究显示左上区域点击率最高)
3.3 阶段三:用户验收测试(耗时30%)
- 权限测试:使用测试用户验证各角色访问范围
- 特别注意负面测试(验证无权限的操作确实被阻止)
- 导航测试:模拟用户完成端到端业务流程
- 记录从登录到完成任务的平均点击次数(目标<5次)
- 性能测试:检查多用户并发时的Launchpad加载速度
- 使用事务码ST05跟踪SQL语句优化空间
4. 常见问题与实战技巧
4.1 权限问题排查指南
症状:用户能看到应用但点击时提示无权限
- 检查点1:事务码SU01确认角色已分配
- 检查点2:事务码SUIM检查授权对象缺失
- 检查点3:事务码/IWFND/MAINT_SERVICE检查OData服务激活
症状:应用直接不可见(无任何提示)
- 检查点1:事务码PFCG确认Catalog已包含在角色中
- 检查点2:事务码SBWP检查Catalog发布状态
- 检查点3:Fiori Launchpad Designer检查Space可见性配置
4.2 性能优化技巧
-
Catalog分组策略:
- 将高频应用放在独立的Catalog(减少元数据加载量)
- 对大型Catalog启用按需加载(>50个应用时效果显著)
-
Space缓存配置:
javascript复制// 在Launchpad的Component.js中增加缓存配置 sap.ushell.Container.getService("ClientSideTargetResolution").setCacheMaxAge(3600); -
图片优化:
- 将自定义磁贴图片存储在/UI2/FLP/下而非MIME
- 使用SVG格式(比PNG小40%以上)
4.3 跨系统集成方案
对于需要聚合多个SAP/非SAP系统的场景:
-
中央Launchpad架构:
- 使用SAP Cloud Platform作为统一入口
- 通过Destinations连接各后端系统
-
混合部署模式:
abap复制// 在ABAP系统间建立信任关系 CREATE TRUSTED RFC DESTINATION "GWHUB" AS HOST 'gateway.example.com' CLIENT '100' USER 'RFCUSER' USING SECURED; -
单点登录配置:
- 使用SAML 2.0协议配置身份提供商
- 确保所有系统的用户主数据同步(事务码SCIM)
5. 项目复盘:我们踩过的那些坑
案例一:过度细分角色
初期我们为每个微小职责创建独立角色(如"发票查看"、"发票审批"),导致:
- 角色数量爆炸(从20个增长到200+)
- 用户需要分配多个角色才能正常工作
- 权限变更时需要修改数十个角色
解决方案:改用"基准角色+扩展角色"模式:
- 基准角色包含该岗位所有基础权限
- 扩展角色仅包含特殊权限(如审批)
案例二:忽视移动端适配
设计的Space在桌面端表现良好,但在手机上:
- 多级Page导致导航深度过深
- 大尺寸磁贴挤占屏幕空间
- 横向滚动操作不符合移动习惯
解决方案:
- 为移动端创建专用Space(后缀_MOBILE)
- 使用"卡片"式布局替代传统磁贴
- 启用响应式断点检测:
css复制/* 在自定义CSS中定义移动端样式 */ @media (max-width: 600px) { .sapUshellTile { width: 100% !important; } }
案例三:传输策略缺失
开发系统配置的Catalog/Spaces未纳入传输请求,导致:
- 生产系统缺失关键应用配置
- 各环境界面不一致
- 回滚时配置丢失
解决方案:
- 为所有自定义对象分配开发包(事务码SE80)
- 使用CTS+传输设计件(事务码STC01)
- 建立发布检查清单(包含15项关键配置)