mcpField
S
sap-fiori-url-generator

sap-fiori-url-generator

github.com/likweitan生产力7282 次安装2 周前更新
代码仓库

关于 sap-fiori-url-generator

sap-fiori-url-generator 是一项技能,可在 AppList.json 中查找 SAP Fiori 应用并生成其 Launchpad URL。它支持按应用名称搜索、查看应用详情,以及处理缺失或含糊的匹配结果。

主要功能

  1. 01按部分名称搜索应用
  2. 02提取语义对象和操作
  3. 03构建 Launchpad URL
  4. 04查看应用详情和相似结果
  5. 05处理缺失或含糊的匹配

适用场景

  1. 01为指定 Fiori 应用生成 URL
  2. 02查找与搜索词相关的应用
  3. 03导航前核对应用启动目标

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/likweitan/abap-skills --skill sap-fiori-url-generator

安装后在 Claude Code 中输入/sap-fiori-url-generator确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

EXAMPLES.md
LICENSE.txt
QUICK_REFERENCE.md
README.md
scripts/
fiori-url-generator.js
fiori-url-generator.py
test.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 数据:

  1. 前往 https://pr.alm.me.sap.com/launchpad#FALApp-display
  2. 将应用列表导出为 Excel
  3. 将 Excel 文件转换为 JSON 格式

这样可确保应用列表与最新的 SAP Fiori 应用保持同步。

概述

用户提供以下内容时:

  1. SAP Fiori 基础 URL(例如,https://myserver.com:44300)
  2. 应用名称(例如,“Create Maintenance Request”)

你将:

  1. 在 AppList.json 文件中搜索该应用
  2. 提取“Semantic Object - Action”字段
  3. 使用正确的参数构建完整的 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)
处理过程
  1. 读取 AppList.json
  2. 搜索“Create Maintenance Request”
  3. 找到“Semantic Object - Action”为 MaintenanceWorkRequest-create 的条目
  4. 使用用户提供的基础 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 时,其他字段为可选项

最佳实践

  1. 始终请求必需参数:如果未提供,请向用户询问基本 URL 和 sap-client
  2. 验证参数:确保基本 URL 格式有效(以 http:// 或 https:// 开头)
  3. 去除末尾斜杠:拼接前清理基本 URL
  4. 不区分大小写搜索:让搜索更方便用户使用
  5. 提供应用详情:显示应用 ID 和说明以供确认
  6. 妥善处理多个匹配项:存在歧义时,让用户选择
  7. 默认语言:如果未指定,默认使用 sap-language=EN
  8. 转义特殊字符:如果应用名称在 URL 中包含特殊字符
  9. 询问缺失信息:切勿假定基本 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 的无缝生成:

  1. 读取并解析 AppList.json
  2. 按名称搜索应用
  3. 提取语义对象-操作映射
  4. 构造格式正确的 FLP URL
  5. 妥善处理错误和边缘情况
  6. 支持多种语言和自定义设置

生成的 URL 可直接用于在 Fiori Launchpad 中启动 SAP Fiori 应用。

评论

支持 Markdown