关于 sap-fiori-url-generator
sap-fiori-url-generator 是一项技能,可在 AppList.json 中查找 SAP Fiori 应用并生成其 Launchpad URL。它支持按应用名称搜索、查看应用详情,以及处理缺失或含糊的匹配结果。
主要功能
- 01按部分名称搜索应用
- 02提取语义对象和操作
- 03构建 Launchpad URL
- 04查看应用详情和相似结果
- 05处理缺失或含糊的匹配
适用场景
- 01为指定 Fiori 应用生成 URL
- 02查找与搜索词相关的应用
- 03导航前核对应用启动目标
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ likweitan/ abap-skills --skill sap-fiori-url-generator安装后在 Claude Code 中输入/sap-fiori-url-generator确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
EXAMPLES.mdLICENSE.txtQUICK_REFERENCE.mdREADME.mdscripts/fiori-url-generator.jsfiori-url-generator.pytest.py详细介绍
SAP Fiori URL 生成技能
此技能可根据 AppList.json 文件中的应用名称生成 SAP Fiori Launchpad(FLP)URL。
参考资料
需要查询 SAP Fiori 应用信息时:
应用列表数据库:读取 references/AppList.json——其中包含所有 SAP Fiori 应用的语义对象-操作映射、应用 ID、描述和技术详情。
使用此参考资料来:
- 按名称搜索应用(部分匹配,不区分大小写)
- 提取“Semantic Object - Action”字段以生成 URL
- 向用户提供应用详情(ID、描述、组件)
- 找不到完全匹配项时推荐类似应用
更新 AppList.json
可从 SAP 的 Fiori Apps Library 获取 AppList.json 数据:
- 前往 https://pr.alm.me.sap.com/launchpad#FALApp-display
- 将应用列表导出为 Excel
- 将 Excel 文件转换为 JSON 格式
这样可确保应用列表与最新的 SAP Fiori 应用保持同步。
概述
用户提供以下内容时:
- SAP Fiori 基础 URL(例如,
https://myserver.com:44300) - 应用名称(例如,“Create Maintenance Request”)
你将:
- 在 AppList.json 文件中搜索该应用
- 提取“Semantic Object - Action”字段
- 使用正确的参数构建完整的 FLP URL
URL 结构
完整的 SAP Fiori Launchpad URL 遵循以下模式:
{BASE_URL}/sap/bc/ui2/flp?sap-client={CLIENT}&sap-language={LANGUAGE}#{SEMANTIC_OBJECT}-{ACTION}
必需参数(用户必须提供)
- BASE_URL:SAP 系统基础 URL(例如,
https://myserver.com:44300)- 用户必须提供
- 无默认值
- sap-client:SAP 客户端编号(例如,
100)- 用户必须提供
- 无默认值
- 所有 SAP Fiori Launchpad URL 都需要此参数
可选参数
- sap-language:语言代码(例如,
EN、DE、FR)- 如果用户未指定,默认为
EN - 可根据请求自定义
- 如果用户未指定,默认为
自动生成的参数
- SEMANTIC_OBJECT-ACTION:从 AppList.json 的“Semantic Object - Action”字段中自动提取
- 无需用户输入
- 根据应用名称查找
实现步骤
步骤 1:读取 AppList.json
首先,读取 AppList.json 文件以访问应用数据:
const fs = require("fs");
const appList = JSON.parse(fs.readFileSync("AppList.json", "utf8"));
步骤 2:搜索应用
按名称搜索应用(不区分大小写,支持部分匹配):
function findAppByName(appName) {
const normalizedSearch = appName.toLowerCase().trim();
return appList.find(
(app) =>
app["App Name"] &&
app["App Name"].toLowerCase().includes(normalizedSearch),
);
}
步骤 3:提取语义对象-操作
获取“Semantic Object - Action”字段:
function getSemanticObjectAction(app) {
const semanticAction = app["Semantic Object - Action"];
if (!semanticAction || semanticAction === "NaN" || semanticAction === null) {
throw new Error("No Semantic Object-Action found for this app");
}
return semanticAction;
}
步骤 4:构建 URL
构建完整的 FLP URL:
function generateFioriUrl(baseUrl, client, semanticAction, language = "EN") {
// Validate required parameters
if (!baseUrl) {
throw new Error("BASE_URL is required and must be provided by user");
}
if (!client) {
throw new Error("sap-client is required and must be provided by user");
}
// Remove trailing slash from base URL if present
const cleanBaseUrl = baseUrl.replace(/\/$/, "");
return `${cleanBaseUrl}/sap/bc/ui2/flp?sap-client=${client}&sap-language=${language}#${semanticAction}`;
}
完整示例
输入(所有必需参数均须由用户提供)
- 基础 URL:
https://myserver.com:44300(用户必须提供) - SAP 客户端:
100(用户必须提供) - 应用名称:
Create Maintenance Request(用户必须提供) - 语言:
EN(可选——如果未指定,默认为 EN)
处理过程
- 读取 AppList.json
- 搜索“Create Maintenance Request”
- 找到“Semantic Object - Action”为
MaintenanceWorkRequest-create的条目 - 使用用户提供的基础 URL 和客户端编号构建 URL
输出
https://myserver.com:44300/sap/bc/ui2/flp?sap-client=100&sap-language=EN#MaintenanceWorkRequest-create
错误处理
未找到应用
如果在 AppList.json 中找不到该应用名称:
Error: App "{app_name}" not found in AppList.json
Suggestion: Check spelling or try searching with partial name
缺少语义对象-操作
如果应用存在,但没有语义对象-操作:
Error: App "{app_name}" (ID: {app_id}) does not have a Semantic Object-Action defined
Note: This app may not be launchable via FLP URL
多个匹配项
如果搜索词匹配到多个应用:
Found multiple apps matching "{search_term}":
1. App Name 1 (ID: F1234)
2. App Name 2 (ID: F5678)
Please specify which app you want
其他功能
列出类似应用
找不到完全匹配项时,推荐类似应用:
function findSimilarApps(searchTerm, limit = 5) {
const normalized = searchTerm.toLowerCase();
return appList
.filter(
(app) =>
app["App Name"] && app["App Name"].toLowerCase().includes(normalized),
)
.slice(0, limit)
.map((app) => ({
name: app["App Name"],
id: app["App ID"],
semanticAction: app["Semantic Object - Action"],
}));
}
提取应用详情
提供其他应用信息:
function getAppDetails(app) {
return {
name: app["App Name"],
id: app["App ID"],
description: app["App Description"],
semanticAction: app["Semantic Object - Action"],
technicalCatalog: app["Technical Catalog"],
transactionCode: app["Transaction Codes"],
component: app["Application Component"],
};
}
用户交互示例
示例 1:生成基本 URL
用户:“为 Create Maintenance Request 应用生成 URL,基础 URL 为 https://myserver.com:44300,客户端编号为 100”
响应:
App Found: Create Maintenance Request (F1511A)
Semantic Object-Action: MaintenanceWorkRequest-create
Generated URL:
https://myserver.com:44300/sap/bc/ui2/flp?sap-client=100&sap-language=EN#MaintenanceWorkRequest-create
示例 2:自定义语言
用户:“为 Create Maintenance Request 生成德语 URL,基础 URL 为 https://myserver.com:44300,客户端编号为 100”
响应:
App Found: Create Maintenance Request (F1511A)
Semantic Object-Action: MaintenanceWorkRequest-create
Generated URL:
https://myserver.com:44300/sap/bc/ui2/flp?sap-client=100&sap-language=DE#MaintenanceWorkRequest-create
示例 3:缺少必需参数
用户:“为 Create Maintenance Request 生成 URL”
响应:
Error: Missing required parameters
Please provide:
- Base URL (e.g., https://myserver.com:44300)
- SAP Client (e.g., 100)
- App Name (provided: Create Maintenance Request)
- Language (optional, defaults to EN)
Example: Generate URL for "Create Maintenance Request" with base URL https://myserver.com:44300 and client 100
示例 3:按部分名称搜索
用户:“查找与‘Workflow’相关的应用”
响应:
Found 8 apps matching "Workflow":
1. Manage Workflows (F2190)
Action: Workflow-showList
2. Workflow Component (F2506)
Action: Not available
3. Manage Workflow Templates (F2787)
Action: WorkflowTemplate-showList
4. Manage Workflows - For Bank Accounts (F2796)
Action: BankAccount-workflowShowList
5. Manage Workflow Scenarios (F3067)
Action: WorkflowScenario-showList
To generate a URL, please provide:
- Base URL (e.g., https://myserver.com:44300)
- SAP Client (e.g., 100)
- Which app you want from the list above
语言代码参考
常见的 SAP 语言代码:
EN- 英语DE- 德语(Deutsch)ES- 西班牙语(Español)FR- 法语(Français)IT- 意大利语(Italiano)PT- 葡萄牙语(Português)ZH- 中文(中文)JA- 日语(日本語)KO- 韩语(한국어)
技术说明
AppList.json 结构
每个应用条目包含:
- 应用名称:应用的显示名称
- 应用 ID:SAP Fiori 应用标识符(例如,F1511A)
- 语义对象 - 操作:FLP 导航目标(例如,MaintenanceWorkRequest-create)
- UI 技术:使用的技术(SAP Fiori elements、SAPUI5 等)
- 应用程序组件:SAP 组件缩写
- 应用说明:功能的详细说明
- 技术目录:目录分配
- 事务代码:传统 SAP 事务(如适用)
- OData 服务:后端服务名称
处理缺失数据
某些应用的部分字段可能为 NaN 或 null。请务必检查:
- 必须存在语义对象 - 操作,才能生成 FLP URL
- 必须存在应用名称,才能进行搜索
- 生成 URL 时,其他字段为可选项
最佳实践
- 始终请求必需参数:如果未提供,请向用户询问基本 URL 和 sap-client
- 验证参数:确保基本 URL 格式有效(以
http://或https://开头) - 去除末尾斜杠:拼接前清理基本 URL
- 不区分大小写搜索:让搜索更方便用户使用
- 提供应用详情:显示应用 ID 和说明以供确认
- 妥善处理多个匹配项:存在歧义时,让用户选择
- 默认语言:如果未指定,默认使用
sap-language=EN - 转义特殊字符:如果应用名称在 URL 中包含特殊字符
- 询问缺失信息:切勿假定基本 URL 或客户端,务必询问用户
完整实现示例
const fs = require("fs");
class FioriUrlGenerator {
constructor(appListPath) {
this.apps = JSON.parse(fs.readFileSync(appListPath, "utf8"));
}
findApp(appName) {
const normalized = appName.toLowerCase().trim();
return this.apps.find(
(app) =>
app["App Name"] && app["App Name"].toLowerCase().includes(normalized),
);
}
generateUrl(baseUrl, client, appName, options = {}) {
const { language = "EN" } = options;
// Validate required parameters
if (!baseUrl) {
throw new Error("Base URL is required - must be provided by user");
}
if (!client) {
throw new Error("SAP Client is required - must be provided by user");
}
// Find the app
const app = this.findApp(appName);
if (!app) {
throw new Error(`App "${appName}" not found`);
}
// Extract semantic action
const semanticAction = app["Semantic Object - Action"];
if (!semanticAction || semanticAction === "NaN") {
throw new Error(`App "${app["App Name"]}" has no Semantic Object-Action`);
}
// Clean base URL
const cleanBaseUrl = baseUrl.replace(/\/$/, "");
// Construct URL
return {
url: `${cleanBaseUrl}/sap/bc/ui2/flp?sap-client=${client}&sap-language=${language}#${semanticAction}`,
appDetails: {
name: app["App Name"],
id: app["App ID"],
description: app["App Description"],
semanticAction: semanticAction,
},
};
}
}
// Usage - User MUST provide base URL and client
const generator = new FioriUrlGenerator("./AppList.json");
const result = generator.generateUrl(
"https://myserver.com:44300", // User provided
"100", // User provided
"Create Maintenance Request", // User provided
{ language: "EN" }, // Optional - defaults to EN
);
console.log(result.url);
总结
此技能通过以下方式实现 SAP Fiori URL 的无缝生成:
- 读取并解析 AppList.json
- 按名称搜索应用
- 提取语义对象-操作映射
- 构造格式正确的 FLP URL
- 妥善处理错误和边缘情况
- 支持多种语言和自定义设置
生成的 URL 可直接用于在 Fiori Launchpad 中启动 SAP Fiori 应用。