REPORT zftptrasfr
NO STANDARD PAGE HEADING LINE-SIZE 255.
T Y P E S
TYPES:
BEGIN OF x_cmdout,
line(100) TYPE c,
END OF x_cmdout.
TYPE-POOLS : slis.
D A T A
data specifications of FTP server
Handler and Key
DATA: w_cmd(40) TYPE c,
w_hdl TYPE i,
w_logid TYPE zda_log_ipl VALUE 1,
w_key TYPE i VALUE 26101957,
w_slen TYPE i,
wa_iplftp TYPE ztbl_ipl_ftp,
it_iplftp TYPE STANDARD TABLE OF ztbl_ipl_ftp,
wa_cmdout TYPE x_cmdout,
it_cmdout TYPE STANDARD TABLE OF x_cmdout.
Constant declarations
CONSTANTS: c_dest TYPE rfcdes-rfcdest VALUE 'SAPFTPA',
c_host(11) TYPE c VALUE '172.XX.X.XX',
c_ftp(6) TYPE c VALUE 'FTPDIRECTORY',
c_sap(16) TYPE c VALUE '/sap/inbound/SAPDIRECTORY'.
P A R A M E T E R S
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_user(30) TYPE c LOWER CASE ,
p_pwd(30) TYPE c LOWER CASE ,
p_host(64) TYPE c LOWER CASE DEFAULT c_host ,
p_edi TYPE zedi, " 5-character domain containing EDI profiles
p_ftp TYPE e_dexcommfilepath LOWER CASE DEFAULT c_ftp,
p_sap TYPE esefilepath LOWER CASE DEFAULT c_sap.
SELECTION-SCREEN END OF BLOCK b1.
************************************************************************
*AT SELECTION SCREEN Events
************************************************************************
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
CASE screen-name.
WHEN 'P_PWD'."Set the password field as invisible
screen-invisible = '1'.
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
S T A R T - O F - S E L E C T I O N
START-OF-SELECTION.
Connect to the FTP server.
PERFORM ftp_connect.
Find all files in the directory and store inside the Log table
PERFORM log_files.
Check for transfer of files to FTP.
IF it_iplftp[] IS INITIAL.
MESSAGE text-003 TYPE 'I'.
LEAVE LIST-PROCESSING.
ENDIF.
Change the local save directory and download to SAP application server.
PERFORM move_files.
Close the connection
PERFORM close_ftp.
END-OF-SELECTION
END-OF-SELECTION.
Display report.
PERFORM disp_res.
&---------------------------------------------------------------------
& Form FTP_CONNECT
&---------------------------------------------------------------------
Make a connection to the FTP server
----------------------------------------------------------------------
FORM ftp_connect .
SET EXTENDED CHECK OFF.
w_slen = strlen( p_pwd ).
CALL FUNCTION 'HTTP_SCRAMBLE'
EXPORTING
source = p_pwd
sourcelen = w_slen
key = w_key
IMPORTING
destination = p_pwd.
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
user = p_user
password = p_pwd
host = p_host
rfc_destination = c_dest
IMPORTING
handle = w_hdl
EXCEPTIONS
not_connected = 1
OTHERS = 2.
IF sy-subrc <> 0.
Message will arise in case of any issues in connecting to the FTP server.
MESSAGE text-e01 TYPE 'I'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " FTP_CONNECT
*&---------------------------------------------------------------------
*& Form LOG_FILES
*&---------------------------------------------------------------------
*find all the files in the home directory
*----------------------------------------------------------------------
FORM log_files .
*Change directory to the FTP directory for LUPIN
CONCATENATE 'cd' p_ftp INTO w_cmd SEPARATED BY space.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = w_hdl
command = w_cmd
compress = 'N'
TABLES
data = it_cmdout
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
REFRESH it_cmdout.
CLEAR w_cmd.
w_cmd = 'ls'.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = w_hdl
command = w_cmd
compress = 'N'
TABLES
data = it_cmdout
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*All customized checks for file to be placed here.
LOOP AT it_cmdout INTO wa_cmdout FROM 4.
*Check the command line for a file
CHECK wa_cmdout-line+68(4) EQ '.txt'.
*Move all the files to the FTP table
wa_iplftp-file_nm = wa_cmdout-line+39(33).
wa_iplftp-log_id = w_logid.
*Currently the transfer date/time will be taken
wa_iplftp-fdate = sy-datum."WA_CMDOUT-LINE+39(8).
wa_iplftp-ftime = sy-uzeit."WA_CMDOUT-LINE+48(6).
wa_iplftp-ernam = sy-uname.
APPEND wa_iplftp TO it_iplftp.
ENDLOOP.
REFRESH it_cmdout.
ENDFORM. " LOG_FILES
&---------------------------------------------------------------------
& Form MOVE_FILES
&---------------------------------------------------------------------
FORM move_files .
DATA : l_indx TYPE i.
CLEAR w_cmd.
CONCATENATE 'lcd' p_sap INTO w_cmd SEPARATED BY space.
Change the local directory to the sap inbound directory
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = w_hdl
command = w_cmd
compress = 'N'
TABLES
data = it_cmdout
EXCEPTIONS
command_error = 1
tcpip_error = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
REFRESH it_cmdout.
Move each file from FTP to SAP inbound directory
LOOP AT it_iplftp INTO wa_iplftp WHERE stat EQ space OR
stat EQ 'CR'.
l_indx = sy-tabix.
CLEAR w_cmd.
REFRESH it_cmdout.
CONCATENATE 'get' wa_iplftp-file_nm INTO w_cmd SEPARATED BY space.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = w_hdl
command = w_cmd
compress = 'N'
TABLES
data = it_cmdout
EXCEPTIONS
command_error = 1
tcpip_error = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
READ TABLE it_cmdout INTO wa_cmdout INDEX 2.
IF sy-subrc EQ 0.
IF wa_cmdout-line CS 'command successful'.
wa_iplftp-stat = 'CR'.
wa_iplftp-mess = text-004.
ELSE.
wa_iplftp-stat = 'EF'.
wa_iplftp-mess = text-005.
ENDIF.
ENDIF.
MODIFY it_iplftp FROM wa_iplftp INDEX l_indx.
delete from FTP
CLEAR w_cmd.
CONCATENATE 'delete' wa_iplftp-file_nm INTO w_cmd SEPARATED BY space.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = w_hdl
command = w_cmd
compress = 'N'
TABLES
data = it_cmdout
EXCEPTIONS
command_error = 1
tcpip_error = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDLOOP.
Insert all table entries.
INSERT ztbl_ipl_ftp FROM TABLE it_iplftp.
IF sy-subrc NE 0.
MESSAGE text-006 TYPE 'I'.
ENDIF.
ENDFORM. " MOVE_FILES
*&---------------------------------------------------------------------
*& Form CLOSE_FTP
*&---------------------------------------------------------------------
FORM close_ftp .
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
handle = w_hdl.
CALL FUNCTION 'RFC_CONNECTION_CLOSE'
EXPORTING
destination = c_dest
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " CLOSE_FTP
&---------------------------------------------------------------------
& Form DISP_RES
&---------------------------------------------------------------------
Display the output
----------------------------------------------------------------------
FORM disp_res .
DATA : l_layout TYPE slis_layout_alv.
l_layout-colwidth_optimize = 'X'.
Display table contents of updated files
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_structure_name = 'ZTBL_IPL_FTP'
is_layout = l_layout
TABLES
t_outtab = it_iplftp
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " DISP_RES
감사합니다.