SAP CMIS Setup
FileRelay as a CMIS 1.1 client against SAP Document Management Service. Works on S/4HANA Cloud Public — no ABAP.
SAP CMIS Setup
CMIS is an OASIS standard for document repositories. SAP exposes Document Management Service (DMS) via a CMIS 1.1 endpoint. FileRelay polls or subscribes, fetches new documents, and routes them.
Use CMIS when you're on S/4HANA Cloud Public Edition (no other option) or on Private Edition / RISE and prefer pull over ArchiveLink push. See the protocol comparison for the full matrix.
SAP-side prerequisites
Four things from your Basis / BTP admin:
| Item | Where it comes from |
|---|---|
| CMIS base URL | DMS service key → endpoints.dms_url |
| Repository ID | List at {base-url}/browser — pick the one holding the documents you want |
| OAuth client ID + secret | Service key → uaa.clientid / uaa.clientsecret |
| OAuth token URL | Service key → uaa.url + /oauth/token |
The service key is generated when an admin creates a service instance of sdm in BTP cockpit (plan name varies — standard, integration).
If your tenant uses Communication Arrangements instead (typical for integrated S/4HANA Cloud):
- SAP Fiori → Communication Arrangements → create one with template
SAP_COM_0552(Document Management Service Integration). - Bind a Communication User + System as inbound.
- Note the Service Endpoint URL (= CMIS base URL) and the OAuth credentials.
Configure the source
- Repositories → Add Source → CMIS.
- Fill in: name, CMIS base URL, Repository ID, OAuth client ID / secret / token URL.
- Test connection — FileRelay mints a token, queries the CMIS service document, validates.
- Save.
Credentials are encrypted at rest. See the Security page for the deeper architecture.
How fetching works
Polling (default, 60 s)
CMIS query for documents created or modified since the last poll:
SELECT * FROM cmis:document
WHERE cmis:lastModificationDate > TIMESTAMP '<last-poll-time>'
For each result, FileRelay fetches the binary via cmis:contentStream and forwards.
Polling works on every tenant. Right for moderate volume + few-seconds latency tolerance.
Webhook / Event Mesh
If your tenant has SAP Event Mesh connected to DMS, FileRelay can subscribe to sap.dms.DocumentCreated + sap.dms.DocumentVersionCreated events. The endpoint is https://<your-deployment-host>/cmis/<source-slug>/events. Triggers immediate fetches — no polling lag.
If you're not sure whether Event Mesh is wired up, stay on polling.
Authentication + rotation
UAA tokens are ~12 h. FileRelay refreshes automatically with the configured credentials.
- OAuth secret rotation — paste the new value; next token request uses it.
- Service key regeneration — plan rotation before the old key expires; the source starts failing the moment the old key is invalidated.
Forwarded metadata
| CMIS property | Forwarded as |
|---|---|
cmis:name |
filename |
cmis:objectId |
source document ID (traceability) |
cmis:createdBy |
author |
cmis:creationDate |
source creation timestamp |
cmis:contentStreamMimeType |
MIME type |
Custom (sap:businessObjectKey, etc.) |
passed through verbatim, mapped to destination custom fields where supported |
Per-connection mapping in Document Routing.
Gotchas
- Browser binding (JSON) over AtomPub (XML) — FileRelay defaults to browser binding (
/browser). Faster, simpler to debug, supported on every SAP DMS release. - Repository ID ≠ BTP service instance name — get the repository ID from a CMIS-level
GET {base}/browser, not from the BTP UI. - Pagination — handled internally, but a poll interval shorter than the time to drain peak load causes lag accumulation. Tune to your peak document creation rate.
- Permissions — the principal needs
DocumentDownload+DocumentReadscopes. Without themgetContentStreamreturns 403 with no useful body. - No delete propagation by default — when documents are deleted in DMS, FileRelay does not delete them from destinations. Once a document is routed, you own its lifecycle. Contact us if you need propagation.
Troubleshooting
| Symptom | Likely cause |
|---|---|
401 from token URL |
Wrong client ID/secret, or Communication User isn't bound as inbound |
404 on the service document |
CMIS base URL wrong (missing /browser?) or DMS isn't provisioned on the tenant |
| Polling works, nothing picked up | Repository empty, or the OAuth principal lacks read on documents |
| Polling falls behind | Poll interval too long, or upstream rate-limited — switch to Event Mesh if available |
Raw CMIS request/response captures: Request Viewer.
Next steps
- OData Setup — alternative pull-based source
- Protocol Comparison
- Connections Overview