Sap cloud alm
23 SAP development skills for Claude Code — ABAP, RAP, CAP, Fiori, BTP, HANA, S/4HANA, Integration Suite and more. Agent Skills Specification compatible.
npx -y skills add efeumutaslan/SAP-SKILLS --skill sap-cloud-almAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
SAP Cloud ALM (Application Lifecycle Management) skill. Use when configuring health monitoring, real user monitoring (RUM), integration/job monitoring, or managing SAP implementations (change/test/deployment management). If the user mentions Cloud ALM, SAP monitoring, RUM, health check, or ALM operations, use this skill.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
10.3 KB, as published. Nobody here has run it
SAP Cloud ALM — Application Lifecycle Management
Related Skills
sap-testing-quality— Test execution integrates with Cloud ALM Test Managementsap-devops-cicd— CI/CD pipelines integrate with Cloud ALM Deployment Managementsap-signavio— Process models from Signavio link to Cloud ALM implementation
Quick Start
Two main modes:
| Mode | Purpose | Key Features |
|---|---|---|
| Cloud ALM for Implementation | Project delivery | Tasks, Requirements, Test Management, Deployment |
| Cloud ALM for Operations | Run & monitor | Health Monitoring, Integration Monitoring, RUM, BPM |
Access: SAP Cloud ALM is provisioned via SAP for Me → Cloud ALM tenant (included with SAP Enterprise Support)
First API call — List Projects:
curl -X GET "https://{{CALM_HOST}}/api/calm-projects/v1/projects" \
-H "Authorization: Bearer {{TOKEN}}" \
-H "Accept: application/json"
Core Concepts
Implementation Capabilities
| Capability | Purpose | Integration |
|---|---|---|
| Project & Task Management | Plan sprints, assign work | Jira sync (optional) |
| Requirements Management | Capture & trace requirements | Link to test cases |
| Process Management | Define scope, map processes | Signavio import |
| Test Management | Manual & automated test execution | ATC, Tricentis |
| Deployment Management | Track transports & deployments | CTS+, gCTS, BTP deploy |
| Change Management | Change requests & approvals | ChaRM-like workflow |
Operations Capabilities
| Capability | Monitored Systems | Key Metrics |
|---|---|---|
| Health Monitoring | S/4HANA, BTP, SuccessFactors | System availability, DB, memory |
| Integration Monitoring | Integration Suite, PI/PO | Message throughput, errors |
| Real User Monitoring (RUM) | Fiori apps, Web apps | Page load time, JS errors |
| Job Monitoring | Background jobs, BTP jobs | Success/failure, duration |
| Business Process Monitoring | End-to-end processes | SLA compliance, throughput |
| Configuration Monitoring | System configuration | Drift detection, compliance |
Managed System Registration
SAP Cloud ALM ◄──── Service Key ────► Managed System
│ │
│ HTTPS (pull metrics) │ Push events
│ ← Health data │
│ ← Alert notifications │
└────────────────────────────────────┘
Registration steps:
- BTP cockpit → Service Marketplace →
sap-cloud-almservice - Create service key with managed system credentials
- Cloud ALM → Landscape Management → Add managed system
- Enter service key details → Test connection → Activate
Common Patterns
Pattern 1: Health Monitoring Setup
Configure custom health metric:
// Custom metric definition
{
"metricId": "custom_order_backlog",
"name": "Order Processing Backlog",
"description": "Number of unprocessed sales orders",
"category": "Business",
"unit": "count",
"thresholds": {
"warning": 100,
"critical": 500
},
"collection": {
"type": "odata",
"url": "/sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder/$count?$filter=OverallSDProcessStatus eq 'A'",
"interval": 300
}
}
Pattern 2: Business Process Monitoring — O2C
{
"processId": "O2C_Standard",
"name": "Order-to-Cash Standard",
"steps": [
{
"stepId": "SO_CREATE",
"name": "Sales Order Created",
"source": "S/4HANA",
"event": "SalesOrder.Created",
"sla": {"maxDuration": "PT4H"}
},
{
"stepId": "DELIVERY",
"name": "Delivery Created",
"source": "S/4HANA",
"event": "OutboundDelivery.Created",
"sla": {"maxDuration": "PT24H", "from": "SO_CREATE"}
},
{
"stepId": "BILLING",
"name": "Billing Document Created",
"source": "S/4HANA",
"event": "BillingDocument.Created",
"sla": {"maxDuration": "PT48H", "from": "DELIVERY"}
},
{
"stepId": "PAYMENT",
"name": "Payment Received",
"source": "S/4HANA",
"event": "CustomerPayment.Cleared",
"sla": {"maxDuration": "P30D", "from": "BILLING"}
}
],
"alerts": {
"slaBreachChannel": "email",
"recipients": ["[email protected]"]
}
}
Pattern 3: Cloud ALM API — Create Task
import requests
def create_task(calm_host, token, project_id, task_data):
"""Create implementation task in Cloud ALM."""
resp = requests.post(
f"https://{calm_host}/api/calm-tasks/v1/tasks",
headers={
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
},
json={
"projectId": project_id,
"title": task_data["title"],
"description": task_data["description"],
"type": task_data.get("type", "IMPLEMENTATION"),
"status": "OPEN",
"priority": task_data.get("priority", "MEDIUM"),
"assignee": task_data.get("assignee"),
"dueDate": task_data.get("due_date"),
"tags": task_data.get("tags", [])
}
)
resp.raise_for_status()
return resp.json()
Pattern 4: Test Management Integration
def create_test_case(calm_host, token, project_id, test_data):
"""Create manual test case linked to requirement."""
resp = requests.post(
f"https://{calm_host}/api/calm-testmanagement/v1/testcases",
headers={
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
},
json={
"projectId": project_id,
"title": test_data["title"],
"requirementId": test_data.get("requirement_id"),
"steps": [
{
"stepNumber": i + 1,
"action": step["action"],
"expectedResult": step["expected"]
}
for i, step in enumerate(test_data["steps"])
],
"priority": "HIGH",
"automationStatus": "MANUAL"
}
)
resp.raise_for_status()
return resp.json()
def report_test_result(calm_host, token, test_case_id, result):
"""Report test execution result."""
resp = requests.post(
f"https://{calm_host}/api/calm-testmanagement/v1/testcases/{test_case_id}/executions",
headers={
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
},
json={
"status": result["status"], # PASSED, FAILED, BLOCKED
"executedBy": result["tester"],
"executedOn": result["date"],
"comment": result.get("comment", "")
}
)
resp.raise_for_status()
return resp.json()
Pattern 5: Alert Notification Configuration
{
"alertRule": {
"name": "Critical System Health",
"scope": {
"systems": ["S4H-PRD", "BTP-PRD"],
"metrics": ["availability", "response_time", "error_rate"]
},
"conditions": {
"severity": ["CRITICAL"],
"duration": "PT5M"
},
"actions": [
{
"type": "EMAIL",
"recipients": ["[email protected]"],
"template": "system_critical_alert"
},
{
"type": "WEBHOOK",
"url": "https://hooks.slack.com/services/{{WEBHOOK_ID}}",
"payload": {
"text": "🚨 {{alertName}}: {{systemName}} - {{metricName}} is {{severity}}"
}
}
]
}
}
Error Catalog
| Error | Message | Root Cause | Fix |
|---|---|---|---|
401 | Unauthorized | Token expired or wrong tenant | Refresh OAuth token; check CALM URL |
403 | Insufficient scope | Missing Cloud ALM role | Assign role in SAP Cloud Identity Services |
404 | Project not found | Wrong project ID or no access | Verify project ID; check project membership |
| Connection failed | Managed system unreachable | Network/firewall issue | Check connectivity; verify service key |
| No health data | Metrics not collected | System not registered or agent missing | Re-register managed system; check agent status |
| RUM: No data | No user sessions captured | RUM script not injected | Add RUM JavaScript snippet to Fiori launchpad |
| Alert storm | Too many alerts | Thresholds too sensitive | Adjust thresholds; add suppression rules |
| Sync error | Jira/external sync failed | API key expired or endpoint changed | Update integration credentials |
Performance Tips
- Selective monitoring — Don't monitor everything; focus on business-critical systems and processes
- Threshold tuning — Start with vendor defaults, adjust after 2-4 weeks of baseline data
- Alert grouping — Group related alerts to prevent alert fatigue; use correlation rules
- RUM sampling — For high-traffic apps, sample RUM data (10-25%) instead of collecting all sessions
- API pagination — Cloud ALM APIs return max 100 items; always implement cursor-based pagination
- Dashboard design — Create role-specific dashboards (Basis, Developers, Business) not one-size-fits-all
- Data retention — Configure metric retention periods; 90 days for detailed, 1 year for aggregated
Gotchas
- Licensing: Cloud ALM is free with SAP Enterprise Support, but some advanced features need additional license
- Tenant isolation: Cloud ALM has its own BTP subaccount; don't mix with application subaccounts
- Time zones: All Cloud ALM timestamps are UTC; dashboard display uses browser timezone
- Managed system limit: Check your entitlement for max number of managed systems
- RUM privacy: Real User Monitoring collects user session data — ensure GDPR/privacy compliance
- API versioning: Cloud ALM APIs are versioned (
/v1/); always specify version in requests