ftp send & receive
TRANSCRIPT
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 1
ABAP Based Solution for FTP
Operations (Send/Receive Files)
Applies to:
SAP BI 7.0/BW 3.x. For more information, visit the Business Intelligence homepage.
Summary
In any IT infrastructure of a Company it is very common to have many servers supporting various applications. Therefore SAP BI being a consumer of data may have to maintain interface with many systems. In such cases sending or receiving files via FTP is a very common task.
In this article an ABAP based solution is presented to achieve this in hassle free manner.
Author: Hemant Kumar Vyas
Company: Infosys Technologies Limited
Created on: 13 December 2009
Author Bio
Hemant Kumar Vyas has been working for Infosys technologies limited for past 2.5 years and has experience in SAP BI 7.0 implementations.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 2
Table of Contents
Salient Features .................................................................................................................................................. 3
Steps to Create ............................................................................................................................................... 3
Create Structure ZZFILI .................................................................................................................................. 4
Creating Table Type Z_ZZFILI ........................................................................................................................ 7
Creating Function Module Z_GET_DIR_LIST ................................................................................................ 9 Source Code Function Module ................................................................................................................................... 13
Creating Program Z0I005........................................................................................................................................... 16
Creating Include Z0I005_TOP ................................................................................................................................... 17
Creating Include Z0I005_SELECTION ...................................................................................................................... 18
Creating Include Z0I005_FORMS .............................................................................................................................. 18
Some Points Regarding Codes .................................................................................................................................. 26
Creating Text Element and Selection Text Elements ................................................................................................. 28
Related Content ................................................................................................................................................ 31
Disclaimer and Liability Notice .......................................................................................................................... 32
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 3
Salient Features
Following are some salient points regarding
Program will be reusable (i.e. independent of projects/generic).
Program will accept local path, Remote path, User Id, password etc.
Program will also have an option for file stem field which will let the user choose which files to send/receive I.e. ASD* will pick files starting with ASD only.
Can be integrated in process chains using a variant.
Variant need not be changed when transport happens as Program takes care of the path on whatever system it is.
Following screenshot shows various parameters.
Steps to Create
The Program works on the principle that once we open a FTP connection using standard SAP provided Function Modules we can create the sequence of commands to execute to our effect.
Following are the steps to create the solution: 1. Create structure ZZFILI (is used for providing a structure to organize file data). 2. Create table type Z_ZZFILI. 3. Create Function Module Z_GET_DIR_LIST (is used to read the files available in the directory) 4. Create ABAP Program Z0I005. 5. Create Includes Z0I005_TOP, Z0I005_FORMS, Z0I005_SELECTION. 6. Create Text elements and selection text elements. 7. Create Messages.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 4
Create Structure ZZFILI
1. Create data element ZNAME (Char 1024) description: File Name Go to transaction code SE11 and choose ‘data type’ type the name ZNAME and press ‘create’. When asked for type choose ‘data element’
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 5
Save and Activate. Similarly create ZSIZE (INT4) Description Size and ZMASK (Char 40) Description: File Mask. See screenshots below.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 6
After creating data elements Structure ZZFILI (List of Files) needs to be created. Go to Transaction code SE11 choose ‘data type’ and type ZZFILI and press create, when asked for type choose structure. Make following entries.
Choose the enhancement category from (ExtrasEnhancement category) ‘Can not be enhanced’. Save and activate.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 7
Creating Table Type Z_ZZFILI
For ECC6.0 and above it is not possible to give ‘TABLES’ parameters so the solution requires a table type in the function module Z_GET_DIR_LIST and Z_MOVE_FILES.
Steps to create table type Z_ZZFILI.
1. Go to Transaction code SE11.
2. Select data type and type Z_ZZFILI.
3. Press ‘create’.
4. Select type as table type.
5. Give description and line type as ZZFILI.
6. Follow the screen shots.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 8
Save and Activate
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 9
Creating Function Module Z_GET_DIR_LIST
For creating function module we will need a function group (can be created new or can be existing, but it is better to create separate function groups for function module whose functionalities are different.)
1. We will create a function group ZSCG.
2. Go to transaction code SE80.
3. Choose Function group from drop down box.
4. Type the name ZSCG and press enter.
Follow the screenshots.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 10
After creation of Function Group do Right ClickCreateFunction module.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 11
1. Start with attributes.
2. Import parameters.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 12
3. Export parameters.
4. Changing parameters
5. Exceptions
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 13
6. Add a text element
Go toText ElementsText Symbols
Source Code Function Module
FUNCTION Z_GET_DIR_LIST.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(FILE_NAME) TYPE ZZFILI-ZNAME
*" REFERENCE(FILE_MASK) TYPE ZZFILI-ZMASK
*" EXPORTING
*" REFERENCE(RETURN_CODE) TYPE SY-SUBRC
*" CHANGING
*" REFERENCE(LIST) TYPE Z_ZZFILI
*" EXCEPTIONS
*" LIST_ERROR
*" FILE_NAME_TOO_LONG
*"----------------------------------------------------------------------
types: name_of_dir(1024) type c,
name_of_file(260) type c,
name_of_path(1285) type c.
data: begin of file,
dirname type name_of_dir, " name of directory. (possibly
" truncated.)
name type name_of_file, " name of entry. (possibly
" truncated.)
type(10) type c, " type of entry.
len(8) type p, " length in bytes.
owner(8) type c, " owner of the entry.
mtime(6) type p, " last modification date, seconds since 1970
mode(9) type c, " like "rwx-r-x--x": protection mode.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 14
useable(1) type c,
subrc(4) type c,
errno(3) type c,
errmsg(40) type c,
mod_date type d,
mod_time(8) type c, " hh:mm:ss
seen(1) type c,
changed(1) type c,
end of file.
data: begin of file_list occurs 100,
dirname type name_of_dir, " name of directory. (possibly
" truncated.)
name type name_of_file, " name of entry. (possibly
" truncated.)
type(10) type c, " type of entry.
len(8) type p, " length in bytes.
owner(8) type c, " owner of the entry.
mtime(6) type p, " last modification date, seconds since 1970
mode(9) type c, " like "rwx-r-x--x": protection mode.
useable(1) type c,
subrc(4) type c,
errno(3) type c,
errmsg(40) type c,
mod_date type d,
mod_time(8) type c, " hh:mm:ss
seen(1) type c,
changed(1) type c,
end of file_list.
data: errcnt(2) type p value 0.
data: a_dir_name type name_of_dir, " name of directory.
a_generic_name type name_of_file." name of entry. (may end with *)
data wa_list like line of list.
* parameters: p_dir type name_of_dir lower case.
a_dir_name = file_name.
a_generic_name = file_mask.
* IF a_dir_name IS INITIAL.
* MESSAGE e220. " 'Place cursor on valid line !'.
* ENDIF.
call 'C_DIR_READ_FINISH' " just to be sure
id 'ERRNO' field file_list-errno
id 'ERRMSG' field file_list-errmsg.
call 'C_DIR_READ_START' id 'DIR' field a_dir_name
id 'FILE' field a_generic_name
id 'ERRNO' field file-errno
id 'ERRMSG' field file-errmsg.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 15
if sy-subrc <> 0.
sy-subrc = 4.
raise list_error.
endif.
do.
clear file.
call 'C_DIR_READ_NEXT'
id 'TYPE' field file-type
id 'NAME' field file-name
id 'LEN' field file-len
id 'OWNER' field file-owner
id 'MTIME' field file-mtime
id 'MODE' field file-mode
id 'ERRNO' field file-errno
id 'ERRMSG' field file-errmsg.
file-dirname = a_dir_name.
move sy-subrc to file-subrc.
case sy-subrc.
when 0.
when 1. " end of directory
exit.
when 4. " filename too long
raise list_error.
when others.
raise file_name_too_long.
endcase.
if file-type = text-001.
move-corresponding file to file_list.
append file_list.
endif.
enddo.
call 'C_DIR_READ_FINISH'
id 'ERRNO' field file_list-errno
id 'ERRMSG' field file_list-errmsg.
if sy-subrc <> 0.
write: / 'C_DIR_READ_FINISH', 'SUBRC', sy-subrc.
endif.
sy-subrc = 0.
sort file_list by name.
loop at file_list.
move file_list-name to wa_list-zname.
append wa_list to list.
* WRITE : / FILE_LIST-NAME.
endloop.
sort list by zname ascending.
ENDFUNCTION.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 16
Creating Program Z0I005
To create program follow the steps.
1. Go to transaction Code SE80.
2. Select Program from drop down box.
3. Type the name as Z0I005.
4. Hit Enter.
Give following properties. These can be specific to the project.
a) Now Add the following code to Z0I005
report z0i005 no standard page heading
message-id z0i005
line-count 60
line-size 132. .
include z0i005_top. "data definition
include z0i005_selection. "selection screen
include z0i005_forms. "forms
start-of-selection.
if psend eq 'X'. "Use program to send files
perform check_local_path.
perform check_for_files.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 17
if v_no_files_found ne c_x.
perform send_files.
if v_subrc eq 0.
message i018.
endif.
endif.
else. "Use Program to receive files
PERFORM check_local_path.
PERFORM retrieve_files.
endif.
b) Now Do Right ClickCreateInclude g) Give the name of include as ‘Z0I005_top’.
Similarly create 2 more includes as Z0I005_selection, Z0I005_forms.
Creating Include Z0I005_TOP
Add following code
*&---------------------------------------------------------------------*
*& Include Z0I005_TOP
*&---------------------------------------------------------------------*
types: begin of ty_text,
line(255) type c,
end of ty_text.
types: ty_move_results type btcxpm.
types: begin of ty_ren_list,
name(50) type c,
tmp_name(50) type c,
end of ty_ren_list.
constants: c_navgl(6) type c value 'ABC*',
c_asterisk(1) type c value '*',
c_x(1) type c value 'X'.
data: it_result type table of ty_text, "FTP results table
it_commands type table of ty_text, "FTP commands
it_list type table of zzfili, "list of files in a directory
it_move_results type table of ty_move_results. "results of moving file
data: wa_result like line of it_result,
wa_command like line of it_commands,
wa_list like line of it_list,
wa_move_results like line of it_move_results.
data: v_handle type i,
v_command_index type i,
v_key type i value 26101957, "Encryption key
v_encrypted_pwd(80) type c,
v_slen type i,
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 18
v_filename type string,
v_source_dir type string,
v_dest_dir type string,
v_subrc like sy-subrc,
v_no_files_found type c,
v_files_found type c,
v_file type string,
v_lines type i,
v_stem type zzfili-zmask,
v_loop type c.
constants:
c_rfc_destination type rfcdes-rfcdest value 'SAPFTPA'.
Creating Include Z0I005_SELECTION
Add following code
selection-screen begin of block b with frame title text-002.
parameter: psend radiobutton group r2 default 'X',
preceive radiobutton group r2.
selection-screen end of block b.
selection-screen skip 1.
selection-screen begin of block a with frame title text-001.
parameter: pstem type zzfili-zmask lower case obligatory
default c_navgl,
plpath type zzfili-zname lower case obligatory,
puser(40) type c lower case obligatory,
ppwd(40) type c lower case obligatory,
phost(70) type c lower case obligatory,
prpath(70) type c lower case obligatory,
pasc radiobutton group r1 default 'X',
pbin radiobutton group r1.
selection-screen end of block a.
*-----------------------------------------------------------------------
at selection-screen output.
*-----------------------------------------------------------------------
* Scramble Password field on screen
loop at screen.
if screen-name = 'PPWD'.
screen-invisible = '1'.
modify screen.
endif.
endloop.
Creating Include Z0I005_FORMS
Add following code
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 19
*&---------------------------------------------------------------------*
*& Include Z0I005_FORMS
*&---------------------------------------------------------------------*
form check_local_path .
* check whether local directory to send data from exists
* and raise an error if it does not or if it is not accessible
* due to permissions.
v_filename = pstem.
condense v_filename no-gaps.
v_source_dir = plpath.
condense v_source_dir no-gaps.
v_dest_dir = prpath.
condense v_dest_dir no-gaps.
perform check_directory using v_source_dir.
endform. " CHECK_LOCAL_PATH
*&---------------------------------------------------------------------*
*& Form CHECK_DIRECTORY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_V_SOURCE_DIR text
*----------------------------------------------------------------------*
form check_directory using p_v_source_dir.
* check whether a directory exists and error if it does not or is not
* accessible
data: l_source_dir type btch0000-text80.
l_source_dir = p_v_source_dir.
call function 'PFL_CHECK_DIRECTORY'
exporting
directory = l_source_dir
write_check = 'X'
* FILNAME = ' '
exceptions
pfl_dir_not_exist = 1
pfl_permission_denied = 2
pfl_cant_build_dataset_name = 3
pfl_file_not_exist = 4
others = 5.
if sy-subrc ne 0.
if sy-subrc eq 1.
write: / 'Local directory on SAP Server does not exist:'(014),
/ l_source_dir.
message e013.
elseif sy-subrc eq 2.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 20
write: / 'No access to local directory on SAP server:'(015),
/ l_source_dir.
message e014.
else.
write:
/ 'Unspecified error checking local directory on SAP Server:'(016),
/ l_source_dir.
message e015.
endif.
endif.
endform. " CHECK_DIRECTORY
*&---------------------------------------------------------------------*
*& Form CHECK_FOR_FILES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form check_for_files .
* check if files exist
* read files in directory
refresh it_list.
call function 'Z_GET_DIR_LIST'
exporting
file_name = plpath
file_mask = pstem
changing
list = it_list
exceptions
list_error = 1
file_name_too_long = 2.
v_subrc = sy-subrc.
if pstem(1) eq c_asterisk
and pstem(2) is not initial.
move pstem to v_stem.
replace all occurrences of c_asterisk in v_stem with space.
condense v_stem no-gaps.
loop at it_list into wa_list
where zname ns v_stem.
delete it_list.
endloop.
endif.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 21
skip 2.
write: /'Files to be sent to the remote server:'(012),
phost,
/'Directory:'(011), prpath.
skip 1.
if it_list[] is initial.
if v_subrc eq 0.
v_no_files_found = c_x.
write: /'No files have been found in SAP server directory:'(005),
/'File stem:'(006), pstem,
/'SAP Server file path:'(007), plpath.
message i005.
else.
write: /'Error reading SAP server local directory:'(031),
/'SAP Server file path:'(007), plpath.
message e019 with v_subrc.
endif.
else.
loop at it_list into wa_list.
write: /10 wa_list-zname.
endloop.
endif.
skip 2.
endform. " CHECK_FOR_FILES
form send_files .
* connect to the FTP server and send the files.
* Calculate password length
v_slen = strlen( ppwd ).
* Encrypt password
call function 'HTTP_SCRAMBLE'
exporting
source = ppwd
sourcelen = v_slen
key = v_key
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 22
importing
destination = v_encrypted_pwd.
* Connect to destination server
call function 'FTP_CONNECT'
exporting
user = puser
password = v_encrypted_pwd
host = phost
rfc_destination = c_rfc_destination
importing
handle = v_handle
exceptions
not_connected.
if sy-subrc <> 0.
message e002 with phost sy-subrc.
endif.
refresh it_result.
refresh it_commands.
* change the directory on the destination machine
concatenate 'cd' prpath into wa_command-line separated by space.
append wa_command to it_commands.
* Change the local directory on the sap server
concatenate 'lcd' plpath into wa_command-line separated by space.
append wa_command to it_commands.
* Set Ascii mode
clear wa_command-line.
if pbin eq 'X'.
move 'bin' to wa_command-line.
else.
move 'asc' to wa_command-line.
endif.
append wa_command to it_commands.
* files to be transferred
loop at it_list into wa_list.
* Put the file from the sap server to the destination machine
concatenate 'put' wa_list-zname wa_list-zname
into wa_command-line separated by space.
append wa_command to it_commands.
endloop.
* Send FTP commands to server
call function 'FTP_COMMAND_LIST'
exporting
handle = v_handle
importing
command_index = v_command_index
tables
data = it_result
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 23
commands = it_commands
exceptions
command_error = 1
tcpip_error = 2.
v_subrc = sy-subrc.
* write results of FTP and error if an error occurred.
write:
/'Messages generated by FTP Send to remote server:'(009),
phost,
/'Directory:'(011), prpath.
skip 1.
** For each FTP command result line
loop at it_result into wa_result.
write: /10 wa_result.
endloop.
skip 2.
if v_subrc ne 0.
* if there is an error disconnect from the server
* and display an appropriate message
perform ftp_disconnect using v_handle c_rfc_destination.
message e004.
endif.
endform. " SEND_FILES
*&---------------------------------------------------------------------
*
*& Form ftp_disconnect
*&---------------------------------------------------------------------
*
* text
*----------------------------------------------------------------------
*
form ftp_disconnect using
in_handle
in_rfc_destination.
* Disconnect from destination server
call function 'FTP_DISCONNECT'
exporting
handle = in_handle.
* Close RFC connection
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 24
call function 'RFC_CONNECTION_CLOSE'
exporting
destination = in_rfc_destination
exceptions
others = 1.
endform. "ftp_disconnect
FORM RETRIEVE_FILES .
* connect to the FTP server and retrieve the files.
* Calculate password length
V_SLEN = STRLEN( PPWD ).
* Encrypt password
CALL FUNCTION 'HTTP_SCRAMBLE'
EXPORTING
SOURCE = PPWD
SOURCELEN = V_SLEN
KEY = V_KEY
IMPORTING
DESTINATION = V_ENCRYPTED_PWD.
* Connect to destination server
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
USER = PUSER
PASSWORD = V_ENCRYPTED_PWD
HOST = PHOST
RFC_DESTINATION = C_RFC_DESTINATION
IMPORTING
HANDLE = V_HANDLE
EXCEPTIONS
NOT_CONNECTED.
IF SY-SUBRC <> 0.
MESSAGE E002 WITH PHOST SY-SUBRC.
ENDIF.
REFRESH IT_RESULT.
REFRESH IT_COMMANDS.
* Change the directory on the destination machine
CONCATENATE 'cd' PRPATH INTO WA_COMMAND-LINE SEPARATED BY SPACE.
APPEND WA_COMMAND TO IT_COMMANDS.
* Change the local directory on the sap server
CONCATENATE 'lcd' PLPATH INTO WA_COMMAND-LINE SEPARATED BY SPACE.
APPEND WA_COMMAND TO IT_COMMANDS.
CLEAR WA_COMMAND-LINE.
IF PBIN EQ 'X'.
MOVE 'bin' TO WA_COMMAND-LINE.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 25
ELSE.
MOVE 'asc' TO WA_COMMAND-LINE.
ENDIF.
APPEND WA_COMMAND TO IT_COMMANDS.
* get files from remote server
CONCATENATE 'mget' PSTEM INTO WA_COMMAND-LINE SEPARATED BY SPACE.
APPEND WA_COMMAND TO IT_COMMANDS.
* Send FTP commands to server
CALL FUNCTION 'FTP_COMMAND_LIST'
EXPORTING
HANDLE = V_HANDLE
IMPORTING
COMMAND_INDEX = V_COMMAND_INDEX
TABLES
DATA = IT_RESULT
COMMANDS = IT_COMMANDS
EXCEPTIONS
COMMAND_ERROR = 1
TCPIP_ERROR = 2.
V_SUBRC = SY-SUBRC.
CLEAR V_NO_FILES_FOUND.
CLEAR V_FILES_FOUND.
* write results of FTP and error if an error occurred.
* not finding files to retrieve is not an error, but will be reported.
WRITE:
/'Messages generated by FTP Retrieval from remote server:'(009),
PHOST,
/'Directory:'(011), PRPATH.
SKIP 1.
** For each FTP command result line
LOOP AT IT_RESULT INTO WA_RESULT.
WRITE: /10 WA_RESULT.
* check for no files returned from AIX server
* return code is 1, so look for error message to distinguish
* from genuine error
IF WA_RESULT-LINE EQ TEXT-003.
V_NO_FILES_FOUND = C_X.
V_LOOP = 'Y'.
ENDIF.
* check for files returned from NT server
* return code is 0, so check for existence of
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 26
* transfer complete message
IF WA_RESULT-LINE EQ TEXT-004 OR WA_RESULT-LINE EQ TEXT-005.
V_FILES_FOUND = C_X.
V_LOOP = 'Y'.
ENDIF.
ENDLOOP.
IF V_LOOP = 'N'.
V_NO_FILES_FOUND = C_X.
ENDIF.
SKIP 2.
IF V_SUBRC NE 0
OR ( V_SUBRC EQ 0
AND V_FILES_FOUND IS INITIAL ).
* if there is an error or there are no files disconnect from the server
* and display an appropriate message
PERFORM FTP_DISCONNECT USING V_HANDLE C_RFC_DESTINATION.
IF V_NO_FILES_FOUND EQ C_X
OR ( V_SUBRC EQ 0
AND V_FILES_FOUND IS INITIAL ).
WRITE:
/'No files have been found on remote server. File Stem:'(004),
PSTEM.
MESSAGE E003 WITH PSTEM. "D01K910515
V_NO_FILES_FOUND = C_X.
ELSE.
MESSAGE E017.
ENDIF.
ENDIF.
ENDFORM. " RETRIEVE_FILES
Some Points Regarding Codes
1) The sequence of commands used for sending files is following a) CD <Remote path> (changes directory on server to desired one.) b) LCD <Local Path> (changes local directory) c) ASC or BIN (To set the transfer mode) d) PUT <FILE NAME1> (sends file from local machine to remote machine) e) PUT <FILE NAME2> f) …
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 27
2) The sequence of commands used for sending files is following a) CD <Remote path> (changes directory on server to desired one.) b) LCD <Local Path> (changes local directory) c) MGET <FILENAME>* (gets all the files specified by wild card e.g. ABC*)
Based on the operating systems in concern both at local and remote server these commands need to be tweaked (In given coding UNIX commands are used as most of the times servers are run on UNIX. Though same FTP commands are used in NT servers as well but need to be sure).
If commands need to be modified these are the places to do it.
Sending file sequence
concatenate 'cd' prpath into wa_command-line separated by space. append wa_command to it_commands. * Change the local directory on the sap server concatenate 'lcd' plpath into wa_command-line separated by space. append wa_command to it_commands. * Set Ascii mode clear wa_command-line. if pbin eq 'X'. move 'bin' to wa_command-line. else. move 'asc' to wa_command-line. endif. append wa_command to it_commands. * files to be transferred loop at it_list into wa_list. * Put the file from the sap server to the destination machine concatenate 'put' wa_list-zname wa_list-zname into wa_command-line separated by space. append wa_command to it_commands. endloop.
Receiving file sequence
* Change the directory on the destination machine CONCATENATE 'cd' PRPATH INTO WA_COMMAND-LINE SEPARATED BY SPACE. APPEND WA_COMMAND TO IT_COMMANDS. * Change the local directory on the sap server CONCATENATE 'lcd' PLPATH INTO WA_COMMAND-LINE SEPARATED BY SPACE. APPEND WA_COMMAND TO IT_COMMANDS. CLEAR WA_COMMAND-LINE. IF PBIN EQ 'X'. MOVE 'bin' TO WA_COMMAND-LINE. ELSE. MOVE 'asc' TO WA_COMMAND-LINE. ENDIF. APPEND WA_COMMAND TO IT_COMMANDS. * get files from remote server CONCATENATE 'mget' PSTEM INTO WA_COMMAND-LINE SEPARATED BY SPACE. APPEND WA_COMMAND TO IT_COMMANDS.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 28
Creating Text Element and Selection Text Elements
To Create Text Elements for the program do GoToText ElementsText Symbols
Create following text symbols.
Create selection text.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 29
Create messages.
For creating messages do Go ToMessages.
Give attributes and messages as shown.
After creating all the objects Save and Activate.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 30
Following will be the screen when we run it.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 31
Related Content
http://wiki.sdn.sap.com/wiki/display/Snippets/ABAP+solution+to+implement+FTP+transactions
http://www.columbia.edu/acis/eds/data_tools/ftp-man/ftp_com.html
http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/4743
For more information, visit the Business Intelligence homepage.
ABAP Based Solution for FTP Operations (Send/Receive Files)
SAP COMMUNITY NETWORK SDN - sdn.sap.com | BPX - bpx.sap.com | BOC - boc.sap.com
© 2009 SAP AG 32
Disclaimer and Liability Notice
This document may discuss sample coding or other information that does not include SAP official interfaces and therefore is not supported by SAP. Changes made based on this information are not supported and can be overwritten during an upgrade.
SAP will not be held liable for any damages caused by using or misusing the information, code or methods suggested in this document, and anyone using these methods does so at his/her own risk.
SAP offers no guarantees and assumes no responsibility or liability of any type with respect to the content of this technical article or code sample, including any liability resulting from incompatibility between the content within this document and the materials and services offered by SAP. You agree that you will not hold, or seek to hold, SAP responsible or liable with respect to the content of this document.