Keyfelder von Tabelle rausfinden?

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Keyfelder von Tabelle rausfinden?

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Hallo liebe ABAP-Gemeinde.

ich beschäftige mich nun diesen vormittag mit der RTTI.

Mein Problem. Ich brauch die Namen der Keyfelder einer Tabelle.
Ich habe nur den Namen der Tabelle, in meinem Fall 'SFLIGHT'.

Also das gesuchte Ergebnis wäre: 'CARRID CONNID FLDATE'.

Allerdings komm ich mit der RTTI nicht so ganz klar, so siehts aus:

Code: Alles auswählen.

TYPES:
  my_table TYPE TABLE OF sflight.

DATA:
  descr_ref TYPE REF TO cl_abap_tabledescr.

FIELD-SYMBOLS:
  <key_comp_wa> TYPE abap_keydescr.

START-OF-SELECTION.
  descr_ref ?= cl_abap_typedescr=>describe_by_name( 'MY_TABLE' ).

  WRITE: / 'Typename      :', descr_ref->absolute_name.
  WRITE: / 'Kind          :', descr_ref->type_kind.
  WRITE: / 'Length        :', descr_ref->length.
  WRITE: / 'Decimals      :', descr_ref->decimals.
  WRITE: / 'Table Kind    :', descr_ref->table_kind.
  WRITE: / 'Initial Size  :', descr_ref->initial_size.
  WRITE: / 'Key Def Kind  :', descr_ref->key_defkind.
  WRITE: / 'Has Unique Key:', descr_ref->has_unique_key.
  WRITE: / 'Key Components:'.
  LOOP AT descr_ref->key ASSIGNING <key_comp_wa>.
    WRITE <key_comp_wa>-name.
  ENDLOOP.
Das ist das Beispielprog aus der Doku nur eben als Tabelle die SFLIGHT. Allerdings bekomm ich so schon nicht das richtige Ergebniss...die 'KEY...' Felder sind alle leer.
Allgemein ist diese Lösung noch nicht ganz das was ich machen kann, denn ich hab in einer Variable den Namen 'SFLIGHT', nicht im Programmcode eine deklaration wie in diesem Beispiel hier, wo extra ne 'MY_TABLE' angelegt ist.

Hat sich jemand mit sowas schon beschäftigt und kann mir ein Tip geben?

Gruß
Markus

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


Re: Keyfelder von Tabelle rausfinden?

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
MarkusW hat geschrieben: Allgemein ist diese Lösung noch nicht ganz das was ich machen kann, denn ich hab in einer Variable den Namen 'SFLIGHT', nicht im Programmcode eine deklaration wie in diesem Beispiel hier, wo extra ne 'MY_TABLE' angelegt ist.

Hat sich jemand mit sowas schon beschäftigt und kann mir ein Tip geben?

Wieso nicht in der Tabelle dd03l die Keyfelder lesen?
Gruß Hendrik

Re: Keyfelder von Tabelle rausfinden?

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
JHM hat geschrieben:
MarkusW hat geschrieben: Allgemein ist diese Lösung noch nicht ganz das was ich machen kann, denn ich hab in einer Variable den Namen 'SFLIGHT', nicht im Programmcode eine deklaration wie in diesem Beispiel hier, wo extra ne 'MY_TABLE' angelegt ist.

Hat sich jemand mit sowas schon beschäftigt und kann mir ein Tip geben?

Wieso nicht in der Tabelle dd03l die Keyfelder lesen?
Dachte ich beschäftige mich mal mit etwas neuem. Aber zu RTTI gibt es echt wenig Informationen :cry: (auch in der SAP-Bibl bin ich nicht fündig geworden)

Werds wohl dann doch mit der dd03l machen müssen.

Gruß
Markus

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Hi Markus,

da die Methode Informationen zur internen Tabelle zurückliefert, ist das Ergebnis richtig. Du hast die interne Tabelle nämlich als "STANDARD TABLE" definiert. Und die hat keine Schlüsselfelder.
Wenn du den Type wie folgt definierst, dann hast du auch Schlüsselfelder und die werden auch ausgegeben.

Code: Alles auswählen.

TYPES:
  my_table TYPE SORTED TABLE OF sflight
                  WITH KEY mandt carrid connid fldate.
Zum Bezug auf einen DDIC-Tabelle kannst du wirklich am einfachsten die DD03L lesen.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Markus,

Du bekommst deshalb keine Schlüsselfelder geliefert, weil das Objekt, das Du untersuchst die interne Tabelle MY_TABLE ist und nicht die DDIC-Struktur SFLIGHT.
Und dort hast Du keinen Schlüssel WITH [UNIQUE] KEY mitgegeben...

@JHM
für die SFLIGHT wäre das Ergebnis dann richtig, aber bei RTTI geht es ja um Laufzeitobjekte, die nicht im DDIC vorhanden sein müssen.
Und zum Lesen würde ich den FB DDIF_NAMETAB_GET nehmen, auch wenn das Ergebnis das Gleiche ist, wie das direkte Lesen der DD03L...
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Thx ewx und ereglam und jhm,

habs dann auch ausprobiert den Zusatz With Key...und da kommt dann tatsächlich was.
Wie auch erwähnt, ist die RTTI wohl nicht für DDIC Objekte gedacht...nunja, dann eben die DD03l Tabelle...der FB wird bestimmt ne Hilfe sein, danke ereglam.

Gruß
Markus

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1010
Views
gleichen feld inhalt rausfinden!
von managero » 10.06.2008 11:41 • Verfasst in ABAP® für Anfänger
2
Antw.
1735
Views
ALV: Keyfelder drängeln sich vor
von Blue7even » 18.04.2006 09:51 • Verfasst in Dialogprogrammierung
4
Antw.
282
Views
ALV_Grid Keyfelder nicht editierbar setzen
von Micha_ela » 20.07.2023 12:49 • Verfasst in ABAP® für Anfänger
5
Antw.
921
Views

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Regex in where
vor 8 Minuten von edwin 7 / 159
Daten an Tabelle binden
vor 13 Stunden von Bright4.5 3 / 1485

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.

Aktuelle Forenbeiträge

Regex in where
vor 8 Minuten von edwin 7 / 159
Daten an Tabelle binden
vor 13 Stunden von Bright4.5 3 / 1485

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821