Dateien verschieben – SAP-Applikationsserver

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

Schön, dass Du Dich für SAP ERP interessierst.

Mein Name ist Andreas Geiger und ich bin der Gründer von ERP-UP.de. Mein Ziel ist es, so viel nützliches Wissen wie möglich über das SAP ERP-System zu vermitteln. Ich möchte Dir damit einen Mehrwert bieten. Es freut mich, wenn ich Dir damit helfen kann.

Mehr zu ERP UP

Schreibe einen Kommentar