ABAP - TIPP: Funktionsbaustein zum FTP Upload / Download

Hinweise, Tips und Tricks, FAQs - keine Anfragen!!

ABAP - TIPP: Funktionsbaustein zum FTP Upload / Download

Postby Yagmur4551 » Fri Apr 16, 2004 2:41 pm

Diesee Funktionsbausteine können FTP Uploads und Downloads durchführen. Sie Nutzen die Funktion Betriebsystemkommandos auszuführen.

Setzen Sie SAP auf anderen Betriebsystemem müssen Sie den Systemcommand evlt. noch etwas anpassen.

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. FUNCTION Z_ftp_upload.
  2. *"----------------------------------------------------------------------
  3. *"*"Lokale Schnittstelle:
  4. *"  IMPORTING
  5. *"     REFERENCE(SRC_FILE)
  6. *"     REFERENCE(DEST_FILE)
  7. *"     REFERENCE(FTP_SERVER)
  8. *"     REFERENCE(FTP_USER)
  9. *"     REFERENCE(FTP_PASSWD)
  10. *"     REFERENCE(FLAG_BINARY) OPTIONAL
  11. *"  EXPORTING
  12. *"     REFERENCE(SUCCESS_226)
  13. *"  TABLES
  14. *"      OUTPUT
  15. *"  EXCEPTIONS
  16. *"      COULD_NOT_OPEN_COMMANDFILE
  17. *"----------------------------------------------------------------------
  18.  
  19. *-----------------------------------------------------------------------
  20. * DATENDEFINITION
  21. *-----------------------------------------------------------------------
  22.   DATA: uuid  LIKE  sysuuid-c.
  23.   DATA: dsn TYPE string.
  24.   DATA: fl TYPE string.
  25.   DATA: os_command(500).
  26.   DATA: BEGIN OF syscalltab OCCURS 0,
  27.            line(200),
  28.         END OF syscalltab.
  29.  
  30. *Temporärer Dateiname ermitteln.
  31.   " 1. UUID erstellen
  32.   CALL FUNCTION 'SYSTEM_UUID_C_CREATE'
  33.        IMPORTING
  34.             uuid = uuid.
  35.  
  36.   CONCATENATE '/tmp/ftp_' uuid INTO dsn.
  37.  
  38. * FTP Kommandofile schreiben
  39.   OPEN DATASET dsn FOR OUTPUT IN TEXT MODE.
  40.   IF sy-subrc NE 0. RAISE could_not_open_commandfile. ENDIF.
  41.  
  42.   CONCATENATE 'user' ftp_user ftp_passwd
  43.                INTO fl SEPARATED BY space.
  44.   TRANSFER fl TO dsn.
  45.  
  46.   IF flag_binary NE space.
  47.     TRANSFER 'binary' TO dsn.
  48.   ENDIF.
  49.  
  50.   CONCATENATE 'put' src_file dest_file INTO fl SEPARATED BY space.
  51.   TRANSFER fl TO dsn.
  52.  
  53.   TRANSFER 'bye' TO dsn.
  54.  
  55.   CLOSE DATASET dsn.
  56.  
  57.  
  58. * Betriebssystemkommando erstellen.
  59.   CONCATENATE 'ftp -n -v' ftp_server '<' dsn
  60.                    INTO os_command SEPARATED BY space.
  61.  
  62.   CALL 'SYSTEM'
  63.    ID 'COMMAND'
  64.     FIELD os_command
  65.    ID 'TAB'
  66.     FIELD syscalltab-*sys*.
  67.  
  68.   MOVE syscalltab[] TO output[].
  69.  
  70. * temporäres File wieder löschen.
  71.   DELETE DATASET dsn.
  72.  
  73. * FTP Rückmeldungen auswerten
  74. * 226 bedeutet File erfolgreich übertragen
  75.   LOOP AT syscalltab.
  76.     IF syscalltab+0&#40;3&#41; = '226'.
  77.       success_226 = 'X'.
  78.     ENDIF.
  79.  
  80.  
  81.  
  82. *-----------------------------------------------------------
  83.  
  84.  
  85.  
  86. FUNCTION Z_FTP_DOWNLOAD.
  87. *"----------------------------------------------------------------------
  88. *"*"Lokale Schnittstelle:
  89. *"       IMPORTING
  90. *"             REFERENCE&#40;SRC_FILE&#41;
  91. *"             REFERENCE&#40;DEST_FILE&#41;
  92. *"             REFERENCE&#40;FTP_SERVER&#41;
  93. *"             REFERENCE&#40;FTP_USER&#41;
  94. *"             REFERENCE&#40;FTP_PASSWD&#41;
  95. *"             REFERENCE&#40;FLAG_BINARY&#41; OPTIONAL
  96. *"       EXPORTING
  97. *"             REFERENCE&#40;SUCCESS_226&#41;
  98. *"       TABLES
  99. *"              OUTPUT
  100. *"       EXCEPTIONS
  101. *"              COULD_NOT_OPEN_COMMANDFILE
  102. *"----------------------------------------------------------------------
  103.  
  104. *-----------------------------------------------------------------------
  105. * DATENDEFINITION
  106. *-----------------------------------------------------------------------
  107.   DATA: uuid  LIKE  sysuuid-c.
  108.   DATA: dsn TYPE string.
  109.   DATA: fl TYPE string.
  110.   DATA: os_command&#40;500&#41;.
  111.   DATA: BEGIN OF syscalltab OCCURS 0,
  112.            line&#40;200&#41;,
  113.         END OF syscalltab.
  114.  
  115. * Temporären Dateiname ermitteln.
  116.   " UUID erstellen
  117.   CALL FUNCTION 'SYSTEM_UUID_C_CREATE'
  118.        IMPORTING
  119.             uuid = uuid.
  120.  
  121.   CONCATENATE '/tmp/ftp_' uuid INTO dsn.
  122.  
  123. * FTP Kommandofile schreiben
  124.   OPEN DATASET dsn FOR OUTPUT IN TEXT MODE.
  125.   IF sy-subrc NE 0. RAISE could_not_open_commandfile. ENDIF.
  126.  
  127.   CONCATENATE 'user' ftp_user ftp_passwd
  128.                INTO fl SEPARATED BY space.
  129.   TRANSFER fl TO dsn.
  130.  
  131.   IF flag_binary NE space.
  132.     TRANSFER 'binary' TO dsn.
  133.   ENDIF.
  134.  
  135.   CONCATENATE 'put' src_file dest_file INTO fl SEPARATED BY space.
  136.   TRANSFER fl TO dsn.
  137.  
  138.   TRANSFER 'bye' TO dsn.
  139.  
  140.   CLOSE DATASET dsn.
  141.  
  142.  
  143. * Betriebssystemkommando erstellen.
  144.   CONCATENATE 'ftp -n -v' ftp_server '<' dsn
  145.                    INTO os_command SEPARATED BY space.
  146.  
  147.   CALL 'SYSTEM'
  148.    ID 'COMMAND'
  149.     FIELD os_command
  150.    ID 'TAB'
  151.     FIELD syscalltab-*sys*.
  152.  
  153.   MOVE syscalltab[] TO output[].
  154.  
  155. * temporäres File wieder löschen.
  156.   DELETE DATASET dsn.
  157.  
  158. * Ftp Rückmeldungen auswerten
  159. * 226 bedeutet File erfolgreich übertragen
  160.   LOOP AT syscalltab.
  161.     IF syscalltab+0&#40;3&#41; = '226'.
  162.       success_226 = 'X'.
  163.     ENDIF.
  164.  
  165.  
