generische Typisierung

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
25 Beiträge • Seite 1 von 2 (current) Nächste
25 Beiträge Seite 1 von 2 (current) Nächste

generische Typisierung

Beitrag von gse (ForumUser / 97 / 0 / 1 ) » 09.01.2003 16:59
Hallo liebe Forumgemeinde,

kann mir bitte jemand sagen, ob man interne tabellen auch generisch erzeugen kann?

Konkret möchte ich ueber einen Funktionsbaustein im Importparameter zunaechst den Namen eines DDIC-Objekt benennen und dann im Quellcode des FuBa entsprechend dieses Importparameters eine interne Tabelle samt Arbeitsbereich anlegen.
D.h. der Typ fuer die Typisierung des Arbeitsbereichs wird erst zur Laufzeit bekannt sein.

Probiert habe ich das Ganze schon mal wie folgt: (haut aba nich hin! :oops:

Code: Alles auswählen.

 
  FIELD-SYMBOLS <lm_tabname> like I_TABNAME.

Data: wa_tab TYPE <IM_tabname>,
         it_tab   LIKE STANDARD TABLE OF wa_tab.
Hat jemand eine Idee bzw. ein klitzekleines Beispiel?
Freue mich auf Anregungen, Kommentare jeder Art

Gruss

gse


Beitrag von Azreal (Specialist / 182 / 1 / 0 ) » 09.01.2003 17:43
Hi Gse,
FROHES NEUES!

hier dein beispiel:

Code: Alles auswählen.

FIELD-SYMBOLS: <it_test> TYPE any.

DATA: TypeName TYPE string.
TypeName = 'CRMT_ORDERADM_I_COMT'.
CREATE DATA dref TYPE (TypeName).

assign dref->* to <it_test>.
Gruß Azreal

Beitrag von tom (ForumUser / 78 / 0 / 0 ) » 09.01.2003 17:45
folgendes könnte es funktionieren:

* in lv_tab_name type C steht der Name von DDIC Structure

Code: Alles auswählen.

  DATA: lv_wa_type type ref to data,
            lv_tab_type type ref to data.

  FIELD-SYMBOLS: 
      <lt_tab> type any,
      <ls_tab> type any.
* Create workarea
    create data lv_wa_type type (lv_tab_name).
    assign lv_type->* to <ls_tab>.
* Create in tab
    create data lv_tab_type standard table of (lv_tab_name).
    assign lv_tab_type->* to <lt_tab>.
Gruss, tom

type standard table of

Beitrag von gse (ForumUser / 97 / 0 / 1 ) » 09.01.2003 18:37
hi azreal, hi tom, EUCH beiden auch noch ein FROHES NEUES!

azreal,

die derefernzierung haut hin, wenn man zusätzlich

Code: Alles auswählen.

dref als type ref to data 
deklariert. nur, habe ich dann erst eine struktur, schwer tue ich mir noch in der deklaration der internen tabelle passend zum arbeitsbereich

tom,

bei Dir mag der syntax-checker die zeile

Code: Alles auswählen.

create data lv_tab_type standard table of (lv_tab_name). 
nicht und stört sich an der definition.
fehlermeldung:

Code: Alles auswählen.

statt"STANDARD TABLE" wurde "TYPE LINE" oder "LIKE LINE" erwartet.
muss jetzt dann leider weg.... :(
bin aber morgen frueh wieder am start.

EUCH beiden noch einen schoenen abend und vielen dank fuer die hilfe!

gruss gse

Beitrag von tom (ForumUser / 78 / 0 / 0 ) » 10.01.2003 08:38
Hi gse,

sorry.....schreibfehler.... es sollte so sein:

Code: Alles auswählen.

create data lv_tab_type TYPE STANDARD TABLE OF (lv_tab_name). 
ich muss leider zugeben dass die coding noch nicht getestet wurde.
Gruss, tom

mag der syntax-checker auch nicht

Beitrag von gse (ForumUser / 97 / 0 / 1 ) » 10.01.2003 09:35
guten morgen tom,

kein problem, den TYPE STANDARD TABLE OF....hatte ich gestern auch noch probiert, nur mag der syntax-checker immer noch nicht. ;)

diesmal meldet er:

Code: Alles auswählen.

TABLE konnte nicht interpretiert werden. Mögliche Fehlerursachen: Falsche Schreibweise oder Kommafehler.
leider bringt die F1-Hilfe auch zum CREATE DATA als Variante nur:

Code: Alles auswählen.

1. CREATE DATA dref TYPE type.        
2. CREATE DATA dref TYPE (c).         
3. CREATE DATA dref LIKE f.           
4. CREATE DATA dref TYPE LINE OF itab.
5. CREATE DATA dref LIKE LINE OF itab.
werde mal weitersuchen. DIR auf jeden Fall mal noch einen schönen Tag und Danke für Deine Mühe!

gse

Beitrag von Steff (Site Admin / 386 / 0 / 1 ) » 10.01.2003 09:52
Hallo gse,

so wie tom das geschrieben hat muss es funktionieren. Hab ich selbst kurz eben noch mal getestet.

Schau mal:

Code: Alles auswählen.

data: lt_gentab type ref to data,
         lv_type(30) type c value 'CDHDR'.


 create data lt_gentab type standard table of (lv_type).

Hab genau dieses coding in einen kleinen Testreport reingehängt. Funktioniert tadellos. Insofern vermute ich, dass der Fehler bei Dir an anderer Stelle zu suchen ist.

Gruss,
Steff

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) » 10.01.2003 10:42
Steff hat geschrieben:so wie tom das geschrieben hat muss es funktionieren. Hab ich selbst kurz eben noch mal getestet.
Kann es sein, daß gse einfach noch nicht mit Release 6.20 arbeitet?

