Warum versucht SAP, im folgenden Fall schlauer zu sein als es sein muss und kurze Speicherauszüge erstellen muss?Warum passiert das Übergeben eines zugewiesenen Feldsymbols an eine Hash-Tabellenzeile als Änderungsparameter einen Kurzdump?
REPORT zzy.
CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS:
main.
PRIVATE SECTION.
TYPES:
BEGIN OF t_my_type,
hierlevel TYPE i,
groupname TYPE ktext,
result TYPE p LENGTH 9 DECIMALS 2,
END OF t_my_type,
tt_my_type TYPE HASHED TABLE OF t_my_type WITH UNIQUE KEY hierlevel groupname.
CLASS-METHODS:
change
CHANGING
cs_my_type TYPE t_my_type.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD main.
DATA:
lt_my_table TYPE tt_my_type.
INSERT VALUE #(hierlevel = 0 groupname = 'MY_GROUP' result = '0.0') INTO TABLE lt_my_table
ASSIGNING FIELD-SYMBOL(<fs_my_type>).
change(
CHANGING
cs_my_type = <fs_my_type>
).
ENDMETHOD.
METHOD change.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
lcl_main=>main().
Es gibt nichts in der Methode geändert change
und noch in der Beschreibung der Kurzdump Ich sehe
Feld
<FS_MY_TYPE>-HIERLEVEL
, war ein neuer Wert zugewiesen, aber dieses Feld ist zumindest teilweise gegen Änderungen geschützt .
Es scheint, dass SAP versucht, schlauer zu sein, als es sein sollte. Ich würde verstehen, wenn der Kurzdump erzeugt wurde, wenn ich tatsächlich versuchte, eines der Schlüsselfelder zu ändern. Warum ist das so gestaltet?
Dies beantwortet die Frage nicht. Die Schlüsselfelder werden von mir in keiner Weise verändert. Ich habe bereits meine Antwort gepostet. Es sieht so aus, als wäre es einfach eine Designentscheidung.Was der Grund dafür war, bleibt mir jedoch unklar. – Jagger
Betrachte sorgfältig _pass by reference_ definition. Es ist egal, dass du sie nicht wirklich innerhalb der Methode änderst. Da sie als CHANGING-Compiler deklariert sind, müssen sie trotzdem beschreibbar sein. – Suncatcher
Noch einmal, irrelevant für diesen speziellen Fall. Ich weiß, dass ich durch Verweis gehe. Der Schlüssel ist, dass die Schlüsselfelder in der Methode 'change' in keiner Weise ** geändert ** werden. – Jagger