*---------------------------------------------------------------------*
* Z _ B J H _ F T P _ C O N N E C T *
* *
* Autor: Bernd Haase (BJH Software) *
*---------------------------------------------------------------------*
* Aktion eines FTP-Transfer. Das Programm beinhaltet die Möglichkeit *
* des Datenaustausches zwischen 2 Systemes, wobei eine korrekte *
* Anmeldung im Zielsystem geschehen soll (im hiesigen Fall Vorbelegung*
* für Anmeldung im PC-Netzwerk). Im Quellsystem (SAP Basis Anwendung) *
* braucht nur der Pfad definiert sein. Der Mandant wird automatisch *
* eingepflegt. Danach erfolgt die Befehlsfolge, hier nur das Verschie-*
* ben von Daten. Am Ende wird die Protokolltabelle am Bildschirm *
* angeziegt, welche den Verlauf der Aktionen wiederspiegelt. *
*---------------------------------------------------------------------*
* 18.11.2003 BHaa: Programm erstellt *
*---------------------------------------------------------------------*
REPORT z_bjh_ftp_connect .
INCLUDE .
DATA:
zw_text LIKE btcxpm-message,
hdl TYPE i,
key TYPE i VALUE 26101957,
wa_z_pin_len TYPE i,
wa_sysid_len TYPE i,
* Zwischendateien, da Parameter generell alles in Großbuchstaben
* ablegen, sofern sie nicht besser spezifiert sind
wa_ziel_user(64) TYPE c,
wa_ziel_pin(64) TYPE c,
wa_ziel_pfad(80) TYPE c,
wa_quell_pfad(80) TYPE c,
wa_command1(80) TYPE c,
wa_command2(80) TYPE c,
wa_data(80) TYPE c.
* interne Protokolltabelle
DATA: BEGIN OF itab_protokoll OCCURS 0.
INCLUDE STRUCTURE btcxpm.
DATA: END OF itab_protokoll.
*---------------------------------------------------------------------*
* *
* A u s w a h l b i l d s c h i r m *
* *
*---------------------------------------------------------------------*
* Angaben Ziellaufwerk (PC-/Netzwerk-Rechner)
SELECTION-SCREEN: BEGIN OF BLOCK ziel WITH FRAME TITLE text-901.
PARAMETERS:
* User / Kennung im Netzwerk
pmz_user(64) TYPE c,
* Passwort für Anmeldung im Netzwerk
pmz_pin(64) TYPE c,
* IP Adresse Netzwerk Rechner
pmz_ip(80) TYPE c,
* Pfad im Netzwerk (komplett). Ausgangspfad (komplette Struktur)
pmz_pfad(80) TYPE c.
SELECTION-SCREEN: END OF BLOCK ziel.
* Angaben Quellsystem (UNIX-/Linux-System, SAP Basis)
SELECTION-SCREEN: BEGIN OF BLOCK quell WITH FRAME TITLE text-902.
PARAMETERS:
* Ziellaufwerk auf der Unix-Maschine
pmq_pfad(80) TYPE c DEFAULT 'lcd /usr/sap/xxx/ftphost/'.
SELECTION-SCREEN: END OF BLOCK quell.
* Parameter für Befehlfolge
SELECTION-SCREEN: BEGIN OF BLOCK befehl WITH FRAME TITLE text-903.
PARAMETERS:
* 1. Befehl
pm_comm1 TYPE char80 DEFAULT 'binary',
* 2. Befehl
pm_comm2 TYPE char80 DEFAULT '',
* get / put Befehl + Datei
* Testfall: get Dateiname (holen einer Datei von PC auf Unix)
pm_data TYPE char80 DEFAULT 'get datei',
* RFC Destination
pm_dest TYPE rfcdest DEFAULT 'SAPFTPA',
* Compress Parameter
pm_comp TYPE char01 DEFAULT 'N'.
SELECTION-SCREEN: END OF BLOCK befehl.
* Zielrechnerdaten belegen
INITIALIZATION.
MOVE '.rrftp1.users.sonstige.bmksound.de' TO pmz_user.
MOVE 'rrftp1' TO pmz_pin.
MOVE '179.29.5.8' TO pmz_ip.
MOVE 'cd \data\data\sap\ftptransfer\input\bjh_get' TO pmz_pfad.
***********************************************************************
* *
* P R O G R A M M S T A R T *
* *
***********************************************************************
START-OF-SELECTION.
* umwandeln der Großbuchstaben (Parameter-Deklaration !!!) in
* Kleinbuchstaben, so Unix-Systeme darauf unterscheiden
MOVE pmz_user TO wa_ziel_user.
TRANSLATE wa_ziel_user TO LOWER CASE.
MOVE pmz_pin TO wa_ziel_pin.
TRANSLATE wa_ziel_user TO LOWER CASE.
MOVE pmz_pfad TO wa_ziel_pfad.
TRANSLATE wa_ziel_pfad TO LOWER CASE.
* Mandanten einpflegen, in den Parameters in nur ein Platzhalter
MOVE pmq_pfad TO wa_quell_pfad.
TRANSLATE wa_quell_pfad TO LOWER CASE.
wa_sysid_len = strlen( sy-sysid ).
REPLACE 'xxx' WITH sy-sysid(wa_sysid_len) INTO wa_quell_pfad.
MOVE pm_comm1 TO wa_command1.
TRANSLATE wa_command1 TO LOWER CASE.
MOVE pm_comm2 TO wa_command1.
TRANSLATE wa_command2 TO LOWER CASE.
MOVE pm_data TO wa_data.
TRANSLATE wa_data TO LOWER CASE.
* Passwort verschüsseln
DESCRIBE FIELD wa_ziel_pin LENGTH wa_z_pin_len.
CALL 'AB_RFC_X_SCRAMBLE_STRING'
ID 'SOURCE' FIELD wa_ziel_pin
ID 'KEY' FIELD key
ID 'SCR' FIELD 'X'
ID 'DESTINATION' FIELD wa_ziel_pin
ID 'DSTLEN' FIELD wa_z_pin_len.
* Connect zum PC (Zielsystem) herstellen
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
user = wa_ziel_user
password = wa_ziel_pin
host = pmz_ip
rfc_destination = pm_dest
IMPORTING
handle = hdl.
* init protokolltabelle
CLEAR itab_protokoll. REFRESH itab_protokoll. FREE itab_protokoll.
* Befehlsfolge abarbeiten.
PERFORM upro_ftp_command
TABLES itab_protokoll
USING hdl
wa_ziel_pfad
pm_comp
'Kein Umschalten auf PC-Pfad.'.
PERFORM upro_ftp_command
TABLES itab_protokoll
USING hdl
wa_quell_pfad
' '
'Kein Umschalten auf UNIX-Pfad.'.
CONCATENATE wa_command1 'nicht erfolgreich.' INTO zw_text.
PERFORM upro_ftp_command
TABLES itab_protokoll
USING hdl
wa_command1
' '
zw_text.
CONCATENATE wa_command2 'nicht erfolgreich.' INTO zw_text.
PERFORM upro_ftp_command
TABLES itab_protokoll
USING hdl
wa_command2
' '
zw_text.
* Daten holen vom Zielsystem (get-Befehl)
* oder dorthin schieben (put-Befehl)
PERFORM upro_ftp_command
TABLES itab_protokoll
USING hdl
wa_data
' '
'keine Daten übertragen.'.
* Daten verschoben, hier auch einen Satz in die Tabelle bei
* erfolgreicher Aktion einfügen
IF sy-subrc = 0.
CLEAR itab_protokoll.
MOVE '+++' TO itab_protokoll-length.
MOVE 'Daten erfolgreich verschoben.' TO itab_protokoll-message.
APPEND itab_protokoll.
ENDIF.
* Verbindung trennen
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
handle = hdl.
* Tabelle mit Verarbeitungsprozessen anzeigen
* bei Spezialcode (--- oder +++) zusätzlich Anzeige einer Ampel
LOOP AT itab_protokoll.
CASE itab_protokoll-length.
WHEN '---'.
WRITE: / icon_remove_from_selection, itab_protokoll-message.
WHEN '+++'.
WRITE: / icon_include_in_selection, itab_protokoll-message.
WHEN OTHERS.
WRITE: / itab_protokoll.
ENDCASE.
ENDLOOP.
END-OF-SELECTION.
EXIT.
*---------------------------------------------------------------------*
* F T P _ C O M M A N D *
*---------------------------------------------------------------------*
* Ausführen des FTP-Commands. Befehlsparameter werden mitgegeben, *
* somit ist dieses Unterprogramm universell einsetzbar. Sollte der *
* Funktionsbaustein nicht erfolgreich abgeschlossen werden, so wird *
* die Protokolltabelle um einen Eintrag erweitert, falls ein Text *
* mitgegeben wurde. *
*---------------------------------------------------------------------*
* <=> p_result (TABELLE): Protokolltabelle für alle Aktionen *
* =>] p_hdl: Handle (Fixer Parameter, wurde beim Connect ermittelt) *
* =>] p_command: auszuführender Befehl *
* =>] p_compress: Compressgrad *
* =>] p_fehler_text: wenn Aktion nicht erfolgreich, Text für Tabelle *
*---------------------------------------------------------------------*
FORM upro_ftp_command
TABLES p_result STRUCTURE btcxpm
USING p_hdl
p_command
p_compress
p_fehler_text.
* nur Aktion, wenn Commandline (Befehl) vorhanden ist
CHECK: p_command > space.
* FTP-Befehl ausführen
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = p_hdl
command = p_command
compress = p_compress
TABLES
data = p_result
EXCEPTIONS
command_error = 1
tcpip_error = 2.
* Fehler beim Aufruf Funktionsbaustein. '---' steht für fehlerhaft, da
* sonst keine eindeutige Codierung für Fehler oder Warnungen existiert.
IF sy-subrc <> 0
AND p_fehler_text > ' X'.
CLEAR p_result.
MOVE '---' TO p_result-length.
MOVE p_fehler_text TO p_result-message.
APPEND p_result.
ENDIF.
ENDFORM.
***** E n d e *****
* Copyright BJH Software, Datei überarbeitet am: 26.5.2005