Funktionsbaustein: Importparameter = interne tabelle+tabtyp

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV

Funktionsbaustein: Importparameter = interne tabelle+tabtyp

Postby Cecilia1751 » Thu Dec 19, 2002 7:51 pm

hallo liebe Forumgemeinde,

neuerdings möchte ich mir einen (moeglichst universell einsetzbaren) funktionsbaustein basteln, der mir aus den werten einer
internen tabelle eine zeichenkette bastelt.
einer der import-parameter soll demnach eine interne tabelle sein, plus dem typ einer ddic-tabelle, weil naemlich zur
verarbeitung der daten im funktionsbaustein dann wiederum eine interne tabelle mit arbeitsbereich definiert werden soll.
*aua :?

oder anders: ich möchte einem funktionsbaustein eine x-beliebige itab übergeben und dann dafür eine zeichenkette
zurueckbekommen.

habe mir bisher einen import-parameter:

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.       i_internal_tabname type DD02L-TABNAME.  
GeSHi ©


gebastelt und möchte nun anhand dieses namens die fuer die verarbeitung notwendige interne tabelle samt arbeitsbereich
basteln.

sinngemaess:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.       data: wa_tab type (i_internal_tabname),
  2.       itab type table of wa_tab.
  3.  
GeSHi ©

"(funktioniert aber leider so nicht!??)

wie ich dann noch den kompletten inhalt einer internen tabelle uebergebe weiss ich noch ueberhaupt nicht.

sorry, wenn das alles so schrecklich kompliziert klingt, aber irgendwie ist die jungvaterschaft schon ziemlich anstrengend! :wink:

freue mich auf kommentare, beispiele, anregungen jeder art!
EUCH noch einen schoenen abend und gute nacht!

gse
Cecilia1751
...
...
 
Posts: 110
Joined: Wed Dec 18, 2002 11:04 am

Postby Walter4536 » Fri Dec 20, 2002 8:22 am

Hallo,

also ich würde das z.B. (nur eine Möglichkeit von vielen) so lösen:

1. Der Funktionsbaustein:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. FUNCTION Z_TEST.
  2. *"----------------------------------------------------------------------
  3. *"*"Lokale Schnittstelle:
  4. *"  IMPORTING
  5. *"     REFERENCE(LV_IMPORTTABLE) TYPE  TABLE
  6. *"     REFERENCE(LV_FIELDNAME) TYPE  STRING
  7. *"  EXPORTING
  8. *"     REFERENCE(EV_STRING) TYPE  STRING
  9. *"----------------------------------------------------------------------
  10. field-symbols: <lf_tabfield> type any,
  11.                <lf_tabline> type any.
  12.  
  13. if not lv_fieldname is initial.
  14.   loop at lv_importtable assigning <lf_tabline>.
  15.     assign component lv_fieldname of structure <lf_tabline> to <lf_tabfield>.
  16.     if sy-subrc ne 0.
  17.       exit.
  18.     endif.
  19.     concatenate ev_string <lf_tabfield> into ev_string.
GeSHi ©


Diesem Funktionsbaustein kannst Du im Grunde jede beliebige Tabelle übergeben. Zusätzlich mußt Du in lv_fieldname noch angeben, welches Feld (Feldname der Tabelle zugrundeliegenden Struktur) du verwendet haben möchtest, welches dann als String zusammengebaut zurückgegeben wird.

Ein entsprechendes Beispielcoding wie der Aufruf dann aussieht:

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. types: begin of mystruc,
  2.           line&#40;20&#41; type c,
  3.        end of mystruc.
  4.  
  5. data: lt_mytab type standard table of mystruc,
  6.          ls_mytab type mystruc,
  7.          lv_mystring type string.
  8.  
  9.       ls_mytab-line = 'Hallo GSE'.
  10.       append ls_mytab to lt_mytab.
  11.       ls_mytab-line = 'Wie geht es'.
  12.       append ls_mytab to lt_mytab.
  13.       ls_mytab-line = 'Dir heute morgen'.
  14.       append ls_mytab to lt_mytab.
  15.       ls_mytab-line = 'Hoffentlich gut?'.
  16.       append ls_mytab to lt_mytab.
  17.  
  18.       CALL FUNCTION 'Z_TEST'
  19.         EXPORTING
  20.           LV_IMPORTTABLE       = lt_mytab
  21.           LV_FIELDNAME           = 'LINE'
  22.         IMPORTING
  23.           EV_STRING                = lv_mystring
  24.                 .
  25.  
  26.  
