LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
33 Beiträge Seite 1 von 3 (current) Nächste
33 Beiträge Seite 1 von 3 (current) Nächste

LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von nickname8 (Specialist / 106 / 15 / 15 ) » 26. Okt 2018 13:01

Hallo Kollegen,

ich wollte mal fragen, was ihr in welchen Fällen nutzt, um eine Zeile einer Tabelle zu betrachten und warum?
Bei neuen Programm/Reports nutze ich so gut wie immer REFERENCE INTO, einfach weil das meiner Meinung nach am Nächsten an OOP dran ist.

Ich sehe aber auch oft, dass innerhalb von Klassen Field-Symbols dafür verwendet werden. Ist ja natürlich generell nicht schlimm, aber ich würde gerne mal von eurem Erfahrungsschatz profitieren.

Grüße


Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von a-dead-trousers (Top Expert / 3206 / 81 / 794 ) » 26. Okt 2018 17:21

Von der Funktionsweise her sollten REFERENCE INTO und ASSIGNING gleich funktionieren. Nur dass REFERENCE INTO auch im Kontext einer ganzen Klasse und darüber hinaus und nicht nur einer Methode funktioniert.
Performancetechnisch ist aber ASSIGNING um einen kleinen Deut schneller. Keine Ahnung warum das so ist. Ich hab das vor einigen Jährchen in mehreren Vergleichstests auf 7.01 ausprobiert. Sogar ASSIGNING mit anschließendem GET REFERENCE war um einen geringen Prozentsatz schneller als das REFERENCE INTO :twisted:
Ob das in den neueren Kernels ein anderes Ergebnis liefert, hab ich seither nicht mehr ausprobiert.

Wenn du neu anfängst, würde ich dir gleich zu REFERENCE INTO raten, damit du dich mit den unterschiedlichen Kontexten, wann welcher Befehl verwendet werden kann, gar nicht erst herumschlagen musst. Auf alle Fälle würde ich aber von den Workareas abraten (reines INTO) die machen eine "echte" Kopie der Daten im Speicher und das kostet bei großen Datenmengen einiges an Laufzeit.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von ralf.wenzel (Top Expert / 3394 / 146 / 217 ) » 26. Okt 2018 19:49

a-dead-trousers hat geschrieben:Nur dass REFERENCE INTO auch im Kontext einer ganzen Klasse und darüber hinaus und nicht nur einer Methode funktioniert
Den Satz verstehe ich nicht.

Ralf

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von black_adept (Top Expert / 3232 / 54 / 563 ) » 26. Okt 2018 20:00

ralf.wenzel hat geschrieben:
a-dead-trousers hat geschrieben:Nur dass REFERENCE INTO auch im Kontext einer ganzen Klasse und darüber hinaus und nicht nur einer Methode funktioniert
Den Satz verstehe ich nicht.

Ralf
Ich auch nicht.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von deejey (Specialist / 197 / 48 / 16 ) » 26. Okt 2018 20:06

Ich fürchte ohne den Expertenrat von gottfriedstroh kommen wir hier nicht weiter

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von a-dead-trousers (Top Expert / 3206 / 81 / 794 ) » 27. Okt 2018 08:33

ralf.wenzel hat geschrieben:
a-dead-trousers hat geschrieben:Nur dass REFERENCE INTO auch im Kontext einer ganzen Klasse und darüber hinaus und nicht nur einer Methode funktioniert
Den Satz verstehe ich nicht.
Ich meinte damit, dass man z.B. ein Attribut oder einen Parameter mit REF TO definieren kann und von einem REFERENCE INTO befüllen lassen kann. Somit ist der Inhalt auch in anderen Methoden einer Klasse verwendbar und auch sogar darüber hinaus. Mit Feld-Symbolen (ASSIGNING) geht das ja bekanntlich nicht. Die einzige "globale" Verwendung gibt es hier nur in Programmen bzw. Reports und wenn man so will über "dirty-assigns".
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von black_adept (Top Expert / 3232 / 54 / 563 ) » 27. Okt 2018 16:23

Aber wo ist denn jetzt der Vorteil? Bleiben wir mal beim Beispiel eines Parameters.
Du definierst einen Exportparameter vom Typ REF TO MATNR. Ok - das musst du nachher auch mit READ TABLE INTO REFERENCE füllen. Und bei Verwendung des Exportparameters im Aufrufer musst du dann dereferenzieren.
Die Alternative wäre ein Exportparameter vom Typ MATNR. Da müsste dann READ TABLE ASSIGNING und danach eine Zuweisung an den Parameter erfolgen. Dafür kann man sich nachher die Dereferenzierung sparen.

Die Anzahl der Stellen, wo der Exportparameter gefüllt wird ist klar definiert und (bei mir üblicherweise) sehr beschränkt. Die Anzahl der Aufrufer der Methode/Form hingegen ist meist nicht so klar definiert. Daher wäre mein Gedanke das Coding so zu gestalten dass der Aufrufer möglichst einfach an die Sache rangehen kann - und dazu gehört bei mir halt dass ich gerne direkt mit den Rückgabewerten arbeite anstatt sie noch dereferenzieren zu müssen.
( Und ich habe immer das Problem, dass ich an diversen Stellen prüfen muss, ob die Referenz überhaupt gebunden ist, wohingegen ich bei einem "echten" Rückgabeparameter immer von einer existierenden Variablen ausgehen kann )
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von ralf.wenzel (Top Expert / 3394 / 146 / 217 ) » 27. Okt 2018 16:53

Alles richtig, volle Zustimmung.

