Documentation View

We are hiring and constantly growing! Have a look through our vacancies to find the right role for you!



rdisp/max_wprun_time - Maximum work process run time   BAL Application Log Documentation  
This documentation is copyright by SAP AG.
SAP E-Book

PERFORM, subr_identifier

Short Reference

... subr
  $| ${subr$|(sname) IN PROGRAM $[prog$|(pname)$] $[IF FOUND$]$}
  $| ${n OF subr1 subr2 ...$} ...


1. ... subr ...

2. ... subr$|(sname) IN PROGRAM $[prog$|(pname)$] $[IF FOUND$] ...

3. ... n OF subr1 subr2 ...


These names are used in the statement PERFORM to specify the called program and the ABAP program in which it is defined.


In addition to the alternatives shown here, there is another obsolete form of the external subroutine call.

Alternative 1

... subr ...


When specified directly, subr calls any subroutine of the current program using its name declared in the statement FORM. The subroutine must exist.


Call of a directly specified subroutine without parameters.

Alternative 2

... subr$|(sname) IN PROGRAM $[prog$|(pname)$]$[IF FOUND$]  ...




The specification is used to call any subroutine of the current program or of another program. The subroutine and the program can be specified as follows:

  • subr
Direct static specification as subr.
  • (sname)
Specification of the subroutine as the content of a character-like data object sname. The data object sname must contain the name of the subroutine in uppercase letters.
  • prog
Direct specification of the program as prog (static external subroutine call).
  • (pname)
Specification of the program as the content of a character-like data object pname (dynamic external subroutine call). The data object pname must contain the name of the program in uppercase letters. The following can be specified for pname:
  • Literal or constant

If the data object pname is specified as a character literal or as a constant, it can be evaluated statically, and the specified program is recognized as the used object.
  • Variable

If the data object pname is specified as a variable, it is specified only dynamically, and the content is not evaluated statically.
When the statement is executed, pname is not evaluated until runtime (in both cases).

Valid programs for external subroutine calls are executable programs, module pools, function pools, and subroutine pools. If an external subroutine is specified statically, the syntax check does not check whether the specified program and subroutine exist, and nor does it check the type of the program. If the addition IF FOUND is not specified, the extended program check reports any invalid or nonexistent programs or subroutines as errors. This also applies to names specified as constants or literals.

If the statically or dynamically specified subroutine or program does not exist at runtime and the addition IS FOUND is not specified, a catchable exception of the class CX_SY_DYN_CALL_ILLEGAL_FORM or CX_SY_PROGRAM_NOT_FOUND is raised.

If the specified program exists, it is loaded, if required, into the internal session, raising the event LOAD-OF-PROGRAM, and is searched for the specified subroutine.


  • 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 it is usually not possible to statically determine which program groups are assigned to the compilation unit.
  • If no further addition is specified except IN PROGRAM (no IF FOUND, no parameter list), the program name can be omitted and is added implicitly with the name of the current program.
  • Any subroutines defined in an include program cannot be called externally by specifying the include program, since it cannot be generated as a standalone program. This type of subroutine can only be called by specifying the name of the compilation unit if the include program is included in the unit. See Dynamic Calls.




If the addition IF FOUND is specified and the statically or dynamically specified subroutine or program does not exist at runtime, the catchable exception is prevented and the execution proceeds behind the statement PERFORM. Furthermore, the extended program check does not perform a check for the PERFORM statement.

If not already loaded, an existing program is loaded into the internal session independently from the addition IF FOUND.


With the addition IF FOUND, the statement PERFORM can trigger the execution of the event block LOAD-OF-PROGRAM even if no subroutine is performed.


Dynamic call of a subroutine of the same program without parameters.

Alternative 3

... n OF subr1 subr2 ...


If specified, this selects a subroutine subr of the current program from a list. The list subr1 subr2 ... can contain up to 256 directly specified subroutines. n expects 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.


This example calls n internal subroutines subr_1 through subr_n successively from a list.

ABAP Short Reference   PERFORM Short Reference  
This documentation is copyright by SAP AG.

Length: 8794 Date: 20230206 Time: 092547     sap01-206 ( 133 ms )