Tabellen aus Methode übergeben

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Tabellen aus Methode übergeben

Beitrag von Nion (ForumUser / 17 / 20 / 1 ) »
Moin,

folgende Frage, vlt stehe ich auch einfach massiv auf dem Schlauch...:
Ich habe eine Methode, in der zwei Tabellen über einen Select mit Daten gefüllt werden. Diese beiden Tabellen möchte ich jetzt an eine zweite Methode zur Weiterverarbeitung übergeben.
Wie mache ich das?
Ich wüsste, wie ich das mit einem normalen Returning-Parameter machen könnte, aber 1. kann ich da ja keinen Tabellentypen deklarieren und 2. kann ich da auch nur einen pro Methode haben.
Muss ich jetzt für jede Tabelle eine eigene Methode anlegen?
Muss ich einen eigenen Typen basteln, der vom System akzeptiert wird und wie eine Tabelle funktioniert (das geht ja, auch wenn ich nicht genau weiß wie :) ).

Vielen Dank schon mal für eure Hilfe,
Nion
Man muss nicht alles wissen. Man muss nur wissen, wo es steht oder wen man fragen kann.

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


Re: Tabellen aus Methode übergeben

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
Du kannst type standard table of struc_type with empty keys nehmen, um die Typisierung einfach zu halten. (Nicht gut für große Datenmengen.)
Wenn beide Methoden in der selben Klasse liegen dann je nach Möglichkeit wäre es geraten die in eine weitere Methode zu Kapseln und mittels eines Klassenattributs (interne Tabelle) die Daten zwischen den Methoden teilen. Ist halt die Frage ob deine Methoden statisch oder instanz Methoden sind, damit ein entsprechendes Klassenattribut erstellt werden kann.
Bissl Code zur Verfügung zu stellen wäre eigentlich nice um ein besseres Verständnis zu kriegen.

Folgende Benutzer bedankten sich beim Autor sap_enthusiast für den Beitrag:
Nion


Re: Tabellen aus Methode übergeben

Beitrag von msfox (Specialist / 373 / 57 / 76 ) »
Nion hat geschrieben:
11.09.2023 07:34
Ich wüsste, wie ich das mit einem normalen Returning-Parameter machen könnte,
Gibt ja auch noch EXPORTING, CHANGING- und IMPORTING-Parameter.
Abweichend zu Funktionsbausteinen können hier nur nicht Strukturen verwenden, um damit eine Tabelle zu übergeben. Du musst dir also irgendwo noch die Tabelle selbst definieren. Entweder im DDIC oder als lokalen Typ innerhalb der Klasse.

Folgende Benutzer bedankten sich beim Autor msfox für den Beitrag:
Nion


Re: Tabellen aus Methode übergeben

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Ganz genau. In dem Moment, in dem man mehr als einen Wert (und eine interne Tabelle ist im weitesten Sinne auch nur ein Wert) zurückliefern möchte, verwendet man typischerweise EXPORTING anstelle von RETURNING.

Allerdings gäbe es auch eine Alternative, die mit RETURNING funktioniert: Du könntest einfach eine Struktur mit den beiden Tabellen als Untertabellen definieren und diese Struktur mit RETURNING zurückliefern. Also so:

Code: Alles auswählen.

CLASS hahaha DEFINITION.
  whatever SECTION.
  TYPES: BEGIN OF type_return_structure,
    return_table_1 TYPE t_table1,
    return_table_2 TYPE t_table2,
  END OF type_return_structure.
  METHODS bla RETURNING return_structure TYPE type_return_structure.
Ob das zu empfehlen ist, kann man sich freilich drüber streiten. Ich fände zwei EXPORTING-Parameter nachvollziehbarer.
Ich wüsste, wie ich das mit einem normalen Returning-Parameter machen könnte, aber 1. kann ich da ja keinen Tabellentypen deklarieren
Sagt wer? Der Tabellentyp muss nur bekannt sein. Entweder im DDIC, oder Du deklarierst ihn einfach im DEFINITION-Block der Klasse; dann steht er klassenweit zur Verfügung. (Gibt noch andere Orte, wo man ihn definieren kann, aber die genannten reichen ja schon.)

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
Nion


Re: Tabellen aus Methode übergeben

Beitrag von Nion (ForumUser / 17 / 20 / 1 ) »
Moin, erstmal vielen Dank für eure Hilfe.
Ich hab es jetzt mit selbst definierten Tabellentypen und Exporting hinbekommen :)
Sagt wer? Der Tabellentyp muss nur bekannt sein. Entweder im DDIC, oder Du deklarierst ihn einfach im DEFINITION-Block der Klasse; dann steht er klassenweit zur Verfügung. (Gibt noch andere Orte, wo man ihn definieren kann, aber die genannten reichen ja schon.)
Ja, da hab ich mich falsch ausgedrückt bzw Informationen unterschlagen.
Ich hab das formularbasiert gemacht und da gibt es sowas wie "Type Table Of" nicht.
Darauf, dass es im Quelltext gehen könnte, bin ich nicht gekommen :D
Ich mache jetzt das erste Mal was größeres mit Klassen, Methoden und FUBAs und befinde mich in einem dauerhaften Zustand der Verwirrung... :D
Man muss nicht alles wissen. Man muss nur wissen, wo es steht oder wen man fragen kann.

Re: Tabellen aus Methode übergeben

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
Nion hat geschrieben:
12.09.2023 08:20
und befinde mich in einem dauerhaften Zustand der Verwirrung... :D
Welcome to ABAP I guess :D

