ABAP Keyword Documentation → ABAP - Reference → Calling and leaving program units → Calling Processing Blocks → Calling Procedures → PERFORM → PERFORM - general
PERFORM - subr_identifier
Other versions: 7.31 | 7.40 | 7.54
Syntax
... subr
| {subr|(sname) IN PROGRAM [prog|(pname)] [IF FOUND]}
| {n OF subr1 subr2 ...} ...
Alternatives
2. ... subr|(sname) IN PROGRAM [prog|(pname)] [IF FOUND] ...
3. ... n OF subr1 subr2 ...
Effect
These names are used to specify subroutines, where subr
is the name of the
subroutine declared in the statement FORM
,
and prog
is the name of an ABAP program. sname
and pname
are character-like fields that contain the name of a subroutine or a program when a statement is executed.
Note
As well as the alternatives shown here, there is another obsolete form of the external subroutine call.
Alternative 1
... subr ...
Effect
subr
can be used to call any subroutine of the current program. The subroutine must exist.
Alternative 2
... subr|(sname) IN PROGRAM [prog|(pname)] [IF FOUND] ...
Effect
This specification is used to call any subroutine of another program or the current program. The subroutine
and the program can either be specified statically as subr
and prog
(static external subroutine call), or dynamically in the parenthesized character-like fields sname
and pname
. When the statement is executed, sname
and pname
must contain the name of a subroutine or program in uppercase (dynamic external subroutine call).
-
If an external subroutine is statically specified, the syntax check does not check whether the specified program and subroutine exist. Only the
extended program
check registers any nonexistent programs or subroutines as errors by default. If the addition
IF FOUND
is specified, the extended program check also skips the check. -
If the statically or dynamically specified subroutine or program does not exist at runtime, a handleable
exception of the class CX_SY_DYN_CALL_ILLEGAL_FORM or CX_SY_PROGRAM_NOT_FOUND is raised by default.
If the addition
IF FOUND
is specified, the statementPERFORM
is skipped.
If the specified program exists, it is loaded, if required, into the
internal session and
scanned for the specified subroutine. The event LOAD-OF-PROGRAM
is not triggered.
If the subroutine is available, the event LOAD-OF-PROGRAM
is triggered (if not already triggered) and then the subroutine is executed.
Notes
- External calls of subroutines are almost completely obsolete. Instead of subroutines, methods and function modules can be used as explicit functional interfaces of a program.
- Furthermore, external calls of subroutines are critical, since there is usually no static way of determining which program groups are assigned to the master program.
-
If no further addition is specified apart from
IN PROGRAM
(noIF FOUND
, no parameter list), the program name can be omitted and is added implicitly with the name of the current program.
Security Note
If the name of a program unit is specified dynamically when it is called, and this name is passed to a program from outside, the result is a serious security risk. Any names passed to a program from outside must be checked thoroughly before being used in calls. The system class CL_ABAP_DYN_PRG, for example, can be used to do this. See Dynamic Calls.
Alternative 3
... n OF subr1 subr2 ...
Effect
This specification selects a subroutine subr
of the current program from
a list. The list subr1 subr2 ...
can contain up to 256 directly specified
subroutines. n
must be a numeric data object containing a number between
1 and the specified number of subroutines when the statement is executed. The subroutine subr
is called, whose list position is in n
. In this variant, it is not possible
to specify parameter_list
and only subroutines without a parameter interface can be called.
Example
This example calls n
internal subroutines subr_1
through subr_n
successively from a list.
DATA n TYPE i.
...
DO n TIMES.
PERFORM sy-index OF subr_1 subr_2 ... .
ENDDO.
FORM subr_1.
...
ENDFORM.
FORM subr_2.
...
ENDFORM.
...