Code: Alles auswählen.
REPORT zzrwtest.
CLASS lcl_alpha DEFINITION FINAL.
PUBLIC SECTION.
METHODS main.
METHODS set_matnr
IMPORTING matnr TYPE matnr
RETURNING VALUE(ergebnis) type abap_bool.
ENDCLASS.
CLASS lcl_beta DEFINITION CREATE PRIVATE FINAL.
PUBLIC SECTION.
CLASS-METHODS get_instance
RETURNING VALUE(result) TYPE REF TO lcl_beta.
METHODS get_data
IMPORTING
bla TYPE char01
peng TYPE char01
RETURNING VALUE(result) TYPE mara.
METHODS get_matnr
RETURNING VALUE(result) TYPE matnr.
ENDCLASS.
CLASS lcl_alpha IMPLEMENTATION.
METHOD main.
DATA(ergebnis) = me->set_matnr( SWITCH #( lcl_beta=>get_instance( )->get_matnr( )
WHEN lcl_beta=>get_instance( )->get_data( bla = 'A' peng = 'B' )-matnr )
THEN lcl_beta=>get_instance( )->get_data( bla = 'A' peng = 'B' )-matnr )
ELSE SPACE ).
ENDMETHOD.
ENDCLASS.
CLASS lcl_beta IMPLEMENTATION.
METHOD get_data.
ENDMETHOD.
ENDCLASS.
Die Klasse LCL_BETA=>GET_INSTANCE( darf nicht mit "FOR TESTING" angelegt werden, da sie schon von Nicht-Testcoding referiert wird.
Code: Alles auswählen.
REPORT z_wof_test_class.
data
:gv_s TYPE string
.
CLASS lcl DEFINITION.
PUBLIC SECTION.
CLASS-METHODS conv
IMPORTING
iv_text TYPE string
RETURNING VALUE(rv_text) TYPE string.
ENDCLASS.
CLASS lcl IMPLEMENTATION.
METHOD conv.
rv_text = iv_text.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
PERFORM doit.
END-OF-SELECTION.
FORM doit.
DATA
:lv_s1 TYPE string
,lv_s2 TYPE string
.
lv_s1 = 'ABC'.
lv_s2 = lcl=>conv( EXPORTING iv_text = lv_s1 ).
perform subroutine using lv_s2.
perform subroutine USING lcl=>conv( EXPORTING iv_text = lv_s1 ).
ENDFORM.
form subroutine using pv_string TYPE string.
gv_s = pv_string.
endform.
Wozu verwendest du überhaupt noch eine Form ? Da kannst du doch gleich eine Klasse mit der nötigen Logik schreiben. Viel sinnvoller.wfischer65 hat geschrieben: ↑04.10.2024 17:10Also ich habe die gleiche Fehlermeldung - kann aber nicht sehen wo ich COND einbauen / verwenden könnte. Der Fehler kommt nur in Zeile 33 - ich bau aber extra die Klasse ein damit ich die Variable sparen und das Ergebnis direkt an die Form übergeben kann. Warum kommt die Fehlermeldung und wo habe ich das "FOR TESTING" geschrieben ohne es zu sehen?Code: Alles auswählen.
REPORT z_wof_test_class. data :gv_s TYPE string . CLASS lcl DEFINITION. PUBLIC SECTION. CLASS-METHODS conv IMPORTING iv_text TYPE string RETURNING VALUE(rv_text) TYPE string. ENDCLASS. CLASS lcl IMPLEMENTATION. METHOD conv. rv_text = iv_text. ENDMETHOD. ENDCLASS. START-OF-SELECTION. PERFORM doit. END-OF-SELECTION. FORM doit. DATA :lv_s1 TYPE string ,lv_s2 TYPE string . lv_s1 = 'ABC'. lv_s2 = lcl=>conv( EXPORTING iv_text = lv_s1 ). perform subroutine using lv_s2. perform subroutine USING lcl=>conv( EXPORTING iv_text = lv_s1 ). ENDFORM. form subroutine using pv_string TYPE string. gv_s = pv_string. endform.
Da bin ich gespannt. Diese Fehlermeldung erscheint öfter in unterschiedlichen Kontexten.ralf.wenzel hat geschrieben: ↑04.10.2024 17:32Das Problem ist, dass du bei PERFORM in USING keine explizite Variable übergeben willst, sondern einen RETURNING-Parameter. Das geht nicht.
Diese Fehlermeldung kommt oft, wenn sie augenscheinlich nicht angebracht ist. Warum, entzieht sich meiner Kenntnis.
Ich hab mal eine Mail an Horst Keller (aka "Gott" 😉 ) geschrieben, aber ich weiß nicht, ob der mir antwortet. Letztes Mal als ich eine Frage hatte, hat es geklappt 😉 Jedenfalls ist er aktuell nicht im Büro erreichbar, soviel weiß ich schon.
Ralf
P.S.: Ich hab hier leider keine Möglichkeit der englischsprachigen Anmeldung. Wenn du mir den englischen Text der Fehlermeldung schickst, frage ich in der SAP Community.