Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

File Transfer Using FTP

Former Member
0 Likes
671

hi all,

i am in need of informations of how to use FTP in SAP to transfer the file and read the file.

can any one provide manuals or sample programs on FTP.

with regards.

T.Jeyagopi.

3 REPLIES 3
Read only

FredericGirod
Active Contributor
0 Likes
607

Please, use the search option of this forum, that has been so much time asked.

Rgd

Frédéric

Read only

0 Likes
607

Hi,

Check RSFTP* programs.

Thanks & Regards,

Siri.

Read only

Former Member
0 Likes
607

Hi,

We can first send the contents of internal table which you want to do FTP into an application server.

Then take this file as source and do ftp to the destination location.

for ex: you want to do ftp to www.abc.com and the destination folder is /xyz. and you have downloaded the internal table contents to application server path

say /app/filename. Then the code looks calling your own function module..

  • FTP the file

CALL FUNCTION 'Z_FTP_FILE'

EXPORTING

MACHINE_NAME = 'www.abc.com'

SOURCE_FILE = '/app/filename'

COMMAND_FILE = '/app/filename'

DEST_FILE = '/xyz/destfilename'

FTP_COMMAND = 'put'

TABLES

FTP_MESSAGE = L_FTP_MESSAGE

EXCEPTIONS

SOURCE_FILE_NOT_PROVIDED = 1

DEST_FILE_NOT_PROVIDED = 2

MACHINE_NAME_NOT_PROVIDED = 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.

ELSE.

MESSAGE I000 WITH 'FTP is Successful'.

endif.

The code in this Z_FTP_FILE looks like :

FUNCTION Z_FTP_FILE.

*"----


""Local interface:

*" IMPORTING

*" VALUE(MACHINE_NAME) LIKE RLGRAP-FILENAME

*" VALUE(SOURCE_FILE) LIKE RLGRAP-FILENAME OPTIONAL

*" VALUE(DEST_FILE) LIKE RLGRAP-FILENAME OPTIONAL

*" VALUE(FTP_COMMAND) LIKE TOP_SINGLE-COMMAND

*" VALUE(COMMAND_FILE) LIKE RLGRAP-FILENAME OPTIONAL

*" VALUE(TRANSFER_MODE) OPTIONAL

*" TABLES

*" FTP_MESSAGE

*" EXCEPTIONS

*" SOURCE_FILE_NOT_PROVIDED

*" DEST_FILE_NOT_PROVIDED

*" MACHINE_NAME_NOT_PROVIDED

*"----


IF MACHINE_NAME = ''.

RAISE MACHINE_NAME_NOT_PROVIDED.

ENDIF.

  • Check to make sure all the parms that are needed are provided

TRANSLATE FTP_COMMAND TO LOWER CASE.

IF FTP_COMMAND = 'put' OR

FTP_COMMAND = 'get'.

IF SOURCE_FILE = ''.

RAISE SOURCE_FILE_NOT_PROVIDED.

ENDIF.

ENDIF.

  • See if SAP can talk to machine

PERFORM CHECK_NETRC USING MACHINE_NAME.

PERFORM EXECUTE_FTP_COMMAND USING MACHINE_NAME

FTP_COMMAND

SOURCE_FILE

DEST_FILE

COMMAND_FILE

TRANSFER_MODE.

LOOP AT LTAB_FTPMESSAGES.

MOVE LTAB_FTPMESSAGES TO FTP_MESSAGE.

APPEND FTP_MESSAGE.

ENDLOOP.

ENDFUNCTION.

The form routines for the performs in this function module can be found in below include.

*----


***INCLUDE LZINTF01 .

*----


FORM EXECUTE_FTP_COMMAND USING LP_MACHINE

LP_COMMAND

LP_SOURCEFILE

LP_DESTFILE

LP_COMMANDFILE

LP_TRANSFER_MODE.

DATA:

LS_DATA(256) TYPE C,

LS_COMMAND(128) TYPE C.

  • If no value passed for the command file location/name, create a unique

  • name

IF LP_COMMANDFILE = ''.

PERFORM CREATE_UNIQUE_FILENAME

USING '/agn/r3/interface/tmp/command'

CHANGING LP_COMMANDFILE.

ENDIF.

  • Create a unique filename for the error file

OPEN DATASET LP_COMMANDFILE FOR OUTPUT IN TEXT MODE.

CLEAR LS_DATA.

  • FTP defaults to BINARY mode if not specified on some systems

  • This allows mode to be specified for those that don't default to Ascii

IF LP_TRANSFER_MODE = 'A'. " Send/Receive Ascii file

