sap-integration-wiki
Skill46 starsChanged 15 days agoMITView on GitHub
Use when integrating external systems (Java, Python, .NET, Node.js, low-code) with SAP (ECC 6.0, S/4HANA On-Prem/Cloud): OData V2/V4, RFC/JCo, SOAP RFC, dynamic REST2RFC/JSON without JCo, IDoc/PI-PO, BAPI, RAP, BTP Integration Suite/iFlow, Event Mesh, Cloud Connector, Communication Arrangements, FI-AA, AR/AP, Central Finance (CFIN), FSSC / 财务共享中心 (Kingdee/金蝶, 用友 to SAP). Use whenever asked to connect to SAP, call a SAP API/BAPI/RFC, read or create SAP data from outside (purchase/sales/production orders, inventory, financial documents, AR/AP, assets, material master, business partner), configure JCo destinations, call or expose RFC/BAPI as JSON from Python/Java/Node/Go without SAP libraries, handle IDocs, set up S/4HANA Cloud Communication Arrangements, implement retry/idempotency, or troubleshoot SAP HTTP 400/401/403, "CSRF token validation failed", "IDoc status 51", "/sap/bc/soap/rfc", "/sap/bc/rest2rfc", JCo/RFC destination errors — even when the user never says "SAP" and only describes symptoms.
In this repository4 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- abap-code-reviewSkill
- sap-adt-cliSkill
- sap-transport-gateSkill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 5 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 26
Before loading any reference file, ask the following if not already clear from the user's message:
- Distinctive: line 54
After clarifying, follow this decision tree to pick the right reference files:
- Very specific: line 58
Read the relevant file from references/scenarios/ based on the business object:
- Distinctive: line 72
Always read the scenario file first: before reading any tech file.
- Very specific: line 77
Read the relevant file from references/tech/ based on the recommended approach from Step 1:
- Very specific: line 93
Read references/troubleshoot/ based on symptom:
- Distinctive: line 106
Use this when the user has not specified a technology preference:
- Distinctive: line 157
When answering an integration question, always structure the response as:
- Very specific: line 170
BAPI_TRANSACTION_COMMIT: Every write BAPI call in SAP must be followed by an explicit BAPI_TRANSACTION_COMMIT call, or the changes will be …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
SAP Integration Wiki
Runtime requirement: none. This is a knowledge base — never check for,
install, or require the sap-adt CLI. (references/runtime-compatibility.json
declares not-required; references/setup.md is informational only.)
This skill routes integration questions to the right reference based on your context. Before loading any reference file, ask the following if not already clear from the user's message:
Trigger examples
User phrases that should activate this skill (non-exhaustive): "connect to SAP", "get data from SAP", "SAP keeps returning 401", "how do I call BAPI from Java", "how do I call SAP RFC from Python", "call SAP without JCo", "SAP SOAP endpoint", "expose an existing BAPI as JSON", "dynamic REST2RFC", "SAP OData not working".
Object/endpoint names that signal this skill: BAPI_PO_CREATE1,
API_PURCHASEORDER_PROCESS_SRV, BAPI_FIXEDASSET_GETLIST,
BAPI_ASSET_ACQUISITION_POST, CFIN OData V4, API_CFinRpldSupplierInvoice,
JCo connection, RFC destination, BTP iFlow, Cloud Connector,
SAP Event Mesh, Communication Arrangement, /sap/bc/rest2rfc.
Clarifying questions (ask only what is unknown)
- SAP version: ECC 6.0 / S/4HANA On-Premise / S/4HANA Cloud Public Edition / S/4HANA Cloud Private Edition?
- Integration direction: External → SAP (write/trigger) / SAP → External (event/push) / Bidirectional / Read-only query?
- Latency requirement: Synchronous (real-time response needed) / Asynchronous (fire-and-forget or queue)?
- Business object: Purchase Order / Sales Order / Inventory/Stock / Financial Document / Material Master / Business Partner / Production Order / BOM / Other?
- Consumer technology: Java/JVM / Python / .NET / Node.js / Low-code (Zapier, Power Automate) / Other?
Routing logic
After clarifying, follow this decision tree to pick the right reference files:
Step 1: Pick the scenario file
Read the relevant file from references/scenarios/ based on the business object:
| Business Object | File |
| Purchase Order (create, read, change, approve) | references/scenarios/mm-po.md |
| Inventory / Stock query or reservation | references/scenarios/mm-stock.md |
| Sales Order (create, track, confirm) | references/scenarios/sd-order.md |
| Financial Document (post GL, read FI docs) | references/scenarios/fi-doc.md |
| AR / AP open items, supplier invoice, payment, down payment | references/scenarios/fi-ar-ap.md |
| Fixed Asset (read register, acquisition, retirement, transfer) | references/scenarios/fi-asset.md |
| Financial Shared Service Center (FSSC) — Kingdee↔SAP, CFIN | references/scenarios/fi-fssc.md |
| Material Master / Business Partner / Org Data (cost center, plant) | references/scenarios/master-data.md |
| Production Order / BOM / Goods Movement (261/101) / MRP | references/scenarios/pp-production.md |
Always read the scenario file first before reading any tech file. The scenario file specifies which integration technology to recommend per version.
Step 2: Pick the technology file
Read the relevant file from references/tech/ based on the recommended approach from Step 1:
| Technology | File | Use when |
| OData REST V2/V4 | references/tech/odata.md | S/4HANA On-Prem or Cloud, standard scenario, HTTP-native client |
| RFC / JCo (Java remote function call) | references/tech/rfc-jco.md | ECC (primary), S/4 when no OData exists, bulk operations, Java-only |
| SOAP over HTTP RFC (no JCo) | references/tech/soap-rfc-http.md | Call any RFC-FM from non-JVM runtime via HTTPS — Python, Node.js, Go, curl; ECC or S/4 On-Prem |
| Dynamic REST2RFC Gateway (JSON, no JCo) | references/tech/rest2rfc-gateway.md | Reuse registered RFC/BAPIs through JSON without per-interface mapping code; custom ABAP deployment is acceptable; no suitable standard OData |
| IDoc / SAP PI-PO | references/tech/idoc-pi.md | Async integration, EDI, partner/supplier message exchange |
| BAPI or RAP | references/tech/bapi-rap.md | ECC BAPIs, S/4HANA RAP OData V4 services, decision on which to use |
| Authentication (any technology) | references/tech/auth.md | Auth failures, first-time setup, OAuth2, SSL/TLS, ICF activation |
| BTP Integration Suite / iFlow / Cloud Connector / Event Mesh | references/tech/btp-cloud-integration.md | BTP-mediated integration, S/4HANA Cloud + BTP, Event Mesh consumers, Communication Arrangements |
| Retry / idempotency / security / monitoring / testing | references/tech/best-practices.md | Production hardening, error classification, structured logging, connection pooling, CI patterns |
Step 3: If there is an error or failure
Read references/troubleshoot/ based on symptom:
| Symptom | File |
| HTTP 4xx / 5xx from OData endpoint | references/troubleshoot/odata-errors.md |
| Login failures / token issues / CSRF errors | references/troubleshoot/auth-errors.md |
| IDoc stuck / status 51 / port not configured | references/troubleshoot/idoc-errors.md |
| Behavior differs between SAP versions | references/troubleshoot/version-diff.md |
Quick technology decision matrix
Use this when the user has not specified a technology preference:
| SAP Version | Scenario | Recommended | Fallback |
| S/4HANA On-Prem 2020+ | Create/Read PO | OData V2 API_PURCHASEORDER_PROCESS_SRV | JCo + BAPI_PO_CREATE1 |
| S/4HANA On-Prem 2023+ | Create/Read PO | OData V4 API_PURCHASEORDER (if released) | OData V2 |
| ECC 6.0 | Create/Read PO | JCo + BAPI_PO_CREATE1 | IDoc ORDERS |
| ECC 6.0 (non-JVM client, JSON preferred) | Reuse registered RFC-FM without per-interface wrappers | Dynamic REST2RFC Gateway | SOAP over HTTP; Java JCo microservice |
| ECC 6.0 (non-JVM client, no custom ABAP) | Call any RFC-FM without JCo | SOAP over HTTP (/sap/bc/soap/rfc) | Java JCo microservice proxy |
| S/4HANA Cloud Public | Any | OData V4 / RAP | None (RFC unavailable externally) |
| Any version | Stock query (real-time) | OData API_MATERIAL_STOCK_SRV | BAPI_MATERIAL_STOCK_REQ_LIST |
| Any version | FI posting | JCo + BAPI_ACC_DOCUMENT_POST | (no standard OData for posting) |
| S/4HANA On-Prem 1809+ | Query AR/AP open items | OData V2 API_OPLACCTGDOCITEMCUBE_SRV | JCo BAPI_AR_ACC_GETOPENITEMS / BAPI_AP_ACC_GETOPENITEMS |
| ECC 6.0 | Query AR/AP open items | JCo BAPI_AR_ACC_GETOPENITEMS / BAPI_AP_ACC_GETOPENITEMS | — |
| S/4HANA On-Prem 1809+ | Create supplier invoice | OData V2 API_SUPPLIERINVOICE_PROCESS_SRV | JCo BAPI_INCOMINGINVOICE_CREATE |
| Any version | Read fixed asset list/values | JCo BAPI_FIXEDASSET_GETLIST | — |
| Any version | Post asset acquisition/retirement/transfer | JCo BAPI_ASSET_ACQUISITION_POST / _RETIREMENT_POST / _TRANSFER_POST (always CHECK first) | — |
| S/4HANA Cloud | Fixed asset operations | OData V4 CE_FIXEDASSET_0001 / OP_FIXEDASSETACQUISITION_0001 (Comm. Arr. SAP_COM_0510) | — |
| S/4HANA CFIN | Post from non-SAP (Kingdee) to Central Finance | OData V4 API_CFinRpldSupplierInvoice / API_CFinRpldBillingDocument (Comm. Arr. SAP_COM_0453) | BTP iFlow + CFIN |
| Any version | Async supplier EDI | IDoc via PI/PO | File-based integration |
| S/4HANA On-Prem | Read Material Master | OData V2 API_PRODUCT_SRV | JCo + BAPI_MATERIAL_GET_DETAIL |
| S/4HANA On-Prem | Create/Change Material | JCo + BAPI_MATERIAL_SAVEDATA | IDoc MATMAS05 |
| S/4HANA On-Prem 2020+ | Business Partner (Customer/Vendor) | OData V2 API_BUSINESS_PARTNER | JCo + BAPI_BUPA_CREATE_FROM_DATA |
| ECC 6.0 | Business Partner / Customer / Vendor | JCo + BAPI_CUSTOMER_CREATEFROMDATA1 / BAPI_VENDOR_CREATE | IDoc DEBMAS/CREMAS |
| S/4HANA On-Prem | Production Order (create/change) | OData V2 API_PP_ORDERS_SRV | JCo + BAPI_PRODORD_CREATE |
| Any version | Goods Movement (261/101/etc.) | JCo + BAPI_GOODSMVT_CREATE | OData API_MATERIAL_DOCUMENT_SRV (S/4) |
| Any version | Production Order Confirmation | JCo + BAPI_PRODORDCONF_CREATE_TT | IDoc LOIPRO |
| Any | BTP-mediated integration to S/4HANA Cloud | BTP Integration Suite iFlow + Communication Arrangement | N/A |
| Any | Event-driven / decoupled async | SAP Event Mesh (BTP) | IDoc via PI/PO |
Scripts and assets
Point users to these runnable artifacts when they need working code or templates:
| Need | Resource |
| Generate Postman Collection for any OData service | scripts/gen-odata-postman.js |
Generate JCo .jcoDestination properties file | scripts/gen-jco-config.py |
| Generate IDoc XML skeleton for any message type | scripts/gen-idoc-template.py |
| PO creation payload (OData V2 POST body) | assets/payloads/po-create.json |
| PO item quantity update (PATCH body) | assets/payloads/po-update.json |
| IDoc ORDERS05 XML example | assets/payloads/idoc-orders05.xml |
| OAuth2 config template for S/4HANA On-Premise | assets/configs/oauth-template.json |
| JCo connection properties template (all properties) | assets/configs/jco-props.properties |
Response format
When answering an integration question, always structure the response as:
- Recommended approach — one sentence naming the technology and why it fits the user's version and scenario
- Prerequisites — what must be configured on the SAP side first (user roles, service activation, RFC destination, partner profile, etc.)
- Implementation steps — numbered list with working code snippets (curl, Java, Python as appropriate to the user's tech stack)
- Common pitfalls — 2–3 things that typically go wrong and exactly how to avoid or fix them
- Reference — link to SAP API Business Hub or SAP Help Portal page when available
Important SAP concepts for non-SAP developers
- CSRF token: SAP OData services require a two-step process for mutating operations (POST/PATCH/DELETE). First GET to fetch the token, then include it in all write calls. Token is tied to a session cookie.
- BAPI_TRANSACTION_COMMIT: Every write BAPI call in SAP must be followed by an explicit
BAPI_TRANSACTION_COMMITcall, or the changes will be rolled back. This is a hard requirement, not optional. - OData $batch: SAP OData supports
$batchfor grouping multiple operations, but has strict ordering and boundary requirements. - SAP system number (SYSNR): A two-digit instance number (e.g.,
00), not the host port. Do not confuse with port 3300+SYSNR. - Client: SAP is multi-tenanted within a single system. Always specify the client (e.g.,
100,800) in every connection. - ICF node: SAP Internet Communication Framework. OData services are only reachable if the corresponding ICF node is activated. Transaction:
SICF. - SOAP over HTTP RFC: SAP exposes all RFC-enabled function modules via a standard SOAP endpoint at
/sap/bc/soap/rfc. No SAP-specific client library is required — any HTTP library works. The ICF node for this path must be activated inSICF. Use this when JCo is not practical (non-JVM runtimes, containerised workloads, rapid prototyping). Does not support IDoc, tRFC, or qRFC. - Dynamic REST2RFC Gateway: A community pure-ABAP option for exposing registered RFC/BAPIs as JSON through
/sap/bc/rest2rfc. Use it on supported ECC/S/4HANA On-Premise systems when no standard OData fits and configuration-driven exposure is preferable to per-interface wrappers. It requires an initial gateway deployment and is not for S/4HANA Cloud Public Edition. Readreferences/tech/rest2rfc-gateway.mdbefore giving setup, transaction, or security guidance.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