GeSHi ©


Das ist aber wie gesagt nur eine Möglichkeit. Man kann das ganze nahezu beliebig komplex und generisch machen. Erweitern könnte man das Beispiel z.B. noch insofern, daß man dem Funktionsbaustein ein Trennzeichen mitgibt, oder daß wenn kein Feldname angegeben wird, dann eben die einzelnen Tabellenzeilen als String zusammengebaut werden, etc. Ich hoffe das hilft Dir weiter. Falls Du noch Fragen hast, Du weißt ja, wo wir zu finden sind ;-)

Viele Grüße und schöne Weihnachten,

Steff
Walter4536
...
...
 
Posts: 315
Joined: Mon Dec 02, 2002 12:09 pm

Postby Walter4536 » Fri Dec 20, 2002 8:50 am

Hi,

der Vollständigkeit halber:

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. FUNCTION Z_TEST.
  2. *"----------------------------------------------------------------------
  3. *"*"Lokale Schnittstelle:
  4. *"  IMPORTING
  5. *"     REFERENCE&#40;LT_MYTAB&#41; TYPE  TABLE
  6. *"  EXPORTING
  7. *"     REFERENCE&#40;EV_STRING&#41; TYPE  STRING
  8. *"----------------------------------------------------------------------
  9. field-symbols: <lf_tabline> type any.
  10.  
  11. loop at lt_mytab assigning <lf_tabline>.
  12.     if <lf_tabline> is assigned.
  13.          concatenate ev_string <lf_tabline> into ev_string.
  14.     endif.
  15.  
  16.  
GeSHi ©


Das wäre dann die Variante, die schlicht und ergreifend die Tabellenzeile zum Zusammenbauen des Strings benutzt.

Gruß,
Steff
Walter4536
...
...
 
Posts: 315
Joined: Mon Dec 02, 2002 12:09 pm

muchas gracias

Postby Cecilia1751 » Fri Dec 20, 2002 10:32 am

schoenen guten morgen steff,

....und herzlichen dank fuer die beispiele, werde das ganze gleich mal ausprobieren. bin gestern abend nicht mehr dazu gekommen mal hier nachzusehen. :oops:

anyway, auch DIR schoene weihnachten..... und lass DICH reich beschenken! :wink:

(ich habe dieses jahr (und fuer die naechsten 20 jahre im voraus) mein geschenk schon bekommen: ich werde naemlich "doppelpapi"! :P )

gse
Cecilia1751
...
...
 
Posts: 110
Joined: Wed Dec 18, 2002 11:04 am

Postby Walter4536 » Fri Dec 20, 2002 10:40 am

Hallo,

das freut mich aber. Herzlichen Glückwunsch zu den Vaterfreuden und viel Spass! Kinder sind klasse, ich habe auch zwei :D

Grüsse,
Steff
Walter4536
...
...
 
Posts: 315
Joined: Mon Dec 02, 2002 12:09 pm

ungeliebter string

Postby Cecilia1751 » Fri Dec 20, 2002 5:09 pm

hi,

bin schon die ganze zeit am probieren und machen und tun, aber irgendwie scheint meiner workbench (46D) die typisierung
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.  ...EV_STRING TYPE STRING
GeSHi ©
nicht zu schmecken :?

die syntaxüberprüfung funktioniert noch, aber wenn ich das programm dann testen will, kommt die meldung:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.  Fehler bei Generierung des Testrahmens
GeSHi ©
:shock:

