Transactional RFC (tRFC) is the asynchronous, guaranteed-delivery RFC mechanism used by SAP NetWeaver to exchange IDocs and function calls between systems (transaction SM58). This monitor supervises the open tRFC entries of an ABAP system, in both directions, and raises alarms when entries fail or stay in process for too long.
You can detect and alert on:
CPICERR/CONFAIL, SYSFAIL, SYSLOAD, RETRY/ARETRY/ANORETRY)Each surveillance row targets a subset of entries using filters on direction, destination, function/program, user and state.
The monitor reads the tRFC state tables through RFC_READ_TABLE:
| Direction | SAP table | Content |
|---|---|---|
OUTBOUND | ARFCSSTATE | tRFC calls sent by the monitored system to a destination. |
INBOUND | ARFCRSTATE | tRFC calls received by the monitored system. |
Only open entries are read (ARFCRETURN is empty). The following fields are collected:
| Field | Description |
|---|---|
ARFCDEST | RFC destination of the call. Used by the Destination filter. |
ARFCSTATE | Current state of the entry (SYSFAIL, CPICERR, RECORDED, …). Used by the status filter. |
ARFCFNAM | Function module or program name. Used by the Program name filter. |
ARFCUSER | User who created the entry. Used by the User filter. |
ARFCDATUM + ARFCUZEIT | Date and time of the entry, converted using the time zone of the SAP system. Used for the time window and the age evaluation. |
ARFCMSG | Error message of the entry. Included in per-entry alarms. |
The connector user needs the authorization to call RFC_READ_TABLE on both tables.
The status filter accepts the following values:
| status | Matches |
|---|---|
ANY | Every entry, whatever its state. |
IN_ERROR | Entries in any error state: CPICERR/CONFAIL, SYSFAIL, SYSLOAD, RETRY/ARETRY/ANORETRY. Unknown states are also treated as errors. |
IN_PROCESS | Entries that are not in an error state: RECORDED/VBRECORD, SENDED, HOLDEXE, HOLDDEL, EXECUTED, FINISHED, CONFIRMD, WCONFIRM. |
CPICERR/CONFAIL | Communication error or connection failure with the destination. |
SYSFAIL | Error raised in the target system. |
SYSLOAD | No resources available in the target system. |
RETRY/ARETRY/ANORETRY | Entry waiting for an automatic retry, or for which retries are exhausted. |
RECORDED/VBRECORD | Entry recorded but not executed yet. |
SENDED | Entry sent, waiting for confirmation. |
At each execution the monitor computes, per direction, a collection start date:
The collection start date drives the query sent to SAP:
ARFCDATUM is within the last [period + 24h] of the collection start date are read. The collection depth is therefore the Period (or the previous execution), extended by 24h in the SAP system time zone.Every entry returned by SAP is kept for evaluation. Entries older than the row window are never counted for Max Entries, but they are evaluated by the Max entry age check.
Rows are evaluated in the order of the surveillance table. For each active row:
now - Period, extended back to the previous successful execution when that is earlier. With Period = 0 the window starts at the previous successful execution.count is the number of matching entries whose timestamp is inside the row window.old count is the number of matching collected entries whose age exceeds Max entry age, inside or outside the row window.Disabled, the matching entries are removed from the list and the row raises nothing: the row acts as an exclusion filter for the following rows.* (all), a case-insensitive substring (PRD matches PRD_CLNT100), ! for negation (!TEST), a comma for OR (PRD,QAS) and + for AND (PRD+CLNT100).0.d/day/days, h/hour/hours, m/min/minute/minutes. Units can be combined (1h 30m). Without unit the value is read as hours (6 means 6 hours), which keeps existing configurations valid.Disabled or Exclusive) before the rows they must protect: rows are evaluated top to bottom.| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Send metrics | Boolean | Yes | true | Emits the TRFC_ENTRIES_COUNT metric for every collected entry (see Generated Metrics). |
| Use period for collection depth | Boolean | Yes | true | If enabled, the RFC_READ_TABLE query only returns open entries whose ARFCDATUM is on or after the day of the collection start date. If disabled, all open entries are read whatever their age, so that Max entry age can detect entries stuck for days or weeks without a large Period. Reading the full tables can be slow on systems with many open entries. |
| Field | Required | Default | Description |
|---|---|---|---|
| Active | Yes | true | Enables/disables this surveillance row. |
| Period | Yes | 0 | Time window, in minutes, in which entries are counted for Max entries. 0 means “since the previous successful execution” (60 minutes at most). The largest Period of a direction also defines the collection start date (see Collection window). |
| Direction | Yes | OUTBOUND | OUTBOUND (table ARFCSSTATE) or INBOUND (table ARFCRSTATE). |
| Destination | Yes | * | Filter on the RFC destination (ARFCDEST). |
| Program name | Yes | * | Filter on the function module or program name (ARFCFNAM). |
| User | Yes | * | Filter on the user who created the entry (ARFCUSER). |
| status | Yes | IN_ERROR | State of the entries to evaluate (see tRFC states). |
| Max entries | Yes | 0 | Number of matching entries in the window from which the aggregated alarm is raised (count >= Max entries). 0 disables this threshold. Ignored when Aggregates is disabled. |
| Severity (Max entries) | Yes | Major | Severity of the “entries count” alarm(s). Disabled turns the row into an exclusion filter: matching entries are removed and ignored by the following rows. |
| Aggregates | Yes | true | If enabled, one alarm per row carrying the number of entries. If disabled, one alarm per matching entry. |
| Max entry age (d/h/m) | Yes | 0 | Age threshold of the entries, as a number with an optional time unit (2h, 90m, 1d 12h). Without unit the value is in hours. Alarm when the age of an entry is greater than the threshold. Evaluated on every collected entry, inside or outside the row window. 0 disables this threshold. |
| Severity (Max entry age) | Yes | Major | Severity of the “entries older than” alarm(s). Clear or Disabled suppresses the per-entry age alarms. |
| Auto clear | Yes | true | Alarms generated by this row are clearable when the condition recovers. |
| Prefix | No | (empty) | Alarm tag and message prefix. %MSG% can be used to place the generated message inside a custom text (my_prefix %MSG% my_suffix). A value starting with ! sets the tag without altering the message. |
| Exclusive | No | false | If enabled, entries matched by this row are removed from the list and are not evaluated by the following rows. |
| Volatile | No | false | Applies to the aggregated entries count alarm when Period > 0: every execution generates a new alarm instead of updating the previous one. |
| Alarm | No | true | Enables/disables alarm generation for this row. |
| Report | No | false | If enabled, the entry count and severity of this row are shown in the daily report. |
For each active surveillance row with Alarm enabled:
0 and count >= Max entries. One alarm per row, with the severity of Max entries.0 and at least one matching entry is older than the threshold. One alarm per row carrying the number of aged entries, with the severity of Max entry age.0 and the severity of Max entry age is above Clear. Entries older than 7 days are not reported one by one: they are grouped into a single alarm per row giving their number, with the severity of Max entry age.TRFC_OUT_ENTRIES_COUNT or TRFC_IN_ENTRIES_COUNT metric depending on the row Direction.When Send metrics is enabled, the monitor emits one time series for all collected entries, independently of the surveillance rows:
| metricId | metricUnit | Tags | metricDescription |
|---|---|---|---|
TRFC_ENTRIES_COUNT | count | status, direction, destination | Number of open tRFC entries updated since the previous execution, aggregated on 5-minute slots per state, direction and destination. |
TRFC_IN_ENTRIES_COUNT and TRFC_OUT_ENTRIES_COUNT (formerly TRFC_IN_ENTRIES and TRFC_OUT_ENTRIES) are the metric identifiers carried by the alarms.
Alarm messages include the tRFC context, for example:
12 OUTBOUND TRFC entries with ERROR state (>=10) [Destination PRD_CLNT100] [Between 10:15 and 10:30 09/11/2026 CEST]3 INBOUND TRFC entries in process older than 2hOUTBOUND TRFC with SYSFAIL state : <error message> [Dest: PRD_CLNT100] [User:PIAPPLUSER] [Function/Prog: IDOC_INBOUND_ASYNCHRONOUS]OUTBOUND TRFC in process since 1 day 5 hours 3 min [<error message>] [Dest: PRD_CLNT100] [User:PIAPPLUSER] [Function/Prog: IDOC_INBOUND_ASYNCHRONOUS]5 OUTBOUND TRFC entries with ERROR state older than 7 days [Destination PRD_CLNT100]
The state wording depends on the row status: nothing for ANY, with ERROR state for IN_ERROR, in process for IN_PROCESS, and with <STATE> state for a specific state.
| Active | Period | Direction | Destination | Program name | User | status | Max entries | Severity | Aggregates | Max entry age (d/h/m) | Severity | Auto clear | Prefix | Exclusive | Volatile | Alarm | Report |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| true | 0 | OUTBOUND | SANDBOX | * | * | ANY | 0 | Disabled | true | 0 | Major | true | false | false | true | false | |
| true | 15 | OUTBOUND | * | * | * | IN_ERROR | 10 | Major | true | 0 | Major | true | false | false | true | false | |
| true | 1440 | INBOUND | * | * | * | IN_PROCESS | 0 | Major | true | 2h | Warning | true | false | false | true | true | |
| true | 0 | OUTBOUND | PRD_CLNT100 | * | * | SYSFAIL | 0 | Critical | false | 1d | Major | true | SAP-PI %MSG% | false | false | true | false |
Row 1 effect: exclusion row. OUTBOUND entries whose destination contains SANDBOX are removed and ignored by the following rows. No alarm is raised.
Row 2 effect: sends one MAJOR alarm when 10 or more OUTBOUND entries in an error state were updated during the last 15 minutes. The alarm is cleared automatically when the count drops below 10.
Row 3 effect: INBOUND entries from the last 24 hours are collected. Sends one WARNING alarm giving the number of INBOUND entries still in process for more than 2 hours. Max entries is 0, so no count alarm is raised. The row is also shown in the daily report. With Use period for collection depth disabled, the same row with Period 0 would check every open INBOUND entry, whatever its age.
Row 4 effect: sends one CRITICAL alarm per SYSFAIL OUTBOUND entry to destination PRD_CLNT100 updated since the previous execution, with the message prefixed by SAP-PI. Entries in SYSFAIL for more than one day raise one MAJOR alarm each; those older than 7 days are grouped into a single MAJOR alarm giving their number.