Es gibt mehrere Möglichkeiten, Dateien zu verschieben auf dem SAP-Applikationsserver mit ABAP. Hier zeige ich Dir, welche Möglichkeiten es mit ABAP gibt, Dateien auf dem Applikationsserver (Transaktionscode AL11) zu verschieben.
Funktionsbaustein ARCHIVFILE_SERVER_TO_SERVER
Mit dem Funktionsbaustein ARCHIVFILE_SERVER_TO_SERVER kann man einfach Dateien von einem Quell- in ein Zielpfad kopieren.
Damit Dateien auf dem SAP-Applikationsserver tatsächlich verschoben werden, muss man die „alte“ Datei in dem Quellverzeichnis nach dem Kopieren löschen. Hierfür eignet sich „DELETE DATASET <Pfad>“
*---------------------------------------------------------------------- * Datendeklaration *---------------------------------------------------------------------- DATA: lv_source_path TYPE saepfad, lv_target_path TYPE saepfad. CALL FUNCTION 'ARCHIVFILE_SERVER_TO_SERVER' EXPORTING sourcepath = lv_source_path targetpath = lv_target_path * IMPORTING * LENGTH = * EXCEPTIONS * ERROR_FILE = 1 * NO_AUTHORIZATION = 2 * OTHERS = 3 . *---------------------------------------------------------------------- * Alte Datei im Source löschen *---------------------------------------------------------------------- DELETE DATASET lv_source_path.
Die Dateipfade (sourcepath und targetpath) müssen dabei logische Dateipfade sein. Hierfür öffnet man die Transaktion FILE und legt die entsprechenden Dateipfade an. In diesem Artikel ist es im Detail erklärt wie man logische Dateipfade erstellen kann.
In der Transaktion AL11 kann man einfach und schnell die Ergebnisse beurteilen. Zum Testen für das Kopieren kann man den Funktionsbaustein auch im Function Builder (Transaktion SE37) einmal testen bevor man ihn direkt im ABAP-Coding verwendet.
DATASET und TRANSFER
Diese Methodik kann bei großen Dateien mehr Zeit in Anspruch nehmen als mit dem Standard-Funktionsbaustein ARCHIVFILE_SERVER_TO_SERVER, ist aber dennoch eine gute Möglichkeit, um Dateien in SAP ERP zu verschieben.
*---------------------------------------------------------------------- * PARAMETERS *---------------------------------------------------------------------- PARAMETERS: p_dir_s TYPE c LENGTH 50, " Quellverzeichnis p_dir_t TYPE c LENGTH 50, " Zielverzeichnis p_file TYPE c OBLIGATORY LOWER CASE LENGTH 50. "Datei *---------------------------------------------------------------------- * Datendeklaration *---------------------------------------------------------------------- DATA: l_oldfile TYPE localfile, l_newfile TYPE localfile, l_newline TYPE c length 250. "Eine Zeile hat maximal 250 Zeichen *---------------------------------------------------------------------- * Komplette Verzeichnisse bilden *---------------------------------------------------------------------- CONCATENATE p_dir_s p_file INTO l_oldfile. CONCATENATE p_dir_t p_file INTO l_newfile. *---------------------------------------------------------------------- * Dateien mit DATASET öffnen *---------------------------------------------------------------------- OPEN DATASET l_oldfile FOR INPUT IN BINARY MODE. IF sy-subrc = 0. OPEN DATASET l_newfile FOR OUTPUT IN BINARY MODE. IF sy-subrc EQ 0. " Erfolg DO. READ DATASET l_oldfile INTO l_newline. IF sy-subrc EQ 0. *---------------------------------------------------------------------- * Inhalt kopieren *---------------------------------------------------------------------- TRANSFER l_newline TO l_newfile. ELSE. IF l_newline IS NOT INITIAL. TRANSFER l_newline TO l_newfile. ENDIF. EXIT. ENDIF. ENDDO. ENDIF. *---------------------------------------------------------------------- * Kopierte Datei schließen *---------------------------------------------------------------------- CLOSE DATASET l_newfile. ELSE. "Fehler ENDIF. *---------------------------------------------------------------------- * Alte Datei schließen *---------------------------------------------------------------------- CLOSE DATASET l_oldfile. *---------------------------------------------------------------------- * Alte Datei löschen *---------------------------------------------------------------------- DELETE DATASET l_oldfile.
In diesem Beispiel ist eine Zeile auf maximal 250 Zeichen beschränkt. Das kann man natürlich individuell verändern.
Externes Betriebssystemkommando – Transaktion SM49
Zusätzlich kann man mit einem externen Betriebssystemkommando ebenfalls Dateien auf dem SAP-Applikationsserver verschieben. Das erstellte Kommando kann man mit der Funktion SXPG_COMMAND_EXECUTE aufrufen.
Zuvor muss man dafür natürlich das Kommando in der Transaktion SM49 erstellen.
*---------------------------------------------------------------------- * Parameter *---------------------------------------------------------------------- PARAMETERS: p_source TYPE sapb-sappfad, p_target TYPE sapb-sappfad. *---------------------------------------------------------------------- * Datendeklaration *---------------------------------------------------------------------- DATA: lv_parameter TYPE btcxpgpar, lv_stat TYPE c LENGTH 1. *---------------------------------------------------------------------- * Zusätzlichen Parameter in Variable speichern *---------------------------------------------------------------------- CONCATENATE p_source p_target INTO lv_parameter SEPARATED BY space. *---------------------------------------------------------------------- * Kommando aufrufen (Z_MOVE_FILE in Transaktion SM49 definieren) *---------------------------------------------------------------------- CALL FUNCTION 'sxpg_command_execute' EXPORTING commandname = 'Z_MOVE_FILE' additional_parameters = lv_parameter IMPORTING status = lv_stat. IF sy-subrc <> 0. "Fehler ELSE. IF lv_stat = 'o'. "Erfolg ENDIF. ENDIF.
Direkter Kommando-Aufruf
Eine weitere und sehr einfache Möglichkeit, Dateien in SAP ERP zu verschieben, ist es ‚SYSTEM‘ mit der ID ‚COMMAND‘ aufzurufen. Abhängig vom Betriebssystem des SAP-Applikationsservers muss man natürlich andere Befehle verwenden.
*---------------------------------------------------------------------- * Parameter *---------------------------------------------------------------------- PARAMETERS: p_source TYPE string, p_target TYPE string. *---------------------------------------------------------------------- * Datendeklaration *---------------------------------------------------------------------- DATA: lv_command TYPE c LENGTH 1000. *---------------------------------------------------------------------- * Kommandobefehl *---------------------------------------------------------------------- CONCATENATE 'mv' p_source p_target INTO lv_command SEPARATED BY space. *---------------------------------------------------------------------- * Kommando aufrufen *---------------------------------------------------------------------- CALL 'SYSTEM' ID 'COMMAND' FIELD lv_command.
Über den Autor
Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.
ERP UP unterstützen
Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.
Hallo Andreas,
sehr hilfreiche Seite echt schön gemacht.
DANKE
VG
Jürgen
Hallo Jürgen,
vielen Dank für Deinen Kommentar. Das freut mich sehr.
VG
Andreas