ABAP - TIPP: Funktionsbaustein zum FTP Upload / Download

Hinweise, Tips und Tricks, FAQs - keine Anfragen!!
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

ABAP - TIPP: Funktionsbaustein zum FTP Upload / Download

Beitrag von stele (ForumUser / 12 / 0 / 0 ) »
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: Alles auswählen.

FUNCTION Z_ftp_upload.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     REFERENCE(SRC_FILE)
*"     REFERENCE(DEST_FILE)
*"     REFERENCE(FTP_SERVER)
*"     REFERENCE(FTP_USER)
*"     REFERENCE(FTP_PASSWD)
*"     REFERENCE(FLAG_BINARY) OPTIONAL
*"  EXPORTING
*"     REFERENCE(SUCCESS_226)
*"  TABLES
*"      OUTPUT
*"  EXCEPTIONS
*"      COULD_NOT_OPEN_COMMANDFILE
*"----------------------------------------------------------------------

*-----------------------------------------------------------------------
* DATENDEFINITION
*-----------------------------------------------------------------------
  DATA: uuid  LIKE  sysuuid-c.
  DATA: dsn TYPE string.
  DATA: fl TYPE string.
  DATA: os_command(500).
  DATA: BEGIN OF syscalltab OCCURS 0,
           line(200),
        END OF syscalltab.

*Temporärer Dateiname ermitteln.
  " 1. UUID erstellen
  CALL FUNCTION 'SYSTEM_UUID_C_CREATE'
       IMPORTING
            uuid = uuid.

  CONCATENATE '/tmp/ftp_' uuid INTO dsn.

* FTP Kommandofile schreiben
  OPEN DATASET dsn FOR OUTPUT IN TEXT MODE.
  IF sy-subrc NE 0. RAISE could_not_open_commandfile. ENDIF.

  CONCATENATE 'user' ftp_user ftp_passwd
               INTO fl SEPARATED BY space.
  TRANSFER fl TO dsn.

  IF flag_binary NE space.
    TRANSFER 'binary' TO dsn.
  ENDIF.

  CONCATENATE 'put' src_file dest_file INTO fl SEPARATED BY space.
  TRANSFER fl TO dsn.

  TRANSFER 'bye' TO dsn.

  CLOSE DATASET dsn.


* Betriebssystemkommando erstellen.
  CONCATENATE 'ftp -n -v' ftp_server '<' dsn
                   INTO os_command SEPARATED BY space.

  CALL 'SYSTEM'
   ID 'COMMAND'
    FIELD os_command
   ID 'TAB'
    FIELD syscalltab-*sys*.

  MOVE syscalltab[] TO output[].

* temporäres File wieder löschen.
  DELETE DATASET dsn.

* FTP Rückmeldungen auswerten
* 226 bedeutet File erfolgreich übertragen
  LOOP AT syscalltab.
    IF syscalltab+0(3) = '226'.
      success_226 = 'X'.
    ENDIF.
  ENDLOOP.

ENDFUNCTION.


*-----------------------------------------------------------



FUNCTION Z_FTP_DOWNLOAD.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"       IMPORTING
*"             REFERENCE(SRC_FILE)
*"             REFERENCE(DEST_FILE)
*"             REFERENCE(FTP_SERVER)
*"             REFERENCE(FTP_USER)
*"             REFERENCE(FTP_PASSWD)
*"             REFERENCE(FLAG_BINARY) OPTIONAL
*"       EXPORTING
*"             REFERENCE(SUCCESS_226)
*"       TABLES
*"              OUTPUT
*"       EXCEPTIONS
*"              COULD_NOT_OPEN_COMMANDFILE
*"----------------------------------------------------------------------

*-----------------------------------------------------------------------
* DATENDEFINITION
*-----------------------------------------------------------------------
  DATA: uuid  LIKE  sysuuid-c.
  DATA: dsn TYPE string.
  DATA: fl TYPE string.
  DATA: os_command(500).
  DATA: BEGIN OF syscalltab OCCURS 0,
           line(200),
        END OF syscalltab.

* Temporären Dateiname ermitteln.
  " UUID erstellen 
  CALL FUNCTION 'SYSTEM_UUID_C_CREATE'
       IMPORTING
            uuid = uuid.

  CONCATENATE '/tmp/ftp_' uuid INTO dsn.

* FTP Kommandofile schreiben
  OPEN DATASET dsn FOR OUTPUT IN TEXT MODE.
  IF sy-subrc NE 0. RAISE could_not_open_commandfile. ENDIF.

  CONCATENATE 'user' ftp_user ftp_passwd
               INTO fl SEPARATED BY space.
  TRANSFER fl TO dsn.

  IF flag_binary NE space.
    TRANSFER 'binary' TO dsn.
  ENDIF.

  CONCATENATE 'put' src_file dest_file INTO fl SEPARATED BY space.
  TRANSFER fl TO dsn.

  TRANSFER 'bye' TO dsn.

  CLOSE DATASET dsn.


