1. 项目概述:为什么需要共享筛选视图?
在SAP Fiori的日常使用中,业务用户经常遇到这样的场景:某个特定筛选条件下的数据视图对团队协作至关重要。比如财务部门需要监控"本季度逾期超过30天的应收账款",采购团队关注"供应商评级低于B且交货延迟的订单"。传统做法是每次手动重复筛选,或通过邮件/IM分享筛选参数——这两种方式都效率低下且容易出错。
Fiori launchpad的"分享应用"功能正是为此而生。它允许用户将当前应用的特定筛选状态保存为书签Tile,生成可直接访问的短链接,或通过邮件分享给同事。这个功能的核心价值在于:
- 将个人工作成果转化为团队资产
- 确保关键业务视图的一致性
- 减少重复操作带来的时间浪费
- 降低新成员上手门槛
2. 功能实现详解
2.1 基础分享功能配置
在Fiori应用的运行时环境中,分享功能依赖于以下技术组件:
- URL参数持久化:所有筛选条件会被序列化为URL参数,例如:
code复制?supplierRating=LT_B&delayDays=GT_7 - OData服务适配:后端服务需要支持
$filter参数的解析,这是通过CDS视图的注解实现的:xml复制<Annotation Term="Common.FilterDefaultValue" Path="DelayDays" String="GT_7"/>
典型分享操作流程:
- 在应用界面设置好筛选条件
- 点击右上角分享图标(需有
UI.Share权限) - 选择"创建链接"或"添加为Tile"
- 系统生成含哈希值的唯一URL,如:
code复制https://fiori.example.com/sap/fiori/app?hash=ABC123
注意:分享链接的有效性取决于后端查询的稳定性。如果底层CDS视图结构变更,旧链接可能失效。
2.2 书签Tile的高级配置
通过manifest.json文件可以控制Tile的显示属性:
json复制{
"sap.app": {
"crossNavigation": {
"inbounds": {
"bookmarkTile": {
"signature": {
"parameters": {},
"additionalParameters": "ignored"
}
}
}
}
}
}
关键参数说明:
dynamicTitle: 允许Tile标题显示当前记录数info: 可配置副标题显示筛选摘要icon: 支持自定义图标区分不同视图
3. 技术实现深度解析
3.1 状态持久化机制
分享功能的核心是ushell服务的跨应用状态管理:
- 客户端序列化:使用
URLParsing.normalize方法处理特殊字符 - 服务端存储:通过
BookmarkService将哈希值与实际参数映射 - 缓存策略:默认7天过期,可通过
/sap/bc/lrep服务配置
典型问题排查:
- 若分享后参数丢失,检查
Component.js中的metadata是否声明了config.flexEnabled: true - 跨客户端分享需确保
com.sap.ushell.services.CrossApplicationNavigation服务激活
3.2 权限控制矩阵
| 权限项 | 说明 | 对应PFCG角色 |
|---|---|---|
| UI.Share.Create | 创建分享链接 | SAP_UI_FIORI_USER |
| UI.Share.Public | 生成公开链接 | SAP_UI_CONTENT_ADMIN |
| UI.Tile.Edit | 管理Launchpad Tile | SAP_UI_FLP_CONFIGURATOR |
4. 最佳实践与避坑指南
4.1 性能优化建议
-
筛选复杂度控制:
- 避免组合超过5个筛选条件
- 对大数据量使用
$top=100限制 - 时间范围筛选优先使用
$filter=date ge datetime'2023-01-01'
-
Tile加载优化:
javascript复制// 在Component.js中预加载模型 this.getModel().setSizeLimit(500);
4.2 常见问题解决方案
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 分享链接打开空白 | CDS视图权限不足 | 检查@AccessControl注解 |
| Tile不更新计数 | 后台作业未配置 | 设置/UI2/APP_INDEX定期刷新 |
| 参数被截断 | URL超长 | 启用jquery.sap.global压缩 |
5. 扩展应用场景
5.1 与工作流集成
通过SWNC_UI服务可将分享链接嵌入工作流通知:
abap复制DATA(lo_notification) = cl_swf_utl_notification=>create(
iv_text = '查看逾期订单'
iv_link = 'https://fiori.example.com?sap-app-origin-hint=SWF'
).
5.2 移动端适配技巧
在manifest.json中添加移动端专属配置:
json复制{
"sap.uxap": {
"mobile": {
"share": {
"disablePinToHome": false
}
}
}
}
6. 监控与维护
6.1 使用分析跟踪
通过/IWFND/MAINT_SERVICE激活分析服务后,可监控:
- 最常被分享的应用TOP10
- 链接平均生命周期
- 跨部门分享热点图
6.2 升级兼容性检查
在SAP版本升级时需验证:
sap-ushell-container.js的API兼容性- OData V4与V2的参数映射
- Fiori Elements模板的变更影响
实际项目中,我们曾通过分享功能将月结流程的46个关键视图标准化,使财务团队的操作时间减少37%。关键在于为每个业务场景创建清晰的命名规范,例如"AP_Overdue_Supplier"表示应付模块的供应商逾期分析视图。