6 votes

Appel de méthode fonctionnelle à l'intérieur d'un appel de module de fonction, pourquoi seulement avec EXPORTER ?

J'ai le morceau de code suivant.

REPORT ZZY.

CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
  PUBLIC SECTION.
    CLASS-METHODS:
      convert_to_xstring
        IMPORTING
          i_param1 TYPE i
          i_param2 TYPE i
        RETURNING
          VALUE(rv_result) TYPE xstring,
      main.
ENDCLASS.

CLASS lcl_main IMPLEMENTATION.
  METHOD convert_to_xstring.
  ENDMETHOD.

  METHOD main.
    DATA: lt_binary_tab TYPE STANDARD TABLE OF x.

    DATA(lv_result) = convert_to_xstring( i_param1 = 1 i_param2 = 2 ).

    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
      EXPORTING
        buffer = lcl_main=>convert_to_xstring(
                   EXPORTING
                     i_param1 = 1
                     i_param2 = 2
                 )
      TABLES
        binary_tab = lt_binary_tab.

  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  lcl_main=>main( ).

Un appel de méthode fonctionnelle qui ne fait pas partie d'un appel de module de fonction peut être écrit de cette manière.

DATA(lv_result) = convert_to_xstring( i_param1 = 1 i_param2 = 2 ).

Cependant, lorsque je veux l'utiliser exactement comme indiqué ci-dessus

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  EXPORTING
    buffer                = lcl_main=>convert_to_xstring( i_param1 = 1 i_param2 = 2 )
  TABLES
    binary_tab            = lt_binary_tab.

J'obtiens l'erreur de syntaxe suivante.

Le champ "CONVERT_TO_XSTRING(" est inconnu. Il s'agit de ni défini par une instruction "DATA". Instruction "DATA".

Il semble que le compilateur ait besoin de conseils dans ce cas pour faire la distinction entre un attribut et une méthode. Pourquoi serait-il ambigu pour le compilateur de laisser un tel cas sans écrire EXPORTING ?

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  EXPORTING
    buffer                = lcl_main=>convert_to_xstring( EXPORTING i_param1 = 1 i_param2 = 2 )
  TABLES
    binary_tab            = lt_binary_tab.

4voto

thefiloe Points 2214

La conception de l'abap est assez mauvaise. Il existe quelque chose comme des appels de méthodes fonctionnelles, mais vous ne pouvez pas l'utiliser en combinaison avec toutes les commandes. Par exemple, la commande WRITE ne fonctionne pas en combinaison avec des appels de méthodes fonctionnelles. Il semble qu'il s'agisse d'une sorte de "compatibilité partielle" avec les appels de méthodes fonctionnelles. Je ne sais pas pourquoi (peut-être que les développeurs de sap étaient ivres), mais c'est un fait avec lequel nous devons vivre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X