Referenzierung auf Attribute einer internen Tabelle von Objekten

Getting started ... Alles für einen gelungenen Start.
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

Referenzierung auf Attribute einer internen Tabelle von Objekten

Beitrag von Kudert777 (ForumUser / 9 / 0 / 0 ) » 06.01.2020 12:14

Guten Tag,

ich habe eine interne Tabelle von Objekten. Nun weiß ich nicht wie ich referenzieren kann.

Ich hätte es so erwartet:

Code: Alles auswählen.

data children type standard table of ref to class1.
children[ 1 ]->data = 'text'.
Erhalte allerdings eine Fehlermeldung "Unerwarteter Operator "->"".

Hier die Klasse:

Code: Alles auswählen.

class class1 DEFINITION.
 
 data: data type string.
 data: parent type ref to class1.
 data: children type standard table of REF TO class1 with empty key.
...
 START-OF-SELECTION.

data data type string.
  
data children type standard table of ref to class1.
  
children[ 1 ]->data = 'text'.
Vielen Dank im Voraus!


Re: Referenzierung auf Attribute einer internen Tabelle von Objekten

Beitrag von a-dead-trousers (Top Expert / 3354 / 94 / 854 ) » 06.01.2020 20:03

Deine Tabelle "children" ist leer, daher funktioniert ein Zugriff mittels "children[ 1 ]" nicht.
Das sollte funktionieren, solange "data" als PUBLIC-Attribut definiert ist:

Code: Alles auswählen.

append new #( ) to children. "Eine neue Zeile mit einer leeren Instanz einfügen
children[ 1 ]->data = 'text'. "Die erste Zeile einlesen und einen Wert zuweisen.

EDIT: Fehlendes #-Zeichen im Code ergänzt.
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: Referenzierung auf Attribute einer internen Tabelle von Objekten

Beitrag von DeathAndPain (Top Expert / 1270 / 139 / 291 ) » 07.01.2020 10:49

Ich habe mit sowas keine Übung, aber rein von der Theorie her ist children doch nicht als Tabelle von Objekten, sondern als Tabelle von Referenzen auf Objekte definiert. Kann man da trotzdem mit children[ 1 ]->data auf die Attribute zugreifen? Ich hätte erwartet, dass man das Objekt erst mal dereferenzieren muss, bevor man an den Inhalt rankommt.

Re: Referenzierung auf Attribute einer internen Tabelle von Objekten

Beitrag von a-dead-trousers (Top Expert / 3354 / 94 / 854 ) » 07.01.2020 14:03

DeathAndPain hat geschrieben:
07.01.2020 10:49
Ich habe mit sowas keine Übung, aber rein von der Theorie her ist children doch nicht als Tabelle von Objekten, sondern als Tabelle von Referenzen auf Objekte definiert. Kann man da trotzdem mit children[ 1 ]->data auf die Attribute zugreifen? Ich hätte erwartet, dass man das Objekt erst mal dereferenzieren muss, bevor man an den Inhalt rankommt.
Das ist die Aufgabe von "->".
Eine explizite Dereferenzierung bzw. ein explizites Casting benötigt man nur, wenn man die Tabelle mit "ref to data" bzw. "ref to object" defineirt hat.
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: Referenzierung auf Attribute einer internen Tabelle von Objekten

Beitrag von Kudert777 (ForumUser / 9 / 0 / 0 ) » 08.01.2020 09:48

Bei mir erscheint in der Zeile:

Code: Alles auswählen.

append new #( ) to children.
,die Fehlermeldung: Der obligatorische Parameter "DATA" wurde nicht versorgt.

Re: Referenzierung auf Attribute einer internen Tabelle von Objekten

Beitrag von gtoXX (Specialist / 124 / 26 / 18 ) » 08.01.2020 13:06

Hi,

also erstmal ist data: data type string. ganz schlechter Stil.

DATA ist ein reserviertes Wort. Es sollte nicht als Variablenname verwendet werden.

Wozu deklarierst du die Variable DATA noch mal nach Start-of-Selection ?

START-OF-SELECTION.

data data type string.

Die Meldung ,die Fehlermeldung: Der obligatorische Parameter "DATA" wurde nicht versorgt. lässt sich so nicht ganz erklären. Da fehlt mehr vom Coding.

Hast Du das eventuell im Constructor als Importparameter ?
"Code lügt nicht ^^"

Re: Referenzierung auf Attribute einer internen Tabelle von Objekten

Beitrag von Kudert777 (ForumUser / 9 / 0 / 0 ) » 10.01.2020 16:07

Ja ich habe "data" als Importparameter im Konstruktor.

Re: Referenzierung auf Attribute einer internen Tabelle von Objekten

Beitrag von a-dead-trousers (Top Expert / 3354 / 94 / 854 ) » 10.01.2020 21:11

Dann so

Code: Alles auswählen.

append new #( data = 'test' ) to children.
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: Referenzierung auf Attribute einer internen Tabelle von Objekten

Beitrag von Kudert777 (ForumUser / 9 / 0 / 0 ) » 11.01.2020 15:48

Ich kann leider nicht

Code: Alles auswählen.

write children[ 1 ]->data.
schreiben aufgrund von Versionsproblemen.

Mir wurde gesagt ich soll es so machen:

Code: Alles auswählen.

DATA(child) = children[ 1 ].
WRITE child->data.
Nun hätte ich noch zwei Fragen: Mit append hänge ich Zeilen an, kann ich hier bei meinem Bsp. auch insert verwenden um Spalten hinzuzufügen?

Wie kann ich die gesamte Tabelle ausgeben?
Wenn ich

Code: Alles auswählen.

DATA(child) = children[ 1 ].


verwende habe ich die Tabelle ja nur zeilenweise.

Re: Referenzierung auf Attribute einer internen Tabelle von Objekten

Beitrag von a-dead-trousers (Top Expert / 3354 / 94 / 854 ) » 11.01.2020 23:47

Kudert777 hat geschrieben:
11.01.2020 15:48
Mit append hänge ich Zeilen an, kann ich hier bei meinem Bsp. auch insert verwenden um Spalten hinzuzufügen?
Wie willst du mit INSERT Spalten hinzufügen? Damit kann man, ebenso wie mit APPEND, nur Zeilen hinzufügen. Einziger Unterschied ist, dass man sich den "Einfügepunkt" aussuchen kann.

Kudert777 hat geschrieben:
11.01.2020 15:48
Wie kann ich die gesamte Tabelle ausgeben?
So

Code: Alles auswählen.

LOOP AT children INTO child.
  write child->data.
ENDLOOP.
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

Seite 1 von 1