Mam następujący fragment kodu.Funkcjonalne wywołanie metody w wywołaniu modułu funkcji, dlaczego tylko z EXPORTING?
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().
Wywołanie funkcji funkcjonalnej, które nie jest częścią wywołania modułu funkcji, można zapisać w ten sposób.
DATA(lv_result) = convert_to_xstring(i_param1 = 1 i_param2 = 2).
Jednak gdy chcę go używać dokładnie tak, jak napisane powyżej
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.
pojawia się następujący błąd składni.
Pole „CONVERT_TO_XSTRING (” nie jest znane. Nie jest to ani w jednym z określonych tabel ani zdefiniowane przez „dane” oświadczeniu. „DATA” oświadczenie.
Wygląda potrzeb kompilatora pewne wskazówki w tym przypadku rozróżnić atrybutu i metody. Dlaczego byłoby dwuznaczne dla kompilator niech taki przypadek bez pisania 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.
Te wywołania metod są nazywane [metodami funkcyjnymi] (https://help.sap.com/abapdocu_70/en/ABAPMETHODS_FUNCTIONAL.htm), co jest bardzo różne od [funkcji lub metody inline] (https: // pl .wikipedia.org/wiki/Inline_function), którego AFAIK nie istnieje w ABAP. Wolałbym nie pomylić tych dwóch. A co do twojego pytania - "FUNKCJA POŁĄCZENIA" to bałagan - czy to wystarczająca odpowiedź? ;-) – vwegert
Nie mówi się o [inline] (https://scn.sap.com/community/abap/blog/2013/05/23/abap-news-for-release-740--inline- deklaracje) tak samo mylące? Będę jednak przeformułować, ponieważ ten sposób wywołania metody został rzeczywiście nazwany funkcjonalnie od samego początku. Pamiętam funkcję 'inline' w C++, są one dobrą alternatywą dla makr preprocesorów. – Jagger