Page 1 of 1

Funktionsbaustein: Importparameter = interne tabelle+tabtyp

PostPosted: Thu Dec 19, 2002 7:51 pm
by Cecilia1751
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

PostPosted: Fri Dec 20, 2002 8:22 am
by Walter4536
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

PostPosted: Fri Dec 20, 2002 8:50 am
by Walter4536
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

muchas gracias

PostPosted: Fri Dec 20, 2002 10:32 am
by Cecilia1751
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

PostPosted: Fri Dec 20, 2002 10:40 am
by Walter4536
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

ungeliebter string

PostPosted: Fri Dec 20, 2002 5:09 pm
by Cecilia1751
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

PostPosted: Fri Dec 20, 2002 5:38 pm
by Dion4903
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

coding

PostPosted: Fri Dec 20, 2002 5:47 pm
by Cecilia1751
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

mon dieu

PostPosted: Fri Dec 20, 2002 6:43 pm
by Cecilia1751
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

PostPosted: Sat Dec 21, 2002 5:01 pm
by Jessy5246
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