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. 03Launchpad 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 Generator Skill

このスキルを使うと、AppList.json ファイル内のアプリ名を基に、SAP Fiori Launchpad(FLP)の URL を生成できます。

参照情報

SAP Fiori アプリの情報を調べる場合:

アプリリストデータベース:references/AppList.json を読み込みます。SAP Fiori アプリの Semantic Object-Action マッピング、アプリ ID、説明、技術的な詳細がすべて含まれています。

この参照情報を使って、以下の操作を行います。

  • 名前でアプリを検索する(部分一致、大文字と小文字を区別しない)
  • URL 生成用に「Semantic Object - Action」フィールドを抽出する
  • アプリの詳細(ID、説明、コンポーネント)をユーザーに提示する
  • 完全一致するアプリが見つからない場合、類似するアプリを提案する
AppList.json の更新

AppList.json のデータは、SAP Fiori Apps Library から取得できます。

  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 を抽出する

「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
Semantic Object-Action がない場合

アプリは存在するものの、Semantic Object-Action がない場合:

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 の生成

ユーザー:「ベース URL を https://myserver.com:44300、クライアントを 100 として、Create Maintenance Request アプリの URL を生成してください」

応答:

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:言語のカスタマイズ

ユーザー:「ベース URL を https://myserver.com:44300、クライアントを 100 として、Create Maintenance Request のドイツ語版 URL を生成してください」

応答:

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 アプリを起動するためにそのまま使用できます。

コメント