SAP ECC and SAP Concur integration
SAP ECC runs finance and operations on premises. SAP Concur runs travel and expense management in the cloud. Connecting them keeps employee expenses flowing into your general ledger without manual re-entry. Expense reports and invoices approved in Concur post into SAP ECC at the end of each expense cycle, allocated to the right cost centers and GL accounts. ml-connector bridges the on-premises RFC protocol and the cloud OAuth service, mapping Concur cost codes to ECC cost centers and handling the stateful posting process.
What moves between them
The main flow moves from SAP Concur into SAP ECC. Approved expense reports and invoices are read from Concur via REST API and cost center codes are mapped to SAP ECC GL accounts and cost centers. Each document is posted into ECC's general ledger via BAPI_ACC_DOCUMENT_POST, which creates accounting documents that hit the right GL accounts based on expense type and cost center. Reference data such as cost centers and GL account mappings are configured per customer to align ECC and Concur categorization. The posting is idempotent - if a retry occurs, ECC's REF_DOC_NO field is used to detect and skip duplicate documents.
How ml-connector handles it
ml-connector runs the on-premises RFC agent on the customer network and polls Concur on a schedule aligned with your expense cycle. For each approved expense report or invoice, it retrieves the document from Concur via REST and OAuth 2.0, maps the Concur cost code to the ECC cost center, and calls BAPI_ACC_DOCUMENT_POST with the GL account, cost center, amount, and date. The BAPI call requires an explicit BAPI_TRANSACTION_COMMIT in the same RFC session to post the document; without the commit, the document remains locked. ml-connector includes the Concur document ID in the REF_DOC_NO field so that retries on network failure can detect duplicates and skip already-posted documents. SAP ECC has no native rate limit, but ml-connector keeps concurrent RFC calls below the typical safe limit of 50 to avoid SYSTEM_FAILURE exceptions. Concur's geolocation (from the OAuth token response) is used for all subsequent API calls, not hardcoded, so ml-connector works across all Concur datacenters.
A real-world example
A mid-sized manufacturing company runs SAP ECC on premises for finance, procurement, and operations, and uses SAP Concur for employee travel and expense management. Before the integration, expense reports were approved in Concur, exported to CSV by the finance team, and re-entered into ECC's general ledger by hand - a tedious process that often introduced typos and took 2-3 days per expense cycle. With SAP ECC and SAP Concur connected, each approved expense report flows into ECC automatically on a weekly cycle, posted to the correct GL account and cost center, and the manual re-entry is gone. The finance team can now close the books faster and spend less time chasing discrepancies between the two systems.
What you can do
- Post approved expense reports from SAP Concur into SAP ECC's general ledger, allocated to the correct cost centers and GL accounts.
- Map Concur cost codes to ECC cost centers and GL accounts so expense data lands on the right dimensions.
- Authenticate to SAP ECC via on-premises RFC agent and HTTP Basic Auth, and to SAP Concur via OAuth 2.0 with geolocation awareness.
- Handle BAPI_ACC_DOCUMENT_POST with explicit transaction commit and REF_DOC_NO deduplication on retry, so expense posting is safe and idempotent.
- Sync on a scheduled expense cycle with RFC polling and Concur's OAuth token refresh, with a full audit trail on every document posted.
Questions
- How does ml-connector post data into SAP ECC when it runs in the cloud?
- ml-connector requires an on-premises RFC agent (SAP .NET Connector or Java Connector) running on the customer network. The agent and ml-connector communicate over a secure connection, and the agent makes RFC calls to SAP ECC's BAPI modules. This keeps ECC secure on premises while allowing cloud applications to read and write data.
- Does the expense posting to SAP ECC require a manual commit, or does ml-connector handle it automatically?
- ml-connector includes the BAPI_TRANSACTION_COMMIT call in the same RFC session as the document posting, so the expense is posted and committed automatically. If a call fails before commit, the document remains locked in ECC, and ml-connector uses the REF_DOC_NO field to detect the lock and skip re-posting on retry.
- How does ml-connector know which Concur datacenter to call?
- SAP Concur returns the geolocation (US, EMEA, or China) in the OAuth token response. ml-connector reads that geolocation and uses it for all subsequent API calls to Concur, so it works correctly regardless of which region the customer is in.
Related integrations
More SAP ECC integrations
Other systems that connect to SAP Concur
Connect SAP ECC and SAP Concur
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started