计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
sap-fiori-url-generator【效率与协作】Generate SAP Fiori Launchpad URLs from app names using AppList.json. Looks up app information by name and constructs proper FLP URLs with required parameters like sap-client and sap-language.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
This skill enables you to generate SAP Fiori Launchpad (FLP) URLs based on app names from the AppList.json file.
When you need to look up SAP Fiori app information:
App List Database: Read references/AppList.json - contains all SAP Fiori apps with their Semantic Object-Action mappings, App IDs, descriptions, and technical details.
Use this reference to:
The AppList.json data can be obtained from SAP's Fiori Apps Library:
This ensures the app list stays current with the latest SAP Fiori applications.
When a user provides:
https://myserver.com:44300)You will:
The complete SAP Fiori Launchpad URL follows this pattern:
{BASE_URL}/sap/bc/ui2/flp?sap-client={CLIENT}&sap-language={LANGUAGE}#{SEMANTIC_OBJECT}-{ACTION}
https://myserver.com:44300)
100)
EN, DE, FR)
EN if not specified by userFirst, read the AppList.json file to access the app data:
const fs = require("fs");
const appList = JSON.parse(fs.readFileSync("AppList.json", "utf8"));
Search for the app by name (case-insensitive, partial match):
function findAppByName(appName) {
const normalizedSearch = appName.toLowerCase().trim();
return appList.find(
(app) =>
app["App Name"] &&
app["App Name"].toLowerCase().includes(normalizedSearch),
);
}
Get the "Semantic Object - Action" field:
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;
}
Build the complete 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}`;
}
https://myserver.com:44300 (USER MUST PROVIDE)100 (USER MUST PROVIDE)Create Maintenance Request (USER MUST PROVIDE)EN (optional - defaults to EN if not specified)MaintenanceWorkRequest-createhttps://myserver.com:44300/sap/bc/ui2/flp?sap-client=100&sap-language=EN#MaintenanceWorkRequest-create
If the app name is not found in AppList.json:
Error: App "{app_name}" not found in AppList.json
Suggestion: Check spelling or try searching with partial name
If the app exists but has no 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
If multiple apps match the search term:
Found multiple apps matching "{search_term}":
1. App Name 1 (ID: F1234)
2. App Name 2 (ID: F5678)
Please specify which app you want
When an exact match isn't found, suggest similar apps:
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"],
}));
}
Provide additional app information:
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"],
};
}
User: "Generate URL for Create Maintenance Request app with base URL https://myserver.com:44300 and client 100"
Response:
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
User: "Generate URL for Create Maintenance Request in German, base URL https://myserver.com:44300, client 100"
Response:
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
User: "Generate URL for Create Maintenance Request"
Response:
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
User: "Find apps related to 'Workflow'"
Response:
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
Common SAP language codes:
EN - EnglishDE - German (Deutsch)ES - Spanish (Español)FR - French (Français)IT - Italian (Italiano)PT - Portuguese (Português)ZH - Chinese (中文)JA - Japanese (日本語)KO - Korean (한국어)Each app entry contains:
Some apps may have NaN or null values for certain fields. Always check:
http:// or https://)sap-language=EN as default if not specifiedconst 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);
This skill enables seamless SAP Fiori URL generation by:
The generated URLs can be directly used to launch SAP Fiori apps in the Fiori Launchpad.