Tabellenspalten dynamisch auswählen

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

Tabellenspalten dynamisch auswählen

Beitrag von broeckchen (ForumUser / 4 / 2 / 0 ) »
Hallo,

ich habe folgendes Problem:
Ich lese eine XML Datei ein, baue einen DOM Baum und gebe sie bislang nur wieder aus, funktioniert wunderbar.
Jetzt möchte den inhalt der Tags in eine Datenbank speichern, in der die Spaltennamen genau so heißen wie die zugehörigen Tags. Wenn ich nun aber über "vertrag_wa-name = node_get_value( )" meiner internen Tabelle vertrag_wa den wert aus dem tag (name) zuordnen möchte bekomme ich den fehler das "name" nicht in dem datenobjekt vertrag_wa vorhanden ist. Gebe ich direkt den Spaltennamen anstatt name ein funktioniert es.

Wie kann ich nun diese zuordnung dynamisch lösen? bei einer komplexen Tabelle kann ich doch nicht für jede Spalte eine abfrage machen ob ich im zugehörigen tag bin oder?
Vielleicht kann mir jemand einen Tip geben.

Hier mal der relevante Code Schnipsel:

Code: Alles auswählen.

name = node->get_name( ).
vertrag_wa-name = node->get_value( ).
Gruß
Broeckchen

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


Re: Tabellenspalten dynamisch auswählen

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
Schau Dir mal die Hilfe zu ASSIGN COMPONENT an, das sollte helfen.

Grüße

Rata

Re: Tabellenspalten dynamisch auswählen

Beitrag von broeckchen (ForumUser / 4 / 2 / 0 ) »
Danke für die schnelle Antwort Rata.
Allerdings bekomm ich das trotzdem nicht gelöst.
Im Prinzip möchte ich doch dann etwas in der Art haben:

Code: Alles auswählen.

vertrag_wa-<f1> = node->get_value( )
Das wird aber nicht erkannt nach dem Bindestirch.
Vorher habe ich durch

Code: Alles auswählen.

Assign name to <f1>
den tag namen f1 zugeordnet.
Ich komme noch nicht drauf wie ich den value wieder in die Struktur in die "dynamische" Spalte schreiben kann.
Mittels

Code: Alles auswählen.

ASSIGN COMPONENT <f2> OF STRUCTURE <f1> TO <f3>.
aus dem Beispiel von der SAP-Seite: http://help.sap.com/saphelp_nw04/helpda ... ontent.htm

Code: Alles auswählen.

REPORT demo_field_symbols_assign_comp .

DATA: BEGIN OF line,
        col1 TYPE i VALUE '11',
        col2 TYPE i VALUE '22',
        col3 TYPE i VALUE '33',
      END OF line.

DATA comp(5) TYPE c VALUE 'COL3'.

FIELD-SYMBOLS: <f1> TYPE ANY, <f2> TYPE ANY, <f3> TYPE ANY.

ASSIGN line TO <f1>.
ASSIGN comp TO <f2>.

DO 3 TIMES.
  ASSIGN COMPONENT sy-index OF STRUCTURE <f1> TO <f3>.
  WRITE <f3>.
ENDDO.

ASSIGN COMPONENT <f2> OF STRUCTURE <f1> TO <f3>.
WRITE / <f3>.
kann man doch auch nur daten auslesen und nicht wieder hineinschreiben wenn ich das richtig verstehe oder?
Kannst du oder vielleicht wer anderes mir nochmal auf die Sprünge helfen?

Gruß
Broeckchen

Re: Tabellenspalten dynamisch auswählen

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
Sorry, jetzt erst wieder gesehen:

Irgendwie so etwas in der Art:

Code: Alles auswählen.

lv_name = node->get_name( ).
assign component lv_name of structure vertrag_wa to <fs>.
<fs> = node->get_value( ).
Gruß

Rata

Re: Tabellenspalten dynamisch auswählen

Beitrag von broeckchen (ForumUser / 4 / 2 / 0 ) »
Hi,

genau so habe ich es schon ausprobiert. Dann bekomme ich zu der Zeile

Code: Alles auswählen.

<fs> = node->get_value( ).
die Fehlermeldung das <fs> noch nicht zugewiesen worden sei.

Grüße und Dank für die Mühen
Broeckchen

Re: Tabellenspalten dynamisch auswählen

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
Könnte sein, daß der Inhalt in lv_name in Großbuchstaben sein muss. Also vorher nochmal ein "translate to upper case" oder so ähnlich einbauen.
Wie ist denn der SY-SUBRC nach der ASSIGN-Zuweisung?

Rata

Folgende Benutzer bedankten sich beim Autor Ratazong für den Beitrag:
broeckchen


Re: Tabellenspalten dynamisch auswählen

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Servus,

ich denk Rata hat vollkommen Recht. Die XML-Tags sind case-sensitiv und die ABAP-Spaltennamen UPPERCASE.

Da ich gerade an selbigen Problem sitze ein alternativer Lösungsvorschlag:
Den DOM-Baum kannst du per XSL-Transformation prima in eine Struktur oder Tabelle im ABAP umbauen. Geht schnell und ist leicht verständlich und du kannst es direk wegspeichern.
Grüße
CASMAN

Folgende Benutzer bedankten sich beim Autor casman für den Beitrag:
broeckchen


Re: Tabellenspalten dynamisch auswählen

Beitrag von broeckchen (ForumUser / 4 / 2 / 0 ) »
Super jetzt hats Funktioniert!
Lag tatsächlich an der Schreibweise. Uppercase hat das Problem beseitigt.
Die möglichkeit mit der XSL-Transformation schaue ich mir auch nochmal an.

Vielen Dank!

Gruß
Broeckchen

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2120
Views
Tabellenspalten dynamisch abfragen
von dgmeiner » 04.06.2007 11:00 • Verfasst in ABAP® für Anfänger
0
Antw.
1034
Views
Sortierung anhand von Tabellenspalten
von Lamerman » 18.05.2006 14:33 • Verfasst in ABAP® Core
1
Antw.
1085
Views
Anzahl der Tabellenspalten zur Laufzeit festlegen
von JanMeier » 20.08.2007 19:29 • Verfasst in ABAP® Core
0
Antw.
1764
Views
SmartForms: Summe über eine Tabellenspalten ermitteln
von b0rsti » 12.02.2008 16:56 • Verfasst in Dialogprogrammierung
0
Antw.
1502
Views
Papierschacht auswählen im Formular
von kirmuh » 07.05.2008 13:33 • Verfasst in Dialogprogrammierung

Über diesen Beitrag


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.