Kopieren einer "any table"

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Kopieren einer "any table"

Beitrag von ralf.wenzel (Top Expert / 4011 / 209 / 283 ) »
Moin,

so, nachdem ich eine dumme Frage wegen Übermüdung gestellt habe, habe ich dann noch die Nacht durchgemacht.

Ich habe heute Nacht ein Coding geschrieben, das ich gern generalisieren und in eine Klasse packen würde. Die zentrale Methode bekommt dabei eine Tabelle "type any table", die ich kopieren und mir objektglobal merken muss. Natürlich kann ich in die private section kein "data copytab type any table" reinschreiben, obwohl das genau das wäre, was ich bräuchte.

Ich kann aber auch nicht mit create data in der Methode dynamisch eine Tabelle erzeugen, weil die ja nur in der Methode sichtbar ist, ich muss die Tabelle aber instanzenweit sehen können.

Wo mache ich den Denkfehler?
Bild
Ralf Wenzel Heuristika SAP-Development -- 25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Kopieren einer "any table"

Beitrag von zzcpak (Expert / 673 / 5 / 68 ) »
Häh? So ganz kann ich dir nicht folgen, was du erreichen möchtest.

Eine interne Tabelle in der private section ist doch instanzweit zu sehen.

Oder brauchst du genau eine Tabelle für alle Instanzen? Dann halt statisch anlegen.

Re: Kopieren einer "any table"

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hi,

hast du mal versucht die Tabelle als Importparameter einer Methode zu nutzen vom Typ TYPE REF TO DATA?
Dann müsstest du nur noch dereferenzieren: ASSIGN lt_irgendwas->* TO <fs_lt_irgendwas>. Und den Inhalt des Feldsymbols könntest du doch dann in einem public Klassenattribut speichern.
Vielleicht habe ich ja einen Denkfehler, aber ich meine das könnte funktionieren.
Gruß,
der Matze

Re: Kopieren einer "any table"

Beitrag von black_adept (Top Expert / 4159 / 136 / 960 ) »
Beispiel ( auch wenn die Kopie jetzt öffentlich ist statt privat von dir beschrieben ) - und wie ich sehe genau die Umsetzung die Thanatos auch schon vorgeschlagen hat während ich das hier geschrieben habe.

Code: Alles auswählen.

REPORT.


*----------------------------------------------------------------------*
*       CLASS lcl_test DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_test DEFINITION.
  PUBLIC SECTION.
    METHODS: copy_table IMPORTING it_tab TYPE ANY TABLE.

    DATA: mr_copied_table TYPE REF TO data.
ENDCLASS.                    "lcl_test DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_test IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_test IMPLEMENTATION.
  METHOD copy_table.
    FIELD-SYMBOLS: <lt_table> TYPE ANY TABLE.

    CREATE DATA mr_copied_table LIKE it_tab.
    ASSIGN mr_copied_table->* TO <lt_table>.
    <lt_table> = it_tab.

  ENDMETHOD.                    "copy_table
ENDCLASS.                    "lcl_test IMPLEMENTATION


DATA: gt_data TYPE STANDARD TABLE OF sflight,
      go_test TYPE REF TO lcl_test.

FIELD-SYMBOLS: <gt_table> TYPE ANY TABLE.

START-OF-SELECTION.
  SELECT *
    INTO TABLE gt_data
    FROM sflight.

  CREATE OBJECT go_test.
  go_test->copy_table( gt_data ).

  ASSIGN go_test->mr_copied_table->* TO <gt_table>.
  BREAK-POINT.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
ewx

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Kopieren einer "any table"

Beitrag von a-dead-trousers (Top Expert / 4485 / 231 / 1205 ) »
ralf.wenzel hat geschrieben:Ich kann aber auch nicht mit create data in der Methode dynamisch eine Tabelle erzeugen, weil die ja nur in der Methode sichtbar ist, ich muss die Tabelle aber instanzenweit sehen können.
Wo mache ich den Denkfehler?
Genau da!
Alles was mit CREATE DATA (oder CREATE OBJECT) angelegt wird, wird im HEAP (oder irgendeinem anderen globalen Speicher) abgelegt und ist (theoretisch) von ÜBERALL aus abrufbar. Lediglich der benutzte Zeiger (TYPE REF TO) schränkt die Sichtbarkeit ein, denn der ist enweder nur lokal in der Methode oder Unterprogram; private, protected oder public in der Klasse; oder global im Rahmenprogramm sichtbar.

lg ADT

Nachsatz: Wenn du direkt auf die ANY TABLE ein GET REFERENCE machen würdest, würde diese Referenz ihre Gültigkeit verlieren, sobald der zugehörie Datenbereich seine Gültigkeit verliert. Also bei PER REFERENCE übergebenen Parametern wenn die im Aufruf übergebene Variable ungültig wird und bei PER VALUE übergebenen Parameter wenn dieser ungültig wird. Das heißt die Variable oder der Parameter ist nicht mehr erreichbar weil die Methode oder das Unterprogramm wo sie lokal definiert wurden verlassen wurde und sie werden somit vom Garbage Collector zerstört egal ob darauf noch ein Referenzzeiger existiert.
Alles andere was mit CREATE DATA (oder CREATE OBJECT) angelegt wurde, wird vom GC nur dann gelöscht wenn es wirklich keine Zeiger darauf mehr gibt.
(Dewegen kommt es zum Beispiel oft dazu, dass ein mit SET HANDLER registrierter Event-Handler aufgerufen wird, obwohl dieser eigentlich schon "zerstört" ist, weil eben in der Event-Registrierung noch eine Referenz darauf existiert)

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
black_adept

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.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

5
Antw.
7120
Views
Instanzen kopieren, ohne Referencen zu kopieren
von markudo » 25.04.2008 09:16 • Verfasst in ABAP Objects®
5
Antw.
13558
Views
standard table vs. sorted table
von ralf.wenzel » 31.07.2014 12:49 • Verfasst in ABAP® Core
44
Antw.
17417
Views
INTO CORRESPONDING FIELDS OF TABLE VS. INtO TABLE
von Bright4.5 » 07.12.2018 13:22 • Verfasst in ABAP® für Anfänger
1
Antw.
4577
Views
Kopieren von Tabellen
von chebello » 10.12.2007 08:57 • Verfasst in ABAP Objects®
8
Antw.
1095
Views
ModulePools kopieren
von ZF_SAPler » 13.04.2022 10:49 • Verfasst in ABAP® für Anfänger

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.