界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
部署与运维 · SKILL.md

sap-cloud-alm

sap-cloud-alm

【部署与运维】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.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: sap-cloud-alm description: > 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. license: MIT metadata: author: SAP Skills Community version: "1.0.0" last_verified: "2026-03-24"

SAP Cloud ALM — Application Lifecycle Management

Related Skills

  • sap-testing-quality — Test execution integrates with Cloud ALM Test Management
  • sap-devops-cicd — CI/CD pipelines integrate with Cloud ALM Deployment Management
  • sap-signavio — Process models from Signavio link to Cloud ALM implementation

Quick Start

Two main modes:

ModePurposeKey Features
Cloud ALM for ImplementationProject deliveryTasks, Requirements, Test Management, Deployment
Cloud ALM for OperationsRun & monitorHealth 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

CapabilityPurposeIntegration
Project & Task ManagementPlan sprints, assign workJira sync (optional)
Requirements ManagementCapture & trace requirementsLink to test cases
Process ManagementDefine scope, map processesSignavio import
Test ManagementManual & automated test executionATC, Tricentis
Deployment ManagementTrack transports & deploymentsCTS+, gCTS, BTP deploy
Change ManagementChange requests & approvalsChaRM-like workflow

Operations Capabilities

CapabilityMonitored SystemsKey Metrics
Health MonitoringS/4HANA, BTP, SuccessFactorsSystem availability, DB, memory
Integration MonitoringIntegration Suite, PI/POMessage throughput, errors
Real User Monitoring (RUM)Fiori apps, Web appsPage load time, JS errors
Job MonitoringBackground jobs, BTP jobsSuccess/failure, duration
Business Process MonitoringEnd-to-end processesSLA compliance, throughput
Configuration MonitoringSystem configurationDrift detection, compliance

Managed System Registration

SAP Cloud ALM ◄──── Service Key ────► Managed System
    │                                    │
    │  HTTPS (pull metrics)              │ Push events
    │  ← Health data                     │
    │  ← Alert notifications             │
    └────────────────────────────────────┘

Registration steps:

  1. BTP cockpit → Service Marketplace → sap-cloud-alm service
  2. Create service key with managed system credentials
  3. Cloud ALM → Landscape Management → Add managed system
  4. 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

ErrorMessageRoot CauseFix
401UnauthorizedToken expired or wrong tenantRefresh OAuth token; check CALM URL
403Insufficient scopeMissing Cloud ALM roleAssign role in SAP Cloud Identity Services
404Project not foundWrong project ID or no accessVerify project ID; check project membership
Connection failedManaged system unreachableNetwork/firewall issueCheck connectivity; verify service key
No health dataMetrics not collectedSystem not registered or agent missingRe-register managed system; check agent status
RUM: No dataNo user sessions capturedRUM script not injectedAdd RUM JavaScript snippet to Fiori launchpad
Alert stormToo many alertsThresholds too sensitiveAdjust thresholds; add suppression rules
Sync errorJira/external sync failedAPI key expired or endpoint changedUpdate integration credentials

Performance Tips

  1. Selective monitoring — Don't monitor everything; focus on business-critical systems and processes
  2. Threshold tuning — Start with vendor defaults, adjust after 2-4 weeks of baseline data
  3. Alert grouping — Group related alerts to prevent alert fatigue; use correlation rules
  4. RUM sampling — For high-traffic apps, sample RUM data (10-25%) instead of collecting all sessions
  5. API pagination — Cloud ALM APIs return max 100 items; always implement cursor-based pagination
  6. Dashboard design — Create role-specific dashboards (Basis, Developers, Business) not one-size-fits-all
  7. 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
我的收藏