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.
3552
Views
Download und Upload von ABAP-Anwendungen
von schwar01 » 02.01.2007 10:20 • Verfasst in Basis
2
Antw.
8522
Views
XML Download und Upload
von Alpha » 12.11.2008 13:53 • Verfasst in ABAP Objects®
2
Antw.
1449
Views
Upload/Download
von alex1986 » 27.02.2012 14:53 • Verfasst in ABAP® für Anfänger
3
Antw.
4321
Views
Download-Upload-Tool
von quercus » 16.02.2006 13:12 • Verfasst in ABAP® Core
2
Antw.
1762
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

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.