cl_abap_typedescr=>describe_by_name

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

cl_abap_typedescr=>describe_by_name

Beitrag von baldanders (ForumUser / 7 / 0 / 0 ) »
Hallo,

ich muß eine Struktur erstellen, der Typ und die Länge deren Komponenten erst zur Laufzeit bekannt sind. Für das Erstellen der Komponententabelle benutze ich die Methode cl_abap_typedescr=>describe_by_name, um den Typ der Komponenten zu beschreiben. Das Problem ist, daß die Methode nur den Typnamen als einziges Input-Parameter hat. Wie kann ich denn die Länge der Komponenten beinflüßen? Der Attribut Length der Klasse cl_abap_typedescr ist schreibgeschützt.

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


Re: cl_abap_typedescr=>describe_by_name

Beitrag von JHM (Top Expert / 1223 / 2 / 204 ) »
baldanders hat geschrieben: Wie kann ich denn die Länge der Komponenten beinflüßen?
Welchen TYPE hat den die Komponente die du erzeugen willst?

Wenn es sich um elemantare Datentypen handelt, sollte dir die Klasse CL_ABAP_ELEMDESCR weiter helfen. Dort findest du Methoden für alle elemantarer Datentypen:
GET_STRING
GET_XSTRING
GET_I
GET_F
GET_D
GET_T
GET_C
GET_N
GET_X
GET_P

Wenn der Type es vorsieht kannst du auch die Länge oder auch die Dezimalstellen mitgeben.
Gruß Hendrik

Beitrag von baldanders (ForumUser / 7 / 0 / 0 ) »
Die Komponente kann jeden Typ haben, ich erfahre es erst zur Laufzeit. Im Moment nutze ich die Methode cl_alv_table_create=>create_dynamic_table. Es ist aber nur ein Workaround, denn dieser Weg ist nicht perfomant

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

dann zeig doch bitte mal ein Beispiel für die Komponentenbeschreibungen...

Und wie wird dann die Struktur erzeugt? Mit CL_ABAP_STRUCTDESCR=>CREATE?

PS:
in welchem Release bewegst Du Dich?
Gruß
Ereglam


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

Beitrag von JHM (Top Expert / 1223 / 2 / 204 ) »
baldanders hat geschrieben:Die Komponente kann jeden Typ haben, ich erfahre es erst zur Laufzeit.
Jeden Typ?

elementare und aus dem DDIC?

Mehr Infos bitte.
Gruß Hendrik

Beitrag von baldanders (ForumUser / 7 / 0 / 0 ) »
Ich bekomme zur Laufzeit einen Domänennamen und muß eine Range aufbauen zu dieser Domäne. Ich kann den Domänennamen nicht einfach an DESCRIBE_BY_NAME übergeben, bei User-definierten Domänen bekomme ich die Meldung, dass der Typ nicht bekannt ist. Also, rufe ich den Baustein 'DD_DOMA_GET', um den Typ und die Länge aus der Domäne zu bekommen. Und dann baue ich die Struktur auf (und eine Tabelle mit dieser Struktur).

Release 6.4

Typ und Länge bestimmen

Code: Alles auswählen.

CALL FUNCTION 'DD_DOMA_GET'
    EXPORTING
      domain_name   = iv_domname
    IMPORTING
      dd01v_wa_a    = ls_domheader
    TABLES
      dd07v_tab_a   = et_valuetab
      dd07v_tab_n   = lt_dd07v_tab_n
    EXCEPTIONS
      illegal_value = 1
      op_failure    = 2
      OTHERS        = 3.
Struktur und Tabelle aufbauen

Code: Alles auswählen.

method CREATE_GENERIC_RANGETAB.

* Imports:
* IV_TYPE              TYPE TYPENAME
* IV_INTERNAL_LENGTH	TYPE LVC_OUTLEN
* Exports:
* EP_S_RANGE           TYPE REF TO DATA
* EP_T_RANGE           TYPE REF TO DATA

