Dynamische Typisierung

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

Dynamische Typisierung

Postby Rudolf1279 » Thu Apr 28, 2011 4:05 pm

Ich würde gern einen Typ generisch typisieren.

Also so etwa:

Types: begin of ty_alv_gp,
STRNAME type ZBCT_LOGDATA-STRNAME,
COUNTER type ZBCT_LOGDATA-COUNTER.
include type zfi_s_IMP_MS_GP.
Types: end of ty_alv_gp.


Die Struktur "zfi_s_IMP_MS_GP" kann jedoch auch "ZFI_S_IMP_MS_FI" sein. Das weiß ich erst zur Laufzeit.

Habe im Tricktresor schon etwas nettes gefunden:
field-Symbols: <fs_structure> type any.
DATA: dref TYPE REF TO data.

* Dynamische Struktur erzeugen und Zuweisung zum Feldsymbol
CREATE DATA dref TYPE (gv_str).
ASSIGN dref->* TO <fs_structure>.

In der Variable "gv_str" steht meine Struktur. Das klappt auch und ich kann mir das Feldsymbol <fs_structure> ansehen während der Laufzeit. Allerdings kann ich in meinem Typ oben das nicht nutzen zur Typisierung, weder mit "type" noch mit "like". Beides mal kommen Fehlermeldungen.

Irgendeine Idee, wie das funktionieren könnte? Das wäre klasse. Sonst müsste ich viel Coding redundant kopieren, was sehr unschön wäre.

Schönen Gruß, René
Rudolf1279
.
.
 
Posts: 3
Joined: Thu Apr 28, 2011 4:05 pm

Re: Dynamische Typisierung

Postby Ilja583 » Thu Apr 28, 2011 4:28 pm

Beispielreport

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.  
  2. DATA: dref TYPE REF TO data.
  3. FIELD-SYMBOLS: <fs> TYPE ANY.
  4.  
  5. PARAMETERS: table TYPE tabname OBLIGATORY DEFAULT 't000'.
  6.  
  7.  
  8. **********************************************************************
  9. * 1. Schritt wie im Tricktresor - Variable mit angegebenem Typ erzeugen
  10.   CREATE DATA dref TYPE (table).
  11.   ASSIGN dref->* TO <fs>.
  12.  
  13. * 2. Schritt - Erweitern einer Struktur [hier um einen festen Teil am Ende der Struktur]
  14.   PERFORM extend_structure USING    <fs>
  15.                            CHANGING dref.
  16.   ASSIGN dref->* TO <fs>.
  17.  
  18.  
  19.  
  20.  
  21. *&---------------------------------------------------------------------*
  22. *&      Form  extend_structure
  23. *&---------------------------------------------------------------------*
  24. FORM extend_structure  USING    p_structure TYPE any
  25.                        CHANGING p_dref      TYPE REF TO data.
  26.   DATA: cl_desc1           TYPE REF TO cl_abap_structdescr,
  27.         t_component_table1 TYPE cl_abap_structdescr=>component_table,
  28.  
  29.         cl_desc2           TYPE REF TO cl_abap_structdescr,
  30.         t_component_table2 TYPE cl_abap_structdescr=>component_table,
  31.  
  32.         cl_desc            TYPE REF TO cl_abap_structdescr,
  33.         t_component_table  TYPE cl_abap_structdescr=>component_table.
  34.  
  35.   DATA: BEGIN OF fix_part,
  36.           checked TYPE flag,
  37.           light   TYPE char1,
  38.         END OF fix_part.
  39.  
  40.   cl_desc1 ?= cl_abap_typedescr=>describe_by_data( p_structure )        .
  41.   t_component_table1 = cl_desc1->get_components( ).
  42.  
  43.   cl_desc2 ?= cl_abap_typedescr=>describe_by_data( fix_part )        .
  44.   t_component_table2 = cl_desc2->get_components( ).
  45.  
  46.   APPEND LINES OF t_component_table1 TO t_component_table.   " Die übergebene Struktur
  47.   APPEND LINES OF t_component_table2 TO t_component_table.   " Der feste Teil dahinter
  48.   cl_desc = cl_abap_structdescr=>create( t_component_table ).
  49.  
  50.   CREATE DATA p_dref TYPE HANDLE cl_desc.                    " Ergibt dann eine Gesamtstruktur
  51.  
  52. ENDFORM.                    "extend_structure
GeSHi ©
Ilja583
.....
.....
 
Posts: 1372
Joined: Wed Jan 08, 2003 3:00 pm

Re: Dynamische Typisierung

Postby Rudolf1279 » Fri Apr 29, 2011 10:07 am

Hallo Stefan,

vielen Dank !! Das werde ich mal ausprobieren. Bin heute beim anderen Kunden, daher kann ich es erst am Dienstag testen.

Aber das sieht schon mal super fuchsig aus.

Vielen Dank und ein schönes Wochenende,

René
Rudolf1279
.
.
 
Posts: 3
Joined: Thu Apr 28, 2011 4:05 pm


Return to ABAP Objects®

Who is online

Users browsing this forum: No registered users and 18 guests