ml-connector
SAP ECCSAP Concur

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.

How SAP ECC works

SAP ECC is an on-premises system accessed via RFC/BAPI function modules through an on-premises agent (SAP .NET Connector or Java Connector), OData v2 via SAP Gateway, or SOAP web services. The agent runs on the customer network and makes RFC calls to SAP ECC on demand or on a scheduled interval. Key entities include vendors, customers, GL accounts, cost centers, employees, and accounting documents. Write operations via BAPI require explicit BAPI_TRANSACTION_COMMIT to post data; forgetting the commit leaves documents in a locked state. The RFC_READ_TABLE function has a 512-character row width limit, and OData services must be manually activated by the SAP Basis team and are not active by default.

How SAP Concur works

SAP Concur is a cloud REST API platform with multi-datacenter endpoints in the US, EMEA, and China regions. Authentication uses OAuth 2.0 with a password grant flow and a 24-hour bootstrap token from the Concur App Center, giving a 1-hour access token and a 6-month refresh token. The system exposes expense reports, invoices, purchase orders, vendors, and financial integration documents through a mix of v3.0 and v4 endpoints. Concur also supports webhooks via Event Subscription Service (ESS) for at-least-once delivery on key topics like expense reports and invoices, with automatic retry on 5xx, 401, 403, 429, or network errors. The Vendor API (v3.0) was deprecated in 2023.

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

Connect SAP ECC and SAP Concur

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started