GeSHi ©
Yagmur4551
..
..
 
Posts: 12
Joined: Thu Apr 15, 2004 11:43 am

Re: ABAP - TIPP: Funktionsbaustein zum FTP Upload / Download

Postby Willy1492 » Fri Apr 16, 2004 7:20 pm

stele hat geschrieben:Diesee Funktionsbausteine können FTP Uploads und Downloads durchführen. Sie Nutzen die Funktion Betriebsystemkommandos auszuführen.

Setzen Sie SAP auf anderen Betriebsystemem müssen Sie den Systemcommand evlt. noch etwas anpassen.

Das ist nur eins der Probleme, s. auch meine Antwort zu Deinem anderen Tipp:
http://www.abapforum.com/forum/viewtopi ... =5152#5152

Warum wird dann überhaupt CALL 'SYSTEM' benutzt?

Außerdem:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. FUNCTION Z_ftp_upload.
  2. *"----------------------------------------------------------------------
  3. *"*"Lokale Schnittstelle:
  4. *"  IMPORTING
  5. *"     REFERENCE&#40;SRC_FILE&#41;
  6. *"     REFERENCE&#40;DEST_FILE&#41;
  7. *"     REFERENCE&#40;FTP_SERVER&#41;
  8. *"     REFERENCE&#40;FTP_USER&#41;
  9. *"     REFERENCE&#40;FTP_PASSWD&#41;
  10. *"     REFERENCE&#40;FLAG_BINARY&#41; OPTIONAL
  11. *"  EXPORTING
  12. *"     REFERENCE&#40;SUCCESS_226&#41;
  13. *"  TABLES
  14. *"      OUTPUT
  15. *"  EXCEPTIONS
  16. *"      COULD_NOT_OPEN_COMMANDFILE
  17. *"----------------------------------------------------------------------
  18.  
  19. *-----------------------------------------------------------------------
  20. * DATENDEFINITION
  21. *-----------------------------------------------------------------------
  22.   DATA: uuid  LIKE  sysuuid-c.
  23.   DATA: dsn TYPE string.
  24.   DATA: fl TYPE string.
  25.   DATA: os_command&#40;500&#41;.
  26.   DATA: BEGIN OF syscalltab OCCURS 0,
  27.            line&#40;200&#41;,
  28.         END OF syscalltab.
  29.  
  30. *Temporärer Dateiname ermitteln.
  31.   " 1. UUID erstellen
  32.   CALL FUNCTION 'SYSTEM_UUID_C_CREATE'
  33.        IMPORTING
  34.             uuid = uuid.
  35.  
  36.   CONCATENATE '/tmp/ftp_' uuid INTO dsn.
  37.  
  38. * FTP Kommandofile schreiben
  39.   OPEN DATASET dsn FOR OUTPUT IN TEXT MODE.
