Install
$ agentstack add skill-efeumutaslan-sap-skills-sap-cloud-alm ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
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": ["process-owner@example.com"]
}
}
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": ["basis-team@example.com"],
"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
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: efeumutaslan
- Source: efeumutaslan/SAP-SKILLS
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.