目标映射在 SAP Fiori 导航架构中的核心作用
目标映射是 SAP Fiori Launchpad 导航机制中的路由引擎,它负责将前端的用户交互动作转换为具体的后端应用调用。作为磁贴配置的关键组成部分,目标映射建立了语义导航模型与实际应用之间的桥梁。
- 目标映射的基本概念与定位
1.1 定义与核心价值
目标映射 是一个配置对象,它将语义对象(Semantic Object) + 动作(Action) 的组合映射到具体的应用目标(Fiori 应用、SAP GUI 事务、URL 等)。
核心价值:
- 实现松耦合导航:前端磁贴不直接硬编码应用URL
- 支持统一路由管理:集中管理所有应用的导航终点
- 提供环境感知路由:根据设备、用户上下文动态选择目标
1.2 在导航架构中的位置
磁贴(触发) → 语义对象+动作 → 目标映射(解析) → 具体应用(执行)
- 目标映射的配置类型与场景
2.1 主要映射类型对比
| 映射类型 | 目标应用 | 配置方式 | 典型场景 |
|---|---|---|---|
| SAP Fiori 应用 | UI5/Fiori Elements 应用 | 应用ID + 语义对象绑定 | 标准业务应用(如销售订单处理) |
| SAP GUI 事务 | 传统 GUI 事务 | 事务代码 + 参数映射 | 尚未 Fiori 化的传统事务 |
| 外部 URL | 第三方网页应用 | 绝对URL + 参数传递 | 集成外部系统、报表工具 |
| 自定义应用 | 自定义 UI5 应用 | 组件名 + 配置参数 | 客户定制开发的应用 |
2.2 详细配置示例
2.2.1 Fiori 应用映射
xml
<!-- Launchpad Designer 中的目标映射配置 -->
<TargetMapping id="BankAccount_manage">
<SemanticObject>BankAccount</SemanticObject>
<Action>manage</Action>
<Target>
<Type>UI5</Type>
<AppId>fin_ap_bankaccount_manage</AppId>
<Url>/sap/bc/ui5_ui5/sap/fin_ap_bankaccount</Url>
<Parameters>
<Parameter name="companyCode" semanticObjectAttribute="CompanyCode"/>
</Parameters>
</Target>
</TargetMapping>
2.2.2 SAP GUI 事务映射
xml
<TargetMapping id="FB01_display">
<SemanticObject>AccountingDocument</SemanticObject>
<Action>display</Action>
<Target>
<Type>Transaction</Type>
<Name>FB03</Name>
<Parameters>
<Parameter name="BELNR" semanticObjectAttribute="AccountingDocumentNumber"/>
<Parameter name="GJAHR" semanticObjectAttribute="FiscalYear"/>
</Parameters>
</Target>
</TargetMapping>
- 目标映射的工作机制与流程
3.1 导航触发完整流程
graph TD
A[用户点击磁贴] --> B[提取语义对象+动作]
B --> C[查询目标映射表]
C --> D{找到匹配映射?}
D -->|是| E[解析目标类型和参数]
D -->|否| F[显示"应用不可用"]
E --> G[根据类型路由]
G --> H[UI5应用]
G --> I[SAP GUI事务]
G --> J[外部URL]
H --> K[加载UI5组件]
I --> L[启动GUI会话]
J --> M[打开浏览器窗口]
3.2 参数传递机制
目标映射支持智能参数传递:
javascript
// 语义对象属性到应用参数的映射示例
const parameterMapping = {
// 从语义上下文获取参数值
"CompanyCode": {
source: "semanticObject",
attribute: "CompanyCode",
required: true,
defaultValue: "1000"
},
// 从用户上下文获取参数值
"UserId": {
source: "userContext",
attribute: "userId",
required: true
},
// 固定参数值
"DisplayMode": {
source: "fixed",
value: "fullScreen"
}
};
- 目标映射的高级特性
4.1 条件性目标映射
根据运行时条件选择不同的目标:
xml
<TargetMapping id="SalesOrder_create_conditional">
<SemanticObject>SalesOrder</SemanticObject>
<Action>create</Action>
<Conditions>
<!-- 根据设备类型选择不同应用 -->
<Condition test="deviceType" value="desktop">
<Target Type="UI5" AppId="salesorder_create_desktop"/>
</Condition>
<Condition test="deviceType" value="mobile">
<Target Type="UI5" AppId="salesorder_create_mobile"/>
</Condition>
</Conditions>
</TargetMapping>
4.2 内联参数与上下文传递
xml
<TargetMapping id="Customer_display_with_context">
<SemanticObject>Customer</SemanticObject>
<Action>display</Action>
<Target>
<Type>UI5</Type>
<AppId>customer_display</AppId>
<!-- 内联参数:直接传递固定值 -->
<InlineParameter name="displayMode" value="advanced"/>
<!-- 上下文参数:从语义对象传递 -->
<ContextParameter name="customerId" semanticObjectAttribute="CustomerId"/>
<!-- 用户上下文参数 -->
<UserContextParameter name="language" attribute="userLanguage"/>
</Target>
</TargetMapping>
- 实际业务场景中的应用
5.1 跨应用导航场景
业务场景:从销售订单列表导航到相关的客户主数据
javascript
// 销售订单应用的导航动作
function navigateToCustomerFromOrder(salesOrder) {
// 通过语义导航触发目标映射
sap.ushell.Container.getService("CrossApplicationNavigation")
.toExternal({
target: {
semanticObject: "Customer",
action: "display"
},
params: {
"CustomerId": salesOrder.soldToParty
}
});
}
5.2 统一出口管理
配置优势:当应用URL变更时,只需更新目标映射,所有引用该语义对象的磁贴自动生效:
xml
<!-- 应用迁移前的映射 -->
<TargetMapping id="OldApp_mapping">
<SemanticObject>BusinessPartner</SemanticObject>
<Action>manage</Action>
<Target Url="/sap/bc/ui5_ui5/sap/bp_old_app"/>
</TargetMapping>
<!-- 应用迁移后的映射 -->
<TargetMapping id="NewApp_mapping">
<SemanticObject>BusinessPartner</SemanticObject>
<Action>manage</Action>
<Target Url="/sap/bc/ui5_ui5/sap/bp_new_app"/>
</TargetMapping>
- 管理与监控最佳实践
6.1 目标映射的集中管理
- Launchpad Designer:图形化配置界面
- Fiori 应用库:标准内容的目标映射
- 自定义开发:通过 ABAP 类维护客户特定映射
6.2 问题诊断与排查
当导航失败时,检查要点:
javascript
// 诊断目标映射问题的关键检查点
const diagnosticChecks = [
"1. 语义对象+动作组合是否存在目标映射",
"2. 目标应用是否已激活并部署",
"3. 用户是否有目标应用的访问权限",
"4. 参数映射是否正确完整",
"5. 目标URL/事务是否有效可用"
];
- 与整体架构的集成关系
目标映射作为导航架构的路由层,与其他组件深度集成:
- 与磁贴的关系:磁贴声明语义意图,目标映射提供具体实现
- 与技术目录的关系:技术目录包含的目标映射决定其功能范围
- 与业务目录的关系:业务目录的权限影响目标映射的可访问性
- 与页面的关系:页面布局基于可用的目标映射显示对应磁贴
总结 :目标映射是 SAP Fiori 实现声明式导航 和应用解耦的核心机制。它通过统一的语义导航模型,屏蔽了后端应用的复杂性,为用户提供一致、灵活的跨应用导航体验,同时大大简化了系统的维护和演进成本。