sapdev logo background
sapdev logo sapdev logo
Comments

SAP DECLARATION INLINE GUIDL documentation, setup help and example usage



Return to SAP documentation index


GUIDELINE 6.3a

Inline Declarations

ABAP_BACKGROUND
The declaration operators
  • DATA(var)

  • FIELD-SYMBOLS fs .

  • can be used to make inline declarations in writer positions . In this way, declarations are made in operational statements rather than in declaration statements . The declaration is made when the program is compiled, regardless of whether the statement is actually executed.

    ABAP_RULE
    Only use inline declarations locally
    Only make inline declarations in processing blocks that support local data . Use them as if they were local declarations in the current statement block.

    ABAP_DETAILS
    If used correctly, inline declarations are an excellent way of making programs leaner and easier to understand. However, since they they are used with a directly prefixed declaration statement (like the short forms of the statement where they are specified), the guidelines for declaration statements must be followed.
  • The rule dictating that no global program variables and field symbols are to be declared also applies to inline declarations, without restrictions. For this reason, statements with inline declarations should only be specified in processing blocks with local data, namely procedures and preferably methods. If not, the variables and field symbols declared inline would be global in the program, with all the drawbacks listed in the description of the rule.

  • Inline declarations are an exception to the rule that local declarations should only be made at the start of a procedure. They cannot be specified in operational statements, which means that, unlike declaration statements, they cannot be specified at the start of the procedure. Despite this, the restrictions stated in the rule for local declarations are still valid for inline declarations. In particular, the validity of inline declarations is not limited to their current statement block. Inline declarations should, therefore, only be specified in less complex procedures, so making them easier to understand. The variables and field symbols declared inline should only be used in the direct vicinity of their declaration. Under no circumstances should a variable declared inline be accessed dynamically before the declaration. When an inline declaration is specified in a (conditional) control structure, it should usually only be accessed within this statement block.


  • Bad example
    Inline declaration of a field symbol pattern and two variables moff and mlen in a LOOP and their later reuse in a different loop. At first glance, it appears that the declarations are only valid in the first loop and only conditionally, but they are valid for the whole method and unconditionally.
    METHOD demo_method.
    "IMPORTING i_tab1 TYPE TANDARD TABLE OF string
    "IMPORTING i_tab2 TYPE TANDARD TABLE OF string
    "IMPORTING i_text TYPE string

    IF i_tab1 IS NOT INITIAL.
    LOOP AT i_tab1 ASSIGNING FIELD-SYMBOL(<(><<)>pattern>).
    FIND <(><<)>pattern> IN i_text MATCH OFFSET DATA(moff)
    MATCH LENGTH DATA(mlen).
    ...
    ENDLOOP.
    ENDIF.

    IF i_tab2 IS NOT INITIAL.
    LOOP AT i_tab2 ASSIGNING <(><<)>pattern>.
    FIND <(><<)>pattern> IN i_text MATCH OFFSET moff
    MATCH LENGTH mlen.
    ...
    ENDLOOP.
    ENDIF.

    ENDMETHOD.

    Good example
    The field symbols and variables declared inline are only used locally in the their respective loops. The fact that they are valid in the whole method is ignored, for the sake of simplicity. If the field symbol and the variables are only to be declared once for both loops, they should be declared at the start of the method using declaration statements.
    METHOD demo_method.
    "IMPORTING i_tab1 TYPE TANDARD TABLE OF string
    "IMPORTING i_tab2 TYPE TANDARD TABLE OF string
    "IMPORTING i_text TYPE string

    IF i_tab1 IS NOT INITIAL.
    LOOP AT i_tab1 ASSIGNING FIELD-SYMBOL(<(><<)>pattern1>).
    FIND <(><<)>pattern1> IN i_text MATCH OFFSET DATA(moff1)
    MATCH LENGTH DATA(mlen1).
    ...
    ENDLOOP.
    ENDIF.

    IF i_tab2 IS NOT INITIAL.
    LOOP AT i_tab2 ASSIGNING FIELD-SYMBOL(<(><<)>pattern2>.
    FIND <(><<)>pattern2> IN i_text MATCH OFFSET DATA(moff2)
    MATCH LENGTH DATA(mlen2).
    ...
    ENDLOOP.
    ENDIF.

    ENDMETHOD.
    Documentation extract taken from SAP system, � Copyright SAP AG. All rights reserved




    DECLARATION_GLOSRY
    DECLARATION_OPERATOR_GLOSRY




    comments powered by Disqus