Du hast also eine Tabelle mit Objekten in einer der Klassen. Zeilentyp = Referenztyp? Das würde bedeuten, du hast eine Referenz auf eine Referenz....a-dead-trousers hat geschrieben:Ich verwende hier eher den READ TABLE ... REFERENCE INTO:
Die GET_DATASET Methode schaut nach ob es schon ein Objekt mit der gewünschten Datensatz ID gibt.
Das verstehe ich schon wieder nicht - die Methodenparameter haben doch mit dem READ erstmal nix zu tun.a-dead-trousers hat geschrieben:Was ich früher in meinen Klassen oft hatte, waren mehrere READ TABLE ... ASSIGNING Anweisungen hintereinander die oft dasselbe, nur halt mit unterschiedlichen Parametern, machten. Weil aber Feld-Symbole nur programmlokal funktionieren, erschien es mir nicht sinnvoll das in einer Methode zu kapseln. So wurde oft ein ziemlich unübersichtlicher Haufen von READ TABLE daraus.
Im Endeffekt habe ich ZWEI Tabellen in der Datenklasse. Eine davon ist struktuiert und ist für die zentrale Datenhaltung zuständig. Die andere hällt die Objektreferenzen der erzeugten Datensatzklassen damit je Datensatz auch nur wirklich eine Klasse instanziert wird. Die Datensatzklassen halten intern nur eine Referenz auf eine Zeile der ersten Tabelle und können somit ihre Änderungen direkt in diese hineinschreiben.ralf.wenzel hat geschrieben:Du hast also eine Tabelle mit Objekten in einer der Klassen. Zeilentyp = Referenztyp? Das würde bedeuten, du hast eine Referenz auf eine Referenz....
Die Datensatz-ID ist ein Attribut aller Objekte und hat immer denselben Datentyp? Warum dann nicht LOOP AT....ASSIGNING...ID = ...?
Sorry, ich will es nur verstehenDas klingt alles ein bisschen nach einer Multiton-Implementierung.
Das ist ein anderes Beispiel um zu verdeutlichen, dass man mit Referenzen auch "Alt"-Code verbessern kann indem man "komplizierte" und wiederkehrende READ TABLEs mit mehreren Parametern in eine Methode auslagern kann OHNE auf die direkte Änderbarkeit der Inhalte verzichten zu müssen. Sonst bräucht man ja wie zur ABAP-Steinzeit mit einem Workarea nach den Änderungen im Datensatz ein MODIFY um die Tabellenzeile zu ändern.ralf.wenzel hat geschrieben:Das verstehe ich schon wieder nicht - die Methodenparameter haben doch mit dem READ erstmal nix zu tun.
a-dead-trousers hat geschrieben:[Im Endeffekt habe ich ZWEI Tabellen in der Datenklasse. Eine davon ist struktuiert und ist für die zentrale Datenhaltung zuständig. Die andere hällt die Objektreferenzen der erzeugten Datensatzklassen damit je Datensatz auch nur wirklich eine Klasse instanziert wird. Die Datensatzklassen halten intern nur eine Referenz auf eine Zeile der ersten Tabelle und können somit ihre Änderungen direkt in diese hineinschreiben.
Geht natürlich auch. Ich will halt die Struktur der Datentabelle möglichst nahe an der Datenbank haben.ralf.wenzel hat geschrieben:Warum fasst du die nicht in einer Tabelle zusammen? Ich mache solche Tabellen in der Regel so, dass ich ein paar Spalten habe für wichtige Attribute und eine letzte für die Objektreferenz (damit ich keinen READ direkt auf Tabellenattribute machen muss, der einigen Restriktionen unterliegt).
Die Positionen sind mir eigentlich egal. Ich durchsuche zuerst die Objektabelle nach einer bereits vorhandenen Instanz mit der ID und nur wenn nichts gefunden wurde wird die Datentabelle durchsucht.ralf.wenzel hat geschrieben:Du suchst und findest in der Datentabelle ein Objekt mit einem bestimmten Attributsinhalt - wie schließt du auf die Position in der Objekttabelle?
Richtig, aber man kann keine sortierte Tabelle anlegen mit Key = Attribut. DAS ist der Grund, warum ich die wichtigsten Attribute nach denen ich lesen könnte, rausziehe in separate Spalten.....a-dead-trousers hat geschrieben:(SORT funktioniert auch mit TABLE_LINE->ATTRIBUTE und danach READ TABLE mit BINARY SEARCH)
Wenn Sie leer ist geht das.nickname8 hat geschrieben:Append an eine sortierte Tabelle?
Code: Alles auswählen.
INSERT VALUE #( carrid = p_carrid connid = p_connid fldate = p_fldate ) INTO TABLE sflight_tab REFERENCE INTO sflight_ref.
Das VALUE# macht das CREATE DATA implizit?a-dead-trousers hat geschrieben: Besser:.Code: Alles auswählen.
INSERT VALUE #( carrid = p_carrid connid = p_connid fldate = p_fldate ) INTO TABLE sflight_tab REFERENCE INTO sflight_ref.
Jepp, aber leider nur in der neuen Syntax.nickname8 hat geschrieben:Das VALUE# macht das CREATE DATA implizit?
Nur, wenn du auch in deiner sortierten Tabelle mandt als Schlüssel deklariert hast.mazu hat geschrieben: SFLIGHT_REF->MANDT = SY-MANDT.
7.40mazu hat geschrieben:Ab welcher Version gilt diese Syntax?