Sap build process automation
Skill efeumutaslan/SAP-SKILLS/skills/sap-build-process-automation
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-build-process-automationAssembled 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 Build Process Automation skill for workflow, RPA, and business rules development. Use when creating approval workflows, decision tables, RPA bots (Desktop Agent), API triggers, or event-driven processes from S/4HANA. Also covers Forms, Actions (OData/REST connectors), Visibility dashboards, and process monitoring. If the user mentions SBPA, SAP workflow, approval process, decision table, or RPA bot on BTP, 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.7 KB, as published. Nobody here has run it
SAP Build Process Automation
Related Skills
sap-s4hana-extensibility— S/4HANA event sources and API integrationsap-security-authorization— BTP authorization for process automationsap-rap-comprehensive— RAP business events as process triggerssap-event-mesh— Event-driven triggers from S/4HANA business eventssap-signavio— Model processes in Signavio, automate in SBPAsap-integration-suite-advanced— Complex API connectors for Actions
Quick Start
Create a workflow in 5 steps:
- SAP Build Lobby → Create → Business Process Project
- Add a Process → Choose trigger: Form, API, or Event
- Add steps: Approval → Decision → Action → (repeat)
- Configure conditions (If/Else gateways)
- Release → Deploy → Test in Monitor tab
Architecture:
SAP Build Process Automation (BTP)
├── Process Builder — Visual workflow modeling
├── Decision Editor — Business rules / decision tables
├── Automation Editor — RPA bot designer
├── Form Builder — Trigger, approval, task forms
├── Visibility — Process monitoring dashboards
└── Actions — API connectors (OData, REST)
Core Concepts
Trigger Types
| Trigger | Start Method | Use Case |
|---|---|---|
| Form | User fills a request form | Leave request, purchase approval |
| API | REST API call (OAuth2) | System integration, external apps |
| Event | Event Mesh subscription | S/4HANA business events, SuccessFactors events |
Step Types
| Step | Description |
|---|---|
| Approval | Routes to approver(s) with approve/reject form |
| Decision | Evaluates business rules (decision table or text rule) |
| Automation | Runs RPA bot (attended or unattended) |
| Action | Calls external API (OData/REST) |
| Sub-Process | Reusable embedded process |
| Sends notification email | |
| Condition | If/Else routing based on data |
Decision Tables
Decision tables are if/then rule engines:
IF OrderAmount > 10000 AND Region = "EMEA"
THEN ApprovalLevel = "Director", Priority = "High"
IF OrderAmount > 5000 AND Region = "EMEA"
THEN ApprovalLevel = "Manager", Priority = "Medium"
IF OrderAmount <= 5000
THEN ApprovalLevel = "TeamLead", Priority = "Low"
Execution modes:
- First Match — Returns the first matching rule (top-down, stops at first hit)
- All Match — Returns all matching rules
Decisions can be deployed independently and called via RESTful Decision API.
Form Types
| Type | Purpose | Editable |
|---|---|---|
| Trigger Form | Starts the process (user input) | Yes — full input |
| Approval Form | Shows context + approve/reject | Read-only context + action buttons |
| Task Form | Additional user input mid-process | Yes — partial input |
| Notification Form | Information display only | Read-only |
Common Patterns
Pattern 1: Purchase Order Approval Workflow
[Form Trigger: PO Request]
→ [Decision: Approval Level]
IF amount > 10000 → [Approval: Director]
IF amount > 5000 → [Approval: Manager]
ELSE → [Auto-Approve]
→ [Action: Create PO in S/4HANA via OData]
→ [Mail: Notify Requester]
Pattern 2: API Trigger Setup
- Add API trigger to process
- Note the generated API endpoint and definition ID
- Configure OAuth2 credentials in BTP service key
- Call endpoint:
POST /workflow/rest/v1/workflow-instances
Headers: Authorization: Bearer <token>
Body: {
"definitionId": "{{process_definition_id}}",
"context": {
"orderId": "PO-12345",
"amount": 15000,
"requester": "[email protected]"
}
}
Pattern 3: Event Trigger from S/4HANA
- Configure SAP Event Mesh on BTP
- In S/4HANA: Enable business events (e.g.,
sap.s4.beh.purchaseorder.v1.PurchaseOrder.Created.v1) - In SBPA: Add Event Trigger → select event from catalog
- Map event payload to process context variables
- Process starts automatically when event fires
Pattern 4: Action (API Connector)
- Create Action Project in SAP Build
- Import API specification (OData metadata or OpenAPI)
- Configure destination:
{
"Name": "S4HANA_API",
"Type": "HTTP",
"URL": "https://my-s4.ondemand.com",
"Authentication": "OAuth2ClientCredentials",
"ProxyType": "Internet",
"sap.processautomation.enabled": true,
"sap.applicationdevelopment.actions.enabled": true
}
- Use Action step in process to call the API
Pattern 5: RPA Automation
Automation: Extract Invoice Data
1. Open Browser → Navigate to vendor portal
2. Read Table → Extract invoice line items
3. Loop → For each line item:
a. Map fields to S/4HANA format
b. Call Action: Post invoice via API
4. Log results → Send summary email
Desktop Agent requirements: Windows only, installed locally, connects to BTP tenant.
Error Catalog
| Error | Cause | Fix |
|---|---|---|
| 403 Forbidden on deploy | Missing role collection ProcessAutomationAdmin | Assign role collection in BTP cockpit |
| "Process stuck in running" | Approval task not assigned or recipient offline | Check Monitor → open instance → reassign task |
| Action timeout | API destination unreachable or slow | Check destination config; increase timeout |
| Automation "Agent Offline" | Desktop Agent not running or disconnected | Start Desktop Agent; check network connectivity |
| Event trigger not firing | Event Mesh subscription misconfigured | Verify topic subscription and event format |
| Decision returns empty | No matching rule found | Add a default/catch-all rule at bottom of decision table |
| Form data not passing | Variable binding missing between steps | Check input/output mapping in process flow |
| "503 Action Internal Error" | Destination missing required properties | Add sap.processautomation.enabled = true to destination |
| Deploy fails "version exists" | Same version already deployed | Increment version number before release |
| Memory exceeded in automation | Processing large dataset in single loop | Use batch processing (chunks of 100-500 records) |
Performance Tips
- Use sub-processes for reusable logic (DRY principle)
- Define custom variables as constants for magic values
- Batch processing in automations: process records in chunks, not one-by-one
- Use destination variables for multi-environment support (dev/test/prod)
- Deploy decisions independently when business rules change frequently
- Keep forms simple: <15 fields per form for good UX
- Use SemVer (x.y.z) versioning for release management
Bundled Resources
| File | When to Read |
|---|---|
references/sbpa-complete-guide.md | Full SBPA reference with all component details |
references/decision-patterns.md | Decision table design patterns and examples |
references/action-connector-guide.md | Setting up API connectors with destinations |
templates/approval-workflow.json | Basic approval workflow template |
templates/decision-table.json | Decision table configuration template |
Gotchas
- Process vs. Automation: "Process" = workflow (server-side); "Automation" = RPA bot (desktop agent, client-side) — they're complementary but very different
- Desktop Agent requirement: RPA automations require SAP Build Desktop Agent installed on user's Windows machine — cannot run headless on server
- Decision table versioning: Published decision tables are immutable; to change, create a new version and update the process to reference it
- Form data types: SBPA forms support limited data types; complex nested structures may need flattening before passing to forms
- API trigger authentication: API triggers use OAuth 2.0 from BTP — the calling system needs a proper service key, not basic auth
- Error handling scope: Try-catch in processes catches only the enclosed steps; unhandled errors in subprocesses bubble up to parent
- Parallel branches and merge: Parallel gateways must have matching merge gateway — orphaned branches cause process to hang indefinitely
- SAP Build Store content: Pre-built content from SAP Build Store may need customization; don't assume it works out-of-the-box for your scenario
Advanced Patterns
Pattern 6: Multi-Level Approval with Escalation
[Form: Expense Report]
→ [Decision: Approval Matrix]
IF amount > 50000 → [Approval: CFO] (deadline: 3 days)
IF amount > 10000 → [Approval: Director] (deadline: 2 days)
IF amount > 1000 → [Approval: Manager] (deadline: 1 day)
ELSE → [Auto-Approve]
→ [Condition: Approved?]
YES → [Action: Post to S/4HANA FI]
→ [Mail: Confirmation to requester]
NO → [Mail: Rejection with reason]
→ [End]
Escalation: If no response within deadline →
→ [Action: Notify substitute approver]
→ [Approval: Substitute] (deadline: 1 day)
→ [Condition: Still no response?] → [Auto-Reject]
Pattern 7: Parallel Processing with Aggregation
[API Trigger: Multi-Department Review]
→ [Parallel Gateway]
├── [Approval: Legal Review]
├── [Approval: Finance Review]
└── [Approval: Compliance Review]
→ [Merge Gateway: All must approve]
→ [Decision: Final Assessment]
→ [Action: Update status in S/4HANA]
Pattern 8: Exception Handling
{
"errorHandling": {
"type": "boundary-event",
"attachedTo": "Action: Create PO",
"errorType": "timeout",
"handler": [
{ "step": "Log error to monitoring" },
{ "step": "Retry with exponential backoff", "maxRetries": 3 },
{ "step": "If still failing: route to manual queue" }
]
}
}