ARFCSDATA table — ARFCSDATA - transactional RFC payload storage
ARFCSDATA holds the serialized call data for a queued transactional RFC (tRFC), identified by a transaction ID (TID) that links back to the status table ARFCSSTATE. Each row is a data segment of one queued LUW awaiting delivery to a target system; large calls are split across several rows sharing the same TID.
This page covers what ARFCSDATA actually stores inside the tRFC delivery mechanism, how to join it to the status table to reconstruct a stuck call, and the pitfalls of treating it as a monitoring table on its own. It also covers who should touch this table when a queued call is stuck.
Published 15 Sept 2026· 1,030 words
What it stores
One row in ARFCSDATA represents a segment of the serialized function call data belonging to a single queued transactional RFC (tRFC), identified by a transaction ID (TID). When an application issues an asynchronous RFC call with commit control (a tRFC), the kernel serializes the function module name and its parameters and writes that payload here so the call can survive a restart and be replayed if the first delivery attempt fails. A small call fits in one row; a large call (a big IDoc packet, a bulk interface call, a mass update) is split into several rows that share the same TID and are reassembled in sequence when the call is finally executed against the target system. The table is purely plumbing for the RFC queue mechanism, not business data, and its rows disappear once the LUW is confirmed as executed.
Key fields
- MANDT - client the queued call belongs to
- TID - transaction ID uniquely identifying the queued tRFC call, matches ARFCSSTATE-TID
- segment sequence field - orders the multiple rows when one call's serialized data exceeds a single row's capacity
- payload field - the serialized function module call (name plus parameters) as raw or character data, reassembled in TID order before execution
How it joins the data model
- ARFCSDATA-TID = ARFCSSTATE-TID (every data segment belongs to exactly one queued call header, which carries the destination, status and retry count)
- ARFCSDATA-TID = TRFCQOUT-TID (when the call is managed through the outbound qRFC queue rather than plain tRFC, the queue entry and the payload share the TID)
- ARFCSDATA-TID = TRFCQIN-TID (inbound qRFC side, same principle for calls arriving at this system)
- no direct field-level join to EDIDC or EDIDD exists, but an outbound IDoc dispatched via tRFC will have its packet sitting as one or more ARFCSDATA rows under a TID until the receiving system confirms it
How to read it safely
Always restrict on MANDT first, then on TID; there is no useful secondary index for browsing this table by content because the payload field is a raw/long text blob, not searchable business data. Never select against ARFCSDATA without a TID already in hand from ARFCSSTATE - a full scan on a busy system can be enormous and the rows are meaningless without their header. The normal path is to find the problem TID through the tRFC monitor first, then, only if the standard tools do not give enough detail, look up the raw segments for that specific TID.
How to prove it in the data
Symptom: a call has been sitting in the tRFC monitor for hours with status 'to be executed' or 'transmission error'. Take the TID shown there, select ARFCSSTATE where MANDT = client and TID = that value to confirm the destination and retry count, then select ARFCSDATA on the same TID. If rows exist and reassemble to a plausible payload, the call is genuinely still queued and waiting on the target system or destination. If ARFCSDATA returns no rows for a TID that still exists in ARFCSSTATE, the payload has been lost or purged and the entry is orphaned - it cannot be replayed.
ECC vs S/4HANA
ARFCSDATA is Basis-level kernel infrastructure, not application data, and it is unchanged in shape on S/4HANA. It was never a candidate for CDS compatibility views because there is no business consumption of it; it exists purely to support the tRFC delivery guarantee. The same cleanup and monitoring mechanisms that applied on ECC still apply.
Common pitfalls
- Reading ARFCSDATA in isolation and concluding a call failed or succeeded - status lives entirely in ARFCSSTATE, ARFCSDATA only holds the bytes; a row existing here says nothing about whether the call has been delivered.
- Deleting rows directly with a table maintenance tool instead of cancelling or executing the call through the tRFC monitor - this leaves ARFCSSTATE pointing to a payload that no longer exists, or leaves a partial payload if only some of a multi-row segment set is removed.
- Forgetting that one logical call can span several rows under the same TID - deleting or copying only one row corrupts the reassembled payload while the queue entry still looks intact.
- Assuming a large ARFCSDATA table means a stuck interface - it is more often a busy but healthy system where confirmed entries have not yet been cleaned up by the scheduled cleanup job, or a destination that is genuinely down and piling up retries.
- Confusing tRFC payload storage (ARFCSSTATE/ARFCSDATA) with qRFC queue tables (TRFCQIN/TRFCQOUT) - they cooperate but are not interchangeable, and troubleshooting steps for one do not automatically apply to the other.
- Running ad hoc mass deletes against old entries without checking status first - genuinely pending calls with a recoverable destination look identical in age to calls that were already confirmed and simply awaiting the cleanup job, and deleting the wrong set causes silent data loss.
Whose problem this is
Basis or the interface/integration team owns this table, its growth, and any cleanup job that runs against it. Functional consultants may need to check it while chasing a stuck IDoc or a failed interface call, but should raise the TID to Basis rather than deleting or editing rows directly, since the delivery guarantee depends on ARFCSSTATE and ARFCSDATA staying consistent with each other.
Related SAP objects
Reviewed pages this object connects to in the ERPClimb knowledge graph.
Source: ERPClimb — https://erpclimb.com/sap-tables/arfcsdataERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.