funzt nich!

Beitrag von Gast ( / / 0 / 3 ) » 10.01.2003 11:14
hallo leute,

kann machen was ich will, es bleibt bei der Fehlermeldung :roll:

Code: Alles auswählen.

"TABLE" konnte nicht interpretiert werden. Mögliche Fehlerursachen: Falsche Schreibweise oder Kommafehler. 

vielleicht liegt es wirlich am release (4.6B). weiss jemand einen workaround?

gruss gse

Beitrag von Steff (Site Admin / 386 / 0 / 1 ) » 10.01.2003 11:17
@Frank:

Wieso Rel. 620? Hab 610 und funktioniert problemlos. Da gse aber 46B hat, scheint es in diesem Falle am Release zu hängen.

@gse
Werd mal nachschauen, was man in 46B machen kann.

Gruß,
Steff

Beitrag von Gast ( / / 0 / 3 ) » 10.01.2003 11:49
Hallo gse,

also in 46B geht das nicht.

Der einzige workaround der mir so adhoc einfällt ist die Übergabe eines Tabellentyps, also:

data: lt_gentab type ref to data,
lv_tabtype(30) type c value 'SADRVB_TAB'.

create data lt_gentab type (lv_tabtype).

Das müsste funktionieren. Probier's mal :)

Gruß,
Steff

Release ist richtig getippt

Beitrag von Haubi (Expert / 608 / 13 / 27 ) » 10.01.2003 12:24
Moin.

Ab 6.10 kann der CREATE DATA itabs erzeugen. Bei Release <=4.6x können itabs mit der Methode cl_alv_table_create=>create_dynamic_table
erzeugt werden. Der Methode ist ein Feldkatalog zu übergeben, in dem die Felder FIELDNAME, REF_TABLE und REF_FIELD gesetzt werden müssen (ich glaube statt der REF_*-Felder kann auch ROLLNAME gesetzt werden, aber zitiert mich damit nicht).
FIELDNAME enthält den jeweiligen Feldnamen der erzeugten itab, REF_* den Feldbezug im DDIC (wenn das mit ROLLNAME geht muss hier das Datenelement stehen).

Viel Spass beim Experimentieren,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) » 10.01.2003 13:27
Womit wir von ABAP Core wieder zu ABAP Objects gekommen sind.
Irgendwie ist die Aufteilung in verschiedene Foren vielleicht doch nicht so glücklich.

Typ verwenden fuer interne Tabelle

Beitrag von Gast ( / / 0 / 3 ) » 10.01.2003 14:50
hi steff,

sorry wenn ich wieder etwas ausholen muss. ;)
Ziel meiner Bemühungen war es, mit Hilfe der Übergabeparameter des Funktionsbausteins einen Update auf ein x-beliebiges DDIC-Objekt zu vollziehen. Im Moment (s.u.) ist der Zugriff auf den DDIC dynamisch. Fehlt noch das Erzeugen des/r Arbeitsbereichs/internen Tabelle (bisher durch explizites Benennen des DDIC-Objektes typisiert). Wie gesagt, gleiche Idee: Der Importparameter bestimmt Aussehen und Aufbau des/r Arbeitsbereichs/internen Tabelle (l_wa_tabname bzw. l_it_tabname)

Code: Alles auswählen.

DATA: l_wa_tabname TYPE yrdsdwk0_veraend,
        l_it_tabname LIKE STANDARD TABLE OF l_wa_tabname.

DATA: lt_gentab      TYPE REF TO data,
        lv_tabtype(30) TYPE c.             "VALUE 'YRDSDWK0_VERAEND'.

  lv_tabtype = i_tabname.

  CREATE DATA lt_gentab TYPE (lv_tabtype).

  SELECT *
    INTO TABLE l_it_tabname
    FROM (lv_tabtype)    "dynam. DDIC-Objekt!
    WHERE bukrs = '0050'
    AND   vt = '00X'
    ORDER BY PRIMARY KEY.

Ich habe schon mal versucht, l_wa_tabname mit Hilfe von (lv_tabtype) zu deklarieren. Aber irgendwie funktioniert das nicht.

@hubi
vielen dank fuer den hinweis. Du kennst nicht zufällig einen Beispielreport im System, der nach diesem Verfahren eine dynamische Tabelle erzeugt?


Euch beiden jedenfalls herzlichen Dank

gse

Re: Typ verwenden fuer interne Tabelle

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) » 10.01.2003 15:16
Ziel meiner Bemühungen war es, mit Hilfe der Übergabeparameter des Funktionsbausteins einen Update auf ein x-beliebiges DDIC-Objekt zu vollziehen.
Wessen Idee war das denn? Die Idee ist gar nicht gut.


Vergleichbare Themen

Typisierung von Formparameter
von RiffRaff » 27.08.2004 09:46
Dynamische Typisierung?
von cortex » 18.03.2014 09:10
Dynamische Typisierung
von Gast » 19.01.2006 10:24
Problem: Unterprogramm und Parameter(typisierung)
von MacLeod » 25.01.2012 16:31
Typisierung bei Select-Options und Methoden-Exportparameter
von cecslucas » 06.08.2019 11:40