bei einem meiner anderen versuche, habe ich zusätzlich im bereich "tabellen" einen parameter definiert. bedauerlicherweise habe ich da noch keine passende generische typisierung gefunden. über diesen tabellenparameter wuerde naemlich die deklaration des arbeitsbereichs und der itab ganz gut funktionieren.

habe ich vielleicht was uebersehen?


Gruss gse
Cecilia1751
...
...
 
Posts: 110
Joined: Wed Dec 18, 2002 11:04 am

Postby Dion4903 » Fri Dec 20, 2002 5:38 pm

Hi,

das funktioniert nicht. Du kannst das nur mit einem Testprogramm testen. Dadurch dass die Uebergabeparameter erst zur Laufzeit typisiert werden, kann die SE37 keinen Testrahmen erzeugen. Es geht nur wie oben in der Antwort von Steff, wenn Du ein Testprogramm wie er es geschrieben hat, benutzt.

Viele Grüße und frohe Weihnachten,

Tom
Dion4903
..
..
 
Posts: 78
Joined: Tue Dec 03, 2002 3:53 pm

coding

Postby Cecilia1751 » Fri Dec 20, 2002 5:47 pm

hi steff,

zum nachvollziehen habe ich eigentlich nur Dein coding kopiert

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. FUNCTION y_yrdsdwk1_tab2str.
  2. *"----------------------------------------------------------------------
  3. *"*"Lokale Schnittstelle:
  4. *"  IMPORTING
  5. *"     REFERENCE&#40;LV_IMPORTTABLE&#41; TYPE  TABLE
  6. *"     REFERENCE&#40;LV_FIELDNAME&#41; TYPE  STRING
  7. *"  EXPORTING
  8. *"     REFERENCE&#40;EV_STRING&#41; TYPE  STRING
  9. *"----------------------------------------------------------------------
  10.  
  11.  
  12.   FIELD-SYMBOLS:  <lf_tabfield> TYPE ANY,
  13.                   <lf_tabline> TYPE ANY.
  14.  
  15.   IF NOT lv_fieldname IS INITIAL.
  16.     LOOP AT lv_importtable ASSIGNING <lf_tabline>.
  17.       ASSIGN COMPONENT lv_fieldname
  18.         OF STRUCTURE <lf_tabline> TO <lf_tabfield>.
  19.       IF sy-subrc NE 0.
  20.         EXIT.
  21.       ENDIF.
  22.       CONCATENATE ev_string <lf_tabfield> INTO ev_string.
  23.     ENDLOOP.
  24.   ENDIF.
  25.  
GeSHi ©



Dieser code fuehrt beim Testen zur Fehlermeldung:
! Fehler bei der Generierung des Teilrahmens



es ist wirklich wie verhext und das wo ich doch dieses jahr eh schon ohne weihnachtsgans leben muss. :wink:

gruss gse
Cecilia1751
...
...
 
Posts: 110
Joined: Wed Dec 18, 2002 11:04 am

mon dieu

Postby Cecilia1751 » Fri Dec 20, 2002 6:43 pm

wieviele tonnen asche kann man sich eigentlich auf s haupt fallen lassen? funktioniert alles einwandfrei, wenn man den fuba von einem anderen programm aus ruft. :oops:

herzlichen dank fuers augenliften tom! ich wuenschte es waer jetzt, .....sagen wir: 10oo und ich haette noch den ganzen tag vor mir! :wink:

auch DIR froehliche weihnachten und einen guten uebergang nach 2003!

gse
Cecilia1751
...
...
 
Posts: 110
Joined: Wed Dec 18, 2002 11:04 am

Postby Jessy5246 » Sat Dec 21, 2002 5:01 pm

Dear GSE:
You may want to add 'SEPARATED BY SPACE' to the concatenate command.

Another useful command to look into is CREATE DATA, if you ever need an additional field/work area of the same type of the passed field (especially if generic).

But I believe, you have other worries than ABAP coming up. Enjoy...

Regards,
Wolfgang
Jessy5246
..
..
 
Posts: 23
Joined: Tue Dec 03, 2002 8:20 pm


Return to ABAP® Core

Who is online

Users browsing this forum: No registered users and 2 guests

cron