* Betriebssystemkommando erstellen.
  CONCATENATE 'ftp -n -v' ftp_server '<' dsn
                   INTO os_command SEPARATED BY space.

  CALL 'SYSTEM'
   ID 'COMMAND'
    FIELD os_command
   ID 'TAB'
    FIELD syscalltab-*sys*.

  MOVE syscalltab[] TO output[].

* temporäres File wieder löschen.
  DELETE DATASET dsn.

* Ftp Rückmeldungen auswerten
* 226 bedeutet File erfolgreich übertragen
  LOOP AT syscalltab.
    IF syscalltab+0(3) = '226'.
      success_226 = 'X'.
    ENDIF.
  ENDLOOP.

ENDFUNCTION.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


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

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
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: Alles auswählen.

FUNCTION Z_ftp_upload.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     REFERENCE(SRC_FILE)
*"     REFERENCE(DEST_FILE)
*"     REFERENCE(FTP_SERVER)
*"     REFERENCE(FTP_USER)
*"     REFERENCE(FTP_PASSWD)
*"     REFERENCE(FLAG_BINARY) OPTIONAL
*"  EXPORTING
*"     REFERENCE(SUCCESS_226)
*"  TABLES
*"      OUTPUT
*"  EXCEPTIONS
*"      COULD_NOT_OPEN_COMMANDFILE
*"----------------------------------------------------------------------

*-----------------------------------------------------------------------
* DATENDEFINITION
*-----------------------------------------------------------------------
  DATA: uuid  LIKE  sysuuid-c.
  DATA: dsn TYPE string.
  DATA: fl TYPE string.
  DATA: os_command(500).
  DATA: BEGIN OF syscalltab OCCURS 0,
           line(200),
        END OF syscalltab.

*Temporärer Dateiname ermitteln.
  " 1. UUID erstellen
  CALL FUNCTION 'SYSTEM_UUID_C_CREATE'
       IMPORTING
            uuid = uuid.

  CONCATENATE '/tmp/ftp_' uuid INTO dsn.

* FTP Kommandofile schreiben
  OPEN DATASET dsn FOR OUTPUT IN TEXT MODE.
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: Alles auswählen.

  IF sy-subrc NE 0. RAISE could_not_open_commandfile. ENDIF.

  CONCATENATE 'user' ftp_user ftp_passwd
               INTO fl SEPARATED BY space.
  TRANSFER fl TO dsn.
Ob das so eine gute Idee ist, dass Password im Klartext auf die Festplatte zu schreiben?

Code: Alles auswählen.

  IF flag_binary NE space.
    TRANSFER 'binary' TO dsn.
  ENDIF.

  CONCATENATE 'put' src_file dest_file INTO fl SEPARATED BY space.
Spitzfindig: Was ist, wenn einer der beiden Dateinamen ein Leerzeichen enthält?

FTP

Beitrag von gast ( / / 0 / 3 ) »
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

Beitrag von Gast ( / / 0 / 3 ) »
@Frank Dittrich.

ich denke stele wollte keine kochbuchanleitung, sondern nur einen tipp geben bzw. einen anstoss.

Beitrag von Gast ( / / 0 / 3 ) »
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

Seite 1 von 1

Vergleichbare Themen

4
Antw.
5105
Views
Download und Upload von ABAP-Anwendungen
von schwar01 » 02.01.2007 10:20 • Verfasst in Basis
2
Antw.
12857
Views
Upload/Download
von alex1986 » 27.02.2012 14:53 • Verfasst in ABAP® für Anfänger
2
Antw.
10020
Views
XML Download und Upload
von Alpha » 12.11.2008 13:53 • Verfasst in ABAP Objects®
2
Antw.
35907
Views
Upload Download Excel
von PeterPaletti » 15.09.2025 10:20 • Verfasst in ABAP® für Anfänger
2
Antw.
2348
Views
Tool zum Upload/Download von Objekten
von SkyHobbit » 01.11.2007 08:08 • Verfasst in ABAP® Core

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

SFP/SEGW - Fehler beim Rendering
vor 6 Stunden von Manfred K. 1 / 39
Pflegeview zeigt nicht alle Daten an
Gestern von sapdepp gelöst 7 / 417
ALV Grid und Dynprofeld
vor 2 Tagen von PeterPaletti 5 / 460

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

SFP/SEGW - Fehler beim Rendering
vor 6 Stunden von Manfred K. 1 / 39
Pflegeview zeigt nicht alle Daten an
Gestern von sapdepp gelöst 7 / 417
ALV Grid und Dynprofeld
vor 2 Tagen von PeterPaletti 5 / 460

Unbeantwortete Forenbeiträge

SFP/SEGW - Fehler beim Rendering
vor 6 Stunden von Manfred K. 1 / 39
Benutzerdefinierte Felder PSP
letzen Monat von Rabea1103 1 / 50711
Spool vereinen OTF und PDF
letzen Monat von anna2205 1 / 66968
XSLT und Loipro05 Transformation
December 2025 von Torsten1965 1 / 78712