Wobei Referenzen aber deutlich flexibler sind, was man gelegentlich braucht. In unserer generischen Persistenzschicht wird immer ein REF TO DATA zurückgegeben. Weil die Klasse halt gar nicht weiß, was sie zurückgibt.


Ralf

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von black_adept (Top Expert / 3232 / 54 / 563 ) » 27. Okt 2018 18:00

ralf.wenzel hat geschrieben:Alles richtig, volle Zustimmung.

Wobei Referenzen aber deutlich flexibler sind, was man gelegentlich braucht. In unserer generischen Persistenzschicht wird immer ein REF TO DATA zurückgegeben. Weil die Klasse halt gar nicht weiß, was sie zurückgibt.
Genau in so einem Fall verwende ich auch gerne Referenzen. Aber in der Mehrzahl der Fälle ist ein READ TABLE oder LOOP AT ... bei mir eben hinreichend typisiert um darauf verzichten zu können. Und damit komme ich dann auch auf die Originalfrage dieses Threads zurück und kann nur sagen: Ich verwende LOOP ... INTO REFERENCE nur in Ausnahmefällen und nicht wie der OP im Regelfall.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von nickname8 (Specialist / 106 / 15 / 15 ) » 27. Okt 2018 20:39

black_adept hat geschrieben:Ich verwende LOOP ... INTO REFERENCE nur in Ausnahmefällen und nicht wie der OP im Regelfall.
Sondern? Field-Symbols?
ralf.wenzel hat geschrieben:In unserer generischen Persistenzschicht wird immer ein REF TO DATA zurückgegeben. Weil die Klasse halt gar nicht weiß, was sie zurückgibt.
Davon würde ich mega-gerne mal ein Datenmodell/Klassendiagram (grob, ohne Betriebsgeheimnisse ;-) ) sehen.

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von black_adept (Top Expert / 3232 / 54 / 563 ) » 27. Okt 2018 21:41

nickname8 hat geschrieben:
black_adept hat geschrieben:Ich verwende LOOP ... INTO REFERENCE nur in Ausnahmefällen und nicht wie der OP im Regelfall.
Sondern? Field-Symbols?
Im allgemeinen Feldsymbole, es sei denn die Syntax zwingt mich Workareas zu verwenden. Und ich kann mich nicht entsinnen jemals ein loop into reference gemacht zu haben.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von ralf.wenzel (Top Expert / 3394 / 146 / 217 ) » 27. Okt 2018 22:06

Mir geht es so wie Stefan. Die Notwendigkeit habe ich bisher nicht gesehen...

Ralf

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von a-dead-trousers (Top Expert / 3206 / 81 / 794 ) » 28. Okt 2018 08:48

Ein kleines Anwendungsbeispiel für Datenreferenzen:
In OO sollte ja möglichst viel als "Objekt" abgebildet werden. Daher hab ich schon mehrere Frameworks gebastelt, wo es eine zentrale Datenklasse für einen effizienten (mehrfach)Datenzugriff und darum herum Funktionsklassen für die einzelenen Datensätze gibt. Dieses Funktionsklassen werden z.B. über den Primarykey eines Datensatzes identifiziert und bieten lediglich SET und GET Methoden für die einzelnen Datenfelder. Die eigentliche Datenhaltung bleibt aber in der zentralen Datenklasse und die Funktionsklassen arbeiten nur mit Referenzen auf die Tabellenzeilen in der Datenklasse. Nach außen sind dabei nur die GET und SET Methoden in den Funktionsklassen bzw. READ, SAVE, HAS_CHANGES, GET_DATASET usw. in der Datenklasse sichtbar. Die Datenhaltung ist somit "nahe" an der Datenbank und die Daten müssen so auch nicht "teuer" in die Funktionsklassen kopiert bzw. daraus gelesen werden.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von ralf.wenzel (Top Expert / 3394 / 146 / 217 ) » 28. Okt 2018 11:54

Kannst du das konkreter beschreiben? Klingt danach, als würde ein SET Daten in einer anderen Klasse setzen....


Ralf

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von black_adept (Top Expert / 3232 / 54 / 563 ) » 28. Okt 2018 11:59

@adt: Ich glaube! verstanden zu haben was du machst. Aber könntest du jetzt mal ein simples Beispiel zu diesem Anwendungsfall beschreiben, wo du auf eine interne Tabelle mit LOOP at ... INTO REFERENCE arbeitest und wie du das dann nach oben oder unten durch die Methodeninterfaces durchreichst?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 3 (current) Nächste

Aktuelle Forenbeiträge

ABAP Clean Code
vor 7 Stunden von ralf.wenzel 36 / 790
ADOBE Forms - geschachtelte Tabellen
vor 8 Stunden von a-dead-trousers 3 / 31
Merkmale in Abhängigkeit vom Beziehungswissen
vor 11 Stunden von wreichelt 6 / 167
Abrechnung Konditionskontrakte Wildcards
vor 11 Stunden von ewx 2 / 22
PDF24 - GUI crasht bei PDF Druck
vor 15 Stunden von Lukas R. 3 / 47

Unbeantwortete Forenbeiträge

[GELÖST] Feld KNVV-BOIDT
vor 4 Tagen von SAP_ENTWICKLER 1 / 46
Sortierbegriffe einer Stückliste ändern
vor 4 Tagen von mbiesenb 1 / 39
Feiertagsklasse und Lohnart Verknüpfung entfernen
vor 4 Tagen von Flashtie 1 / 39
Berechtigungen für Batch User
vor einer Woche von JohnLocklay 1 / 85