MOVE 'ascii' TO LS_DATA.

ENDIF.

TRANSFER LS_DATA TO LP_COMMANDFILE.

CONCATENATE LP_COMMAND

LP_SOURCEFILE

LP_DESTFILE

INTO LS_DATA SEPARATED BY SPACE.

TRANSFER LS_DATA TO LP_COMMANDFILE.

CLEAR LS_DATA.

MOVE 'quit' TO LS_DATA.

TRANSFER LS_DATA TO LP_COMMANDFILE.

CLOSE DATASET LP_COMMANDFILE.

*----


  • Build Command Line

*----


  • Use lp_commandfile to output the ftp commands, and pipe the output

  • into ls_errfile.

CONCATENATE 'ftp -v' LP_MACHINE '<' LP_COMMANDFILE

INTO LS_COMMAND SEPARATED BY SPACE.

*----


  • execute UNIX command line

*----


REFRESH LTAB_FTPMESSAGES.

CALL 'SYSTEM' ID 'COMMAND' FIELD LS_COMMAND

ID 'TAB' FIELD LTAB_FTPMESSAGES-SYS.

PERFORM DELETE_FILES USING LP_COMMANDFILE.

ENDFORM. " EXECUTE_FTP_COMMAND

----


  • FORM CREATE_UNIQUE_FILENAME *

----


  • --> LP_FILENAMEIN *

  • <-- LP_FILENAMEOUT *

----


FORM CREATE_UNIQUE_FILENAME USING LP_FILENAMEIN

CHANGING LP_FILENAMEOUT.

CONCATENATE LP_FILENAMEIN

'.'

SY-DATUM

'.'

SY-UZEIT

INTO LP_FILENAMEOUT.

ENDFORM. " CREATE_UNIQUE_FILENAME

----


  • FORM LOAD_FTP_OUTPUT *

----


  • Load FTP output from file and place in FTP_MESSAGES table *

----


----


  • FORM DELETE_FILES *

----


FORM DELETE_FILES USING LP_COMMANDFILE.

DATA: LS_COMMAND(200) TYPE C.

DATA: BEGIN OF LTAB_MESSAGES OCCURS 10,

LINE(200) TYPE C,

END OF LTAB_MESSAGES.

CONCATENATE 'rm -f' LP_COMMANDFILE

INTO LS_COMMAND SEPARATED BY SPACE.

*----


  • execute UNIX command line

*----


CALL 'SYSTEM' ID 'COMMAND' FIELD LS_COMMAND

ID 'TAB' FIELD LTAB_MESSAGES-SYS.

ENDFORM. " DELETE_FILES

----


  • FORM CHECK_NETRC *

----


  • --> LP_MACHINE *

----


FORM CHECK_NETRC USING LP_MACHINE.

DATA: LS_MACHINE(20) TYPE C.

DATA: BEGIN OF LTAB_NETRC OCCURS 50,

LINE(200) TYPE C,

END OF LTAB_NETRC.

Data: ls_Message(128) type c.

DATA: LC_NETRC(30) TYPE C.

LS_MACHINE = LP_MACHINE.

TRANSLATE LS_MACHINE TO LOWER CASE.

CONCATENATE '/home/' SY-SYSID 'adm/.netrc' INTO LC_NETRC.

TRANSLATE LC_NETRC TO LOWER CASE.

OPEN DATASET LC_NETRC FOR INPUT MESSAGE LS_MESSAGE IN TEXT MODE.

IF SY-SUBRC = 0.

CLEAR SY-TABIX.

DO.

READ DATASET LC_NETRC INTO LTAB_NETRC.

IF SY-SUBRC = 0.

APPEND LTAB_NETRC.

ELSE.

IF SY-TABIX = 0.

MESSAGE I000 WITH 'Unable to FTP, no .netrc file found. '

'Contact ACES'.

ENDIF.

EXIT.

ENDIF.

ENDDO.

CLOSE DATASET LC_NETRC.

ELSE.

MESSAGE I000 WITH 'Unable to FTP, no .netrc file found.'

'Contact ACES'.

ENDIF.

SEARCH LTAB_NETRC FOR LS_MACHINE.

IF SY-SUBRC NE 0. " Machine not found in .netrc

MESSAGE E000 WITH 'Cannot FTP file from the machine ' LS_MACHINE

'. Entry is missing from .netrc file'.

ENDIF.

ENDFORM. " CHECK_NETRC

Cheers,

Rajasekharreddy.N

Message was edited by: Raja sekhar reddy nallavelli