Sap RFC
Sap RFC
What is RFC?
For business applications, it is necessary to communicate and exchange information (in predefined formats) with other systems. Hence, there are well defined mechanisms to enable this
communication. SAP has also provided us with such mechanism called RFC, which stands for
'Remote Function Call'.
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 in a different
machine from the caller program. RFCs can be used to call a different program in the same
machine as well, but usually it is used when 'calling' and 'called' function modules/ programs are
running on separate machines.
In SAP, RFC Interface system is used for setting-up RFC connections between different SAP
systems, and also between an SAP and an external (non-SAP) system.
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 SM37) 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.
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.
Call up certain routines which are necessary to start communication with remote system.
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 result is required immediately after the
execution of sRFC.
sRFC is a means of communication between systems where acknowledgements are required. The
resources of the Source System wait at 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
Asynchronous
It is communication between systems where acknowledgements are not required (it is similar to
post card 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 calling system.
The Source System resource does not wait for the target system as they deliver the message/data
without waiting for any acknowledgement. It is not reliable for communication since data may be
lost if the target system is not available. Used for
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
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
Type 3 - entries specify 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 data base as the current system.
These entries are pre-defined and cannot be modified. Example entry name: ws0015_K18_24
ws0015=host 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 Configure and Test RFC.
This tutorial is divided into 4 sections
1.
2.
3.
4.
Error Resolution
In the SM59 screen, you can navigate through already created RFCs connection with the help of
option tree, which is a menu based method to organize all the connections on the basis of
categories.
Connection Type here we choose one of the types (as explained previously) of RFC
connections as per requirements.
After you'SAVE'the connection, the system will take you to 'Technical Settings' tab, where we
provide the following information:
Target Host Here we provide the complete hostname or IP address of the target system.
System Number This is the system number of the target SAP system.
Click Save
Client In SAP we never logon to a system, there has to be a particular client always,
therefore we need to specify client number here for correct execution.
User ID and Password preferably not to be your own login ID, there should be some
generic ID so that the connection should not be affected by constantly changing end-user IDs
or passwords. Mostly, a user of type 'System' or 'Communication' is used here. Please note that
this is the User ID for the target system and not the source system where we are creating this
connection.
There is an option to make the RFC connection as 'Trusted'. Once selected, the calling (trusted)
system doesn't require a password to connect with target (trusting) system.
The RFC users must have the required authorizations in the trusting system (authorization
object S_RFCACL).Trusted connections are mostly used to connect SAP Solution
Manager Systems with other SAP systems (satellites)
Testing the RFC Connection
After the RFCs are created (or sometimes in case of already existing RFCs) we need to test,
whether the connection is established successfully or not.
As shown above we go to SM59 to choose the RFC connection to be tested and then we expand
drop down menu - "Utilities->Test->". We have three options:
Connection test -> This attempts to make a connection with remote system and hence
validates IP address / Hostname and other connection details. If both systems are not able to
connect, it throws an error. On success it displays the table with response times. This test is just
to check if the calling system is able to reach the remote system.
Authorization Test -> It is used to validate the User ID and Password (provided under 'logon
and security' tab for the target system) and also the authorizations that are provided. If test is
successful, then same screen will appear as shown above for the connection test.
Unicode Test -> It is to check if the Target system is a Unicode or not.
Remote Logon >This is also a kind of connection test, in which a new session of the target
system is opened, and we need to specify a login ID and Password (if not already mentioned
under 'Logon and Security' tab). If the user is of type 'Dialog' then a dialog session is created. To
justify the successful connection test, output will be the response times for the communication
packets, else error message will appear.