Remote Function Call (RFC) in SAP Tutorial

What is RFC?

RFC is a mechanism that allows business applications to communicate and exchange information (in pre-defined formats) with other systems. RFC stands for ‘Remote Function Call’

RFC consists of two interfaces:

  1. A calling interface for ABAP Programs
  2. A calling interface for Non-SAP programs.

Any ABAP program can call a remote function using the CALL FUNCTION…DESTINATION statement. The DESTINATION parameter tells the SAP System that the called function runs in a system other than the callers.

Syntax-

CALL FUNCTION 'remotefunction'

DESTINATION dest

EXPORTING f1 =

IMPORTING f2 =

TABLES t1 =

EXCEPTIONS

Logical Destinations are defined via transaction SM59 and stored in Table RFCDES

Functions of the RFC interface

  • Converting all parameter data to the representation needed in the remote system
  • Calling the communication routines needed to talk to the remote system.
  • Handling communications errors, and notifying the caller, if desired ( using EXCEPTIONS parameter of the CALL FUNCTION).

Functions of the RFC Interface

RFC is a SAP protocol to handle communications between systems to simplify the related programming. It is the process of calling a function module which is residing on a different machine from the caller program. RFCs can be used to call a different program on the same machine as well, but usually, it is used when ‘calling’ and ‘called’ function modules/ programs are running on separate machines.

Functions of the RFC Interface

In SAP, RFC Interface system is used for setting-up RFC connections between different SAP systems, and also between a SAP and an external (non-SAP) system.

Must Know Details About RFC

  • SAP Uses CPIC (Common Programming Interface for Communication) Protocol to transfer data between Systems. It is SAP Specific protocol. Remote Function Call (RFC) is a communications interface based on CPI-C, but with more functions and easier for application programmers to use
  • The RFC library functions support the C programming language and Visual Basic (on Windows platforms)
  • RFC connections can always be used across the entire system. This means that an RFC connection you have defined in client 000 can also be used from client 100 (without any difference).
  • RFC is the protocol for calling special subroutines (function modules) over the network. Function modules are comparable with C functions or PASCAL procedures. They have a defined interface through which data, tables and return codes can be exchanged. Function modules are managed in the R/3 System in their own function library, called the Function Builder.
  • The Function Builder (transaction SE37) provides application programmers with a useful environment for programming, documenting and Testing function modules that can be called locally as well as remotely. The R/3 System automatically generates the additional code (RFC stub) needed for remote calls.
  • You maintain the parameters for RFC connections using transaction SM59. The R/3 System is also delivered with an RFC-SDK (Software Development Kit) that uses extensive C libraries to allow external programs to be connected to the R/3 System.
  • The only difference between a remote call of a function module to another server and a local call is a special parameter (destination) that specifies the target server on which the program is to be executed.

The RFC Advantages

RFC helps to reduce the efforts of programmers, by letting them avoid the re-development of modules and methods at remote systems. It is capable enough to:

  • Convert the data into the format understandable by the remote (target) system.
  • Convert the data into the format understandable by the remote (target) system.
  • Call up certain routines which are necessary to start communication with the remote system.
  • Handle errors that might occur in the process of communication.

Types of RFC

Types of RFC

Synchronous

Requires both the systems (client and server) to be available at the time of communication or data transfer. It is the most common type and is required when the result is required immediately after the execution of sRFC.

sRFC is a means of communication between systems where acknowledgments are required. The resources of the Source System wait on the target system and ensure that they deliver the message/data with ACKD. The Data is consistent and reliable for communication.

The issue is if the target system is not available, the source system resources wait until target system is available. This may lead to the Processes of source system to go into Sleep/RFC/CPIC Mode at target systems and hence blocks these resources.

Used for

  • For communication between systems
  • For communication between SAP Web Application Server to SAP GUI

Asynchronous

It is communication between systems where acknowledgments are not required (it is similar to postcard delivery).It doesn’t require both the systems to be available at the time of execution and the result is not immediately required to be sent back to the calling system.

The Source System resource does not wait for the target system as they deliver the message/data without waiting for any acknowledgment. It is not reliable for communication since data may be lost if the target system is not available. Used for –

  • For communication between systems
  • For parallel processing

Transactional

It is a special form of aRFC. Transactional RFC ensures transaction-like handling of processing steps that were originally autonomous.

Transactional RFC is an asynchronous communication method that executes the called function module in the RFC server only once, even if the data is sent multiple times due to some network issue. The remote system need not be available at the time when the RFC client program is executing a tRFC. The tRFC component stores the called RFC function, together with the corresponding data, in the SAP database under a unique transaction ID (TID). tRFC is similar to aRFC as it does not wait at the target system (Similar to a registered post). If the system is not available, it will write the Data into aRFC Tables with a transaction ID (SM58) which is picked by the scheduler RSARFCSE (which runs for every 60 seconds). Used For-

  • Extension of Asynchronous RFC
  • For secure communication between systems

Queued

Queued RFC is an extension of tRFC. It also ensures that individual steps are processed in sequence. To guarantee that multiple LUWs (Logical Unit of Work/ Transaction) are processed in the order specified by the application. tRFC can be serialized using queues (inbound and outbound queues). Hence the name queued RFC (qRFC). Used For-

  • Extension of the Transactional RFC
  • For a defined processing sequence
  • Implementation of qRFC is recommended if you want to guarantee that several transactions are processed in a predefined order.

Types of RFC Connections

Types of RFC Connections

Type 3 – entries specify the connection between ABAP systems. Here, we must specify the host name / IP address. You can, however, specify logon information if desired. This is applicable for both type of RFCs, between ABAP systems and external calls to ABAP systems

Type I – entries specify ABAP systems connected to the same database as the current system. These entries are pre-defined and cannot be modified. Example entry name: ws0015_K18_24

  • ws0015=host name
  • K18=system name (database name)
  • 24=TCP-service name

Type T – destinations are connections to external programs that use the RFC API to receive RFCs. The activation type can be either Start or Registration. If it is Start, you must specify the host name and the pathname of the program to be started.

How to Code an RFC?

1) In the function module attributes tab (transaction code SE37), set the processing type as Remote-enabled module to create a remote function module.

How to Code an RFC

2) Write the code for the function module.

How to Code an RFC

3) Define the destination of the RFC server in the RFC client system that calls the remote function ( via SM59 transaction).

How to Code an RFC

4) Declaring Parameters: All parameter fields for a remote function module must be defined as reference fields, that is, like ABAP Dictionary fields.

5) Exceptions: The system raises COMMUNICATION_FAILURE and SYSTEM_FAILURE internally. You can raise exceptions in a remote function just as you would in a locally called function.

Debugging Remote Function Calls

  • It is not possible to debug a remote function call to another system.
  • However, when testing ABAP-to-ABAP RFC calls, you can use the ABAP debugger to monitor the execution of the RFC function in the remote system.
  • With remote calls, the ABAP debugger (including the debugging interface) runs on the local system. Data values and other run information for the remote function are passed in from the remote system.