DATA:
    lt_components    TYPE abap_component_tab,
    ls_component     LIKE LINE OF lt_components,
    lp_typedescr     TYPE REF TO cl_abap_datadescr,
    lp_rangedescr    TYPE REF TO cl_abap_structdescr,
    lp_rangetabdescr TYPE REF TO cl_abap_tabledescr.

  CLEAR: ep_s_range, ep_t_range.

  ls_component-name = 'SIGN'.
  lp_typedescr ?= cl_abap_typedescr=>describe_by_name( 'SIGN_RANGE' ).
  ls_component-type = lp_typedescr.
  APPEND ls_component TO lt_components.

  ls_component-name = 'OPTION'.
  lp_typedescr ?= cl_abap_typedescr=>describe_by_name( 'SDOPTRANGE' ).
  ls_component-type = lp_typedescr.
  APPEND ls_component TO lt_components.

  ls_component-name = 'LOW'.
  lp_typedescr ?= cl_abap_typedescr=>describe_by_name( lv_type ).
  ls_component-type = lp_typedescr.
  APPEND ls_component TO lt_components.

  ls_component-name = 'HIGH'.
  ls_component-type = lp_typedescr.
  APPEND ls_component TO lt_components.


  TRY.
      CALL METHOD cl_abap_structdescr=>create
        EXPORTING
          p_components = lt_components
        RECEIVING
          p_result     = lp_rangedescr.

    CATCH cx_sy_struct_creation .
      RAISE EXCEPTION TYPE zcx_re_exception.
  ENDTRY.

  TRY.
      CALL METHOD cl_abap_tabledescr=>create
        EXPORTING
          p_line_type = lp_rangedescr
        RECEIVING
          p_result    = lp_rangetabdescr.

    CATCH cx_sy_table_creation .
      RAISE EXCEPTION TYPE zcx_re_exception.
  ENDTRY.


  CREATE DATA ep_s_range TYPE HANDLE lp_rangedescr.
  CREATE DATA ep_t_range TYPE HANDLE lp_rangetabdescr.

ENDMETHOD.

Beitrag von baldanders (ForumUser / 7 / 0 / 0 ) »
JHM hat geschrieben:
baldanders hat geschrieben:Die Komponente kann jeden Typ haben, ich erfahre es erst zur Laufzeit.
Jeden Typ?

elementare und aus dem DDIC?

Mehr Infos bitte.
Ich bekomme den Typ aus einer Domäne (mit FB 'DD_DOMA_GET'), also ein DDIC-Typ.

Seite 1 von 1

Vergleichbare Themen

3
Antw.
5097
Views
DESCRIBE FIELD
von ABAP_BEGINNER » 07.06.2010 15:28 • Verfasst in ABAP® für Anfänger
1
Antw.
2195
Views
Describe Table funktioniert nicht
von abap_frischling » 09.02.2022 11:40 • Verfasst in ABAP® für Anfänger
2
Antw.
5407
Views
DESCRIBE TABLE tab LINES n mit RTTI-Konzept
von chrislo » 06.04.2011 13:11 • Verfasst in ABAP Objects®
2
Antw.
5055
Views
Ersatzanweisung für "DESCRIBE TABLE tab LINES lin"
von Hunter » 21.06.2007 09:59 • Verfasst in ABAP® für Anfänger
6
Antw.
11861
Views
ABAP Workbench und ABAP Dictionary - für Einsteiger
von schnonus » 03.04.2008 10:39 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

BAPI zur ABSO?
vor einer Woche von DeathAndPain 2 / 1101
Materialstammerweiterung: Neuer Reiter
vor 3 Wochen von DeathAndPain gelöst 4 / 1814
Ermittlung der Arbeitstage (Mosid)
vor 3 Wochen von Radinator 11 / 47478
LSMW-Problem
vor 4 Wochen von DeathAndPain gelöst 6 / 5366

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

BAPI zur ABSO?
vor einer Woche von DeathAndPain 2 / 1101
Materialstammerweiterung: Neuer Reiter
vor 3 Wochen von DeathAndPain gelöst 4 / 1814
Ermittlung der Arbeitstage (Mosid)
vor 3 Wochen von Radinator 11 / 47478
LSMW-Problem
vor 4 Wochen von DeathAndPain gelöst 6 / 5366