sap-fiori-url-generator について
sap-fiori-url-generatorは、AppList.jsonからSAP Fioriアプリを検索し、Launchpad URLを作成するスキルです。アプリ名検索、詳細表示、未一致や複数候補への対応ができます。
主な機能
- 01部分名によるアプリ検索
- 02セマンティックオブジェクトとアクションの抽出
- 03Launchpad 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 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 から取得できます。
- 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 を抽出する
「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
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 の生成では、その他のフィールドは任意です
ベストプラクティス
- 必須パラメーターを必ず確認する:ベース 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 アプリを起動するためにそのまま使用できます。