Folgende Benutzer bedankten sich beim Autor sap_enthusiast für den Beitrag:
Nion


Re: Tabellen aus Methode übergeben

Beitrag von msfox (Specialist / 373 / 57 / 76 ) »
Nion hat geschrieben:
12.09.2023 08:20
Ich hab das formularbasiert gemacht und da gibt es sowas wie "Type Table Of" nicht.
In der Schnittstelle Tabellen anhand von Strukturen zu definieren ist bei der SAP bereits in Funktionsbausteinen "obselete". Darum wurde das in Klassen gar nicht erst erlaubt.
Nion hat geschrieben:
12.09.2023 08:20
Darauf, dass es im Quelltext gehen könnte, bin ich nicht gekommen :D
Direkt in der Schnittstelle der Methode im Quellcodebasierten Editor? Das sollte meines Wissens nicht gehen. Ansonsten klar, beim Anlegen von Typen geht das, aber eben nur im Quellcode. Aber da kann man den Typ dann teilweise nicht als RETURNING verwenden. Ich glaube, der muss public sein?
--
Wenn du es wirklich richtig, richtig machen willst, nimmst du statt Strukturen Objekte, so wie in anderen Programmiersprachen auch. JAVA z.B. kennt keine Strukturen. Hat auch nur einen Return-Parameter, der ein Objekt oder ein einfacher Datentyp ist.

Re: Tabellen aus Methode übergeben

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
msfox hat geschrieben:
12.09.2023 11:13
Direkt in der Schnittstelle der Methode im Quellcodebasierten Editor? Das sollte meines Wissens nicht gehen. Ansonsten klar, beim Anlegen von Typen geht das, aber eben nur im Quellcode. Aber da kann man den Typ dann teilweise nicht als RETURNING verwenden. Ich glaube, der muss public sein?
Du kannst den Typ einfach im DEFINITION-Block der Klasse definieren. Die PUBLIC SECTION muss es nur sein, wenn die aufrufende Methode nicht auch zur Klasse gehören soll; ansonsten kannst Du die Typdeklaration sogar in die PRIVATE SECTION packen. In Eclipse gibt es bei Klassen auch noch Tabreiter "Class-relevant Local Types" und "Local Types". Zumindest in ersteren kann man die Typdeklaration auch reinpacken. Wo Eclipse das dann physisch versteckt, bin ich gerade nicht sicher.
Wenn du es wirklich richtig, richtig machen willst, nimmst du statt Strukturen Objekte, so wie in anderen Programmiersprachen auch. JAVA z.B. kennt keine Strukturen. Hat auch nur einen Return-Parameter, der ein Objekt oder ein einfacher Datentyp ist.
Das halte ich für einen ideologischen Ansatz. In der Praxis halte ich Strukturen für bedeutend nachvollziehbarer als Objekte, insbesondere wenn man die Klasse nicht selber geschrieben hat und im Debugger ergründen möchte, was da passiert. Bei Objekten braucht man im Grunde eine extrem gute und detailreiche Dokumentation, die real kein Schwein schreibt. Andernfalls weiß man nicht, wofür genau die Attribute des Objektes stehen, wo ihre Werte herkommen und wo sie hingehen. Das hängt damit zusammen, dass Attribute im Grunde nichts anderes sind als globale Variablen längst vergangener Zeiten, mit allen damit zusammenhängenden Nachteilen.

Re: Tabellen aus Methode übergeben

Beitrag von msfox (Specialist / 373 / 57 / 76 ) »
DeathAndPain hat geschrieben:
12.09.2023 13:48
Das halte ich für einen ideologischen Ansatz.
Aber nur in ABAP. In JAVA stellt sich die Frage nach dem Ansatz nicht.

Re: Tabellen aus Methode übergeben

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Vielleicht ist das der Grund, weshalb es Java-Entwickler wie Sand am Meer gibt, so dass das Durchschnittsgehalt für diese weit unter dem von ABAP-Entwicklern liegt. 😁

Re: Tabellen aus Methode übergeben

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
msfox hat geschrieben:
12.09.2023 13:57
DeathAndPain hat geschrieben:
12.09.2023 13:48
Das halte ich für einen ideologischen Ansatz.
Aber nur in ABAP. In JAVA stellt sich die Frage nach dem Ansatz nicht.
Das hier ist das ABAPforum. Daher ist D&Ps Anmerkung durchaus relevant.
In Java kannst du halt nur über Klassen multiple Daten übergeben - ABAP hat auch andere Möglichkeiten.

Klar kann man Programme auch JAVA-Like in ABAP schreiben. Aber man sollte sich schon darüber im Klaren sein was die Nach- aber eben auch die Vorteile einer Programmiersprache sind und letztere ausnutzen.

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

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

9
Antw.
19103
Views
iTAB an Methode übergeben
von Diesel83 » 09.03.2011 19:53 • Verfasst in ABAP® für Anfänger
15
Antw.
2151
Views
Select-Options an Methode übergeben
von Karl der Große » 31.01.2024 17:00 • Verfasst in ABAP® für Anfänger
3
Antw.
513
Views
3
Antw.
4261
Views
Weiß die Methode ob ein optionaler Parameter übergeben wurde
von OBOP » 05.04.2017 10:11 • Verfasst in ABAP Objects®
10
Antw.
1144
Views

Über diesen Beitrag



Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

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.