ABAP Keyword Documentation → ABAP - Reference → Data Interfaces and Communication Interfaces → RFC - Remote Function Call → CALL FUNCTION - RFC → CALL FUNCTION - DESTINATION
CALL FUNCTION - DESTINATION parameter_list
Other versions: 7.31 | 7.40 | 7.54
Syntax
... [EXPORTING p1 = a1 p2 = a2 ...]
[IMPORTING p1 = a1 p2 = a2 ...]
[TABLES t1 = itab1 t2 = itab2 ...]
[CHANGING p1 = a1 p2 = a2 ...]
[EXCEPTIONS [exc1 = n1 exc2 = n2 ...]
[system_failure = ns [MESSAGE smess]]
[communication_failure = nc [MESSAGE cmess]]
[OTHERS = n_others]].
Extras
1. EXPORTING p1 = a1 p2 = a2 ...
2. IMPORTING p1 = a1 p2 = a2 ...
3. TABLES t1 = itab1 t2 = itab2 ...
4. CHANGING p1 = a1 p2 = a2 ...
5. EXCEPTIONS exc1 = n1 exc2 = n2 ...
Effect
These additions are used to assign actual parameters to the formal parameters of the remotely called function module, and return values to exceptions that are not class-based. These additions have the same basic meaning as they do in general function module calls.
In the case of RFC, however, the following differences to general function module calls apply:
- Bindings of actual parameters to incorrectly specified formal parameters are ignored.
- Typings are not checked. If possible, the content of an actual parameter is cast to the type of the formal parameter in function modules called remotely.
-
Each formal parameter is handled implicitly like an optional parameter. Every input parameter or input/output
parameter not assigned an actual parameter is given either its type-compliant initial value or a default value specified explicitly in the definition.
Some other differences for specific additions are described in the following.
Notes
- If a remote-enabled function module is not called using the RFC, pass by parameter works like a general function module call and the corresponding exceptions are raised in if formal parameters are incorrect and actual parameters are unsuitable.
-
If possible, the extended
program check checks the pass by parameter and reports any formal parameters and unsuitable actual parameters as errors.
Addition 1
EXPORTING p1 = a1 p2 = a2 ...
Addition 2
IMPORTING p1 = a1 p2 = a2 ...
Effect
The following differences apply to the additions EXPORTING
and IMPORTING
:
- In character-like formal parameters, the actual parameter can have a length different from the formal parameter. In the called function module, a shorter actual parameter is padded with blanks on the right in the input and truncated in the output. If the actual parameter is longer, the reverse applies.
- Reference variables cannot be passed directly or as components of deep structures. As in general function module calls, however, it is not possible to pass tables with deep row types, structures, and strings.
-
When passing internal tables with non-unique table keys, the order of the duplicate rows in relation to these keys is not retained.
Addition 3
TABLES t1 = itab1 t2 = itab2 ...
Effect
When using TABLES
to pass data to
table parameters, the difference is that only tables with
flat row types and no
secondary table key can be passed, and that an existing
header line is not passed.
Notes
-
As long as basXML is not configured as the
RFC protocol, the classic binary RFC protocol is used
implicitly for
TABLES
parameters, and not the XML format xRFC, which is otherwise used for deep types. Passing internal tables using theTABLES
parameters can therefore be considerably faster in this case (depending on the data passed) than with other parameters. -
basXML is now used as a unified
format for all types of RFC communication. The binary RFC protocol currently still has better performance
than basXML, but this will change in the future. The
TABLES
addition is therefore only required for RFMs for which performance is currently critical.
Addition 4
CHANGING p1 = a1 p2 = a2 ...
Effect
With respect to the addition CHANGING
, the same differences apply as to the additions EXPORTING
and IMPORTING
.
Addition 5
EXCEPTIONS exc1 = n1 exc2 = n2 ...
Effect
The addition EXCEPTIONS
is used to perform classic
non-class-based exception handling, which works in essentially the same way as general function module calls. In addition, however, the
special exceptions SYSTEM_FAILURE and COMMUNICATION_FAILURE
can be specified to handle the exceptions raised by the RFC interface itself. An optional MESSAGE
addition can also be specified after these exceptions. If one of the special classic exceptions system_failure
or communication_failure
is raised, the first line of the associated
short dump is inserted in
the smess
or cmess
field. This field which must
be a flat character-like field. If a remotely called function module raises a class-based exception
during non-class-based exception handling, this exception is not transported and raises the predefined classic exception SYSTEM_FAILURE instead
Notes
-
Specifying
error_message
afterEXCEPTIONS
has no effect in the RFC. -
If the classic exception SYSTEM_FAILURE is raised when a
message of type "A", "E", or "X" is sent, the
smess field contains the message short text when
MESSAGE
is specified. -
Class-based exception handling in RFCs is not possible in this release track.
Example
More information: Exception Handling in RFC.