Skip to content

ABAP Keyword Documentation →  ABAP - Reference →  Calling and leaving program units →  Calling Processing Blocks →  Calling Procedures →  Method Calls →  Static Method Calls 

meth( ... ) - Functional Method Call

Other versions: 7.31 | 7.40 | 7.54

Syntax


... { static_meth( ) 
    | static_meth( a )
    | static_meth( p1 = a1 p2 = a2 ... )
| static_meth( [EXPORTING  p1 = a1 p2 = a2 ...]
                   [IMPORTING  p1 = a1 p2 = a2 ...]
                   [CHANGING   p1 = a1 p2 = a2 ...] ) } ...

Effect

Functional call of a functional method static_meth in a suitable reader position for functions and expressions. The return value of the method declared using RETURNING is used as an operand and its full typing determines the data type of the operand. The actual parameters bound to output parameters and input/output parameters are handled in the same way as in standalone method calls.

The semantics of the syntax used to pass parameters is the same as in standalone method calls. The following differences from standalone method calls exist:

  • The return value in functional method calls cannot be assigned to an actual parameter explicitly using RECEIVING.
  • Inline declarations are not possible for actual parameters.
  • Non-class-based exceptions cannot be handled using EXCEPTIONS.

If the return value method has a structured data type, a functional method call can, like a structure, be specified in front of the structure component selector - to access a component of the structure.

If the functional method has the same name as a predefined function, the functional method is always called.


Notes

  • In functional method calls, class-based exceptions propagated from the method can be handled as usual in a TRY control structure or propagated further. The non-class-based exceptions of a functional method, however, always produce a runtime error.
  • The same applies to resumable exceptions in functional method calls as in all other methods. If processing can be resumed successfully, execution of the statement called in the method can be completed.
  • Method chaining is possible in the operand positions where functional methods can be specified.
  • A functional method call whose first method is an instance method can be introduced using the instance operator NEW or the casting operator CAST.
  • A single functional method call can be used as a predicative method call and as a relational expression.
  • Functional method calls can be nested in any way, which means that inline declarations for actual parameters can produce confusing results. For this reason, inline declarations are not allowed.
  • If successful, each method call sets the system field sy-subrc to 0, which means that all statements with functional method calls modify the value of this field.


Example

Functional call of a method. Unlike in the example for standalone method calls, the return value is assigned to the result. The inline declarations made in that example, however, are not possible here.

CLASS c1 DEFINITION. 
  PUBLIC SECTION. 
    CLASS-METHODS do_something IMPORTING p1 TYPE i 
                                        p2 TYPE i 
                              EXPORTING p3 TYPE i 
                                       p4 TYPE i 
                              RETURNING VALUE(r) TYPE i. 
ENDCLASS. 

CLASS c1 IMPLEMENTATION. 
  METHOD do_something. 
    ... 
  ENDMETHOD. 
ENDCLASS. 

DATA: a1 TYPE i, 
      a2 TYPE i. 

START-OF-SELECTION. 
  DATA(result) = 
    c1=>do_something( EXPORTING p1 = 333 
                               p2 = 444 
                     IMPORTING p3 = a1 
                                p4 = a2 ). 

Example

The functional method factorial in this example has the return value fact of type i, used on the right side of an assignment in an expression.

CLASS math DEFINITION. 
  PUBLIC SECTION. 
    METHODS factorial 
       IMPORTING n TYPE i 
       RETURNING value(fact) TYPE i. 
ENDCLASS. 

CLASS math IMPLEMENTATION. 
  METHOD factorial. 
    fact = COND #( WHEN n =  0 
                     THEN 0 
                   ELSE 
                     REDUCE #( 
                       INIT f = 1 
                       FOR  i = 1 UNTIL i > n 
                       NEXT f = f * i ) ). 
  ENDMETHOD. 
ENDCLASS. 

START-OF-SELECTION. 

  DATA(result) = 100 + NEW math( )->factorial( 4 ). 

Example

The functional method get in this example has a structured return value whose component carrname is accessed.

CLASS carriers DEFINITION. 
  PUBLIC SECTION. 
    METHODS get 
      IMPORTING carrid   TYPE scarr-carrid 
      RETURNING VALUE(r) TYPE scarr. 
ENDCLASS. 

CLASS carriers IMPLEMENTATION. 
  METHOD get. 
    SELECT SINGLE * 
           FROM scarr 
           WHERE carrid = @carrid 
           INTO @r. 
  ENDMETHOD. 
ENDCLASS. 

START-OF-SELECTION. 

  cl_demo_output=>display( NEW carriers( )->get( 'LH' )-carrname ).