GeSHi ©

Hier fehlt eine Berechtigungsprüfung vor OPEN DATASET, bei fehlender Berechtigung gibt es sonst einen Dump.
(Ich gehe mal davon aus, dass OS-User <sid>adm auf Unix-Systemen ins Verzeichnis /tmp/ schreiben darf, dass das Verzeichnis nicht voll ist, und dass /tmp nicht read-only gemounted ist. Das ist bei anderen Verzeichnissen auch nicht unbedingt gegeben.)
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.   IF sy-subrc NE 0. RAISE could_not_open_commandfile. ENDIF.
  2.  
  3.   CONCATENATE 'user' ftp_user ftp_passwd
  4.                INTO fl SEPARATED BY space.
  5.   TRANSFER fl TO dsn.
GeSHi ©

Ob das so eine gute Idee ist, dass Password im Klartext auf die Festplatte zu schreiben?
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1.   IF flag_binary NE space.
  2.     TRANSFER 'binary' TO dsn.
  3.   ENDIF.
  4.  
  5.   CONCATENATE 'put' src_file dest_file INTO fl SEPARATED BY space.
GeSHi ©

Spitzfindig: Was ist, wenn einer der beiden Dateinamen ein Leerzeichen enthält?
Willy1492
....
....
 
Posts: 581
Joined: Tue Dec 03, 2002 4:44 pm

FTP

Postby gast » Mon Oct 25, 2004 10:13 am

Bei mir klappts nicht mit dem put oder get alle anderen befehle 'pwd' etc. macht er auch den 'bye' aber den put ignoriert er.
An was könnte das liegen ?

Merci
gast
 

Postby Alva1590 » Wed Nov 17, 2004 12:04 pm

@Frank Dittrich.

ich denke stele wollte keine kochbuchanleitung, sondern nur einen tipp geben bzw. einen anstoss.
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Alva1590 » Mon Apr 04, 2005 11:28 am

Diesee Funktionsbausteine können FTP Uploads und Downloads durchführen. Sie Nutzen die Funktion Betriebsystemkommandos auszuführen.


Für FTP gibt es von SAP aus eine weit bessere Möglichkeiten mittels RFC-Aufrufen. Und das für Präsentations- und Applicationserver.

Demo Programme:
RSFTP001
RSFTP002
RSFTP003
RSFTP004
RSFTP005
RSFTP006

Funktionsgruppe: SFTP

Funktionsbausteine:
FTP_COMMAND FTP Kommando ausführen
FTP_COMMAND_LIST Liste von FTP Kommandos ausführen
FTP_CONNECT Connect zum FTP Server
FTP_DISCONNECT Disconnect vom FTP Server

Um diese Funktionsbausteine zu benutzen müssen die RFC-Verbindungen
SAPFTP (Präsentationserver)
SAPFTPA (Applikationserver)
gepflegt sein. Dies kann mittels RSFTP005 geprüft werden.
Die RFC-Verbindung kann mittels SM59 unter TCP/IP-Verbindung gepflegt werden. Das zurufende Programm heißt SAPftp.



Gruß Hendrik
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm


Return to Tips + Tricks & FAQs

Who is online

Users browsing this forum: Google [Bot] and 15 guests

cron