Friday, June 3, 2011

FTP file transfer in Background

1) Creating RFC Destination for FTP.

Run program: RSFTP005.

The RFC destinations SAPFTP and SAPFTPA will be created automatically.

a) SAPFTP (for local system)

b) SAPFTPA (for running in Application server)(This is used for file transfer in background.

2) Code sample for developing FTP programs can be got from report program

a) RSFTP002

b) RSFTP007

c) RSFTP008

3) Sample code for getting customer details as tab delimited .TXT file in background.

*&---------------------------------------------------------------------* *& Report ZCUSTOMER *& *&---------------------------------------------------------------------* *&-Customer -All new/changed customer records created during the period. *&---------------------------------------------------------------------* *LedgerKey-------------Char(50) *AccountName-----------Char(80) *AccountReference -----Char(50) *Address1 -------------Char(80) *Address2 -------------Char(80) *Town -----------------Char(50) *County / State -------Char(50) *Post Code / ZIP ------Char(20) *Country---------------Char(2) *AccountCurrencyCode --Char(3) *ContactTelephone -----Char(20)
REPORT  zcustomer.
TABLES: kna1,knb1. 
TYPES: BEGIN OF st_customer,        ledgerkey TYPE char50,        name1 TYPE kna1-name1,        kunnr TYPE kna1-kunnr,        name2 TYPE kna1-name2,        stras TYPE kna1-stras,        ort01 TYPE kna1-ort01,        regio TYPE kna1-regio,        pstlz TYPE kna1-pstlz,        land1 TYPE kna1-land1,        waers TYPE knvv-waers,        telf1 TYPE kna1-telf1,        END OF st_customer. 
TYPES : BEGIN OF st_cus,               ledgerkey(50)  TYPE c, "LedgerKey               wrk_delim1      TYPE x ,               name1(80)   TYPE c,  "AccountName               wrk_delim2      TYPE x ,               kunnr(50)   TYPE c,  "AccountReference               wrk_delim3      TYPE x ,               name2(80)   TYPE c,      "Address1               wrk_delim4      TYPE x ,               stras(80)   TYPE c,    " Address2               wrk_delim5      TYPE x ,               ort01(50)   TYPE c,   " Town               wrk_delim6      TYPE x ,               regio(50)   TYPE c,   " County / State               wrk_delim7      TYPE x ,               pstlz(10)   TYPE c,   "Post Code / ZIP               wrk_delim8      TYPE x ,               land1(2)    TYPE c,    "Country               wrk_delim9      TYPE x ,               waers(3)    TYPE c,    "AccountCurrencyCode               wrk_delim10     TYPE x ,               telf1(20)   TYPE c,    "ContactTelephone          END OF st_cus .
DATA: wrk_file TYPE char200. DATA: it_customer TYPE STANDARD TABLE OF st_customer,       wa_customer LIKE LINE OF it_customer.
DATA: it_dat TYPE STANDARD TABLE OF st_cus,       wa_dat LIKE LINE OF it_dat.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-001.
SELECT-OPTIONS:cust_no FOR  kna1-kunnr,"customer no                com_code FOR knb1-bukrs,"company code                country FOR kna1-land1, "country                creat_on FOR kna1-erdat default sy-datum. "created or changed on SELECTION-SCREEN END OF BLOCK b2.
START-OF-SELECTION.
  IF creat_on-high IS INITIAL.     creat_on-high = creat_on-low.   ENDIF.
  CONCATENATE sy-mandt '_1_'  creat_on-low '_' creat_on-high '_Cust.txt' INTO                       wrk_file.
  PERFORM customer_data_select.    "Customer Data File   PERFORM build_template_data.   PERFORM ftp_file_customer.
*&---------------------------------------------------------------------* *&      Form  CUSTOMER_DATA_SELECT *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *  -->  p1        text *  <--  p2        text *----------------------------------------------------------------------* FORM customer_data_select .
  SELECT a~name1 a~name2 a~kunnr a~stras a~ort01 a~regio a~pstlz a~land1 a~telf1    
"Details of the Customer based on KNA1.        FROM kna1 AS a        INNER JOIN knb1 AS b ON a~kunnr = b~kunnr              INTO CORRESPONDING FIELDS OF TABLE it_customer              WHERE a~kunnr IN cust_no              AND ( ( a~erdat IN creat_on OR a~updat IN creat_on ) OR              ( b~erdat IN creat_on OR b~updat IN creat_on ) )              AND a~land1 IN country               AND b~bukrs IN com_code.
  IF sy-subrc = 0.     LOOP AT it_customer INTO wa_customer.
      SELECT SINGLE waers FROM knvv INTO wa_customer-waers                                            WHERE kunnr = wa_customer-kunnr.. 
      wa_customer-ledgerkey = '12345'.
      MODIFY it_customer FROM wa_customer.
    ENDLOOP.
  ENDIF.
ENDFORM.                    " CUSTOMER_DATA_SELECT *&---------------------------------------------------------------------* *&      Form  BUILD_TEMPLATE_DATA *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *  -->  p1        text *  <--  p2        text *----------------------------------------------------------------------* FORM build_template_data .
  LOOP AT it_customer INTO wa_customer.     MOVE-CORRESPONDING wa_customer TO wa_dat.
    wa_dat-wrk_delim1  = '09'.  "for adding tab after each field     wa_dat-wrk_delim2  = '09'.     wa_dat-wrk_delim3  = '09'.     wa_dat-wrk_delim4  = '09'.     wa_dat-wrk_delim5  = '09'.     wa_dat-wrk_delim6  = '09'.     wa_dat-wrk_delim7  = '09'.     wa_dat-wrk_delim8  = '09'.     wa_dat-wrk_delim9  = '09'.     wa_dat-wrk_delim10 = '09'.     APPEND wa_dat TO it_dat.   ENDLOOP.
ENDFORM.                    " BUILD_TEMPLATE_DATA *&---------------------------------------------------------------------* *&      Form  FTP_FILE_CUSTOMER *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *  -->  p1        text *  <--  p2        text *----------------------------------------------------------------------* FORM ftp_file_customer .
  DATA:  l_user(30) TYPE c VALUE 'ZTEST', "user name of ftp server          l_pwd(30) TYPE c VALUE '1234', "password of ftp server          l_host(64) TYPE c VALUE '111.2.1.198', "ip address of FTP server          l_dest LIKE rfcdes-rfcdest VALUE 'SAPFTPA'."Background RFC destination
  DATA: w_hdl TYPE i,         c_key TYPE i VALUE 26101957,         l_slen TYPE i.
*HTTP_SCRAMBLE: used to scramble the password provided in a format recognized by SAP.   SET EXTENDED CHECK OFF.   l_slen = STRLEN( l_pwd ).
  CALL FUNCTION 'HTTP_SCRAMBLE'     EXPORTING       SOURCE      = l_pwd       sourcelen   = l_slen       key         = c_key     IMPORTING       destination = l_pwd.
* To Connect to the Server using FTP   CALL FUNCTION 'FTP_CONNECT'     EXPORTING       user            = l_user       password        = l_pwd       host            = l_host       rfc_destination = l_dest     IMPORTING       handle          = w_hdl     EXCEPTIONS       OTHERS          = 1.  . *FTP_R3_TO_SERVER:used to transfer the internal table data as a file to other system in the character mode.
  CALL FUNCTION 'FTP_R3_TO_SERVER'     EXPORTING       handle         = w_hdl       fname          = wrk_file          "file path of destination system       character_mode = 'X'     TABLES       text           = it_dat     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     RAISING invalid_output_file.   ENDIF.
*FTP_DISCONNECT: This is used to disconnect the connection between SAP and other system.
* To disconnect the FTP   CALL FUNCTION 'FTP_DISCONNECT'     EXPORTING       handle = w_hdl.
*RFC_CONNECTION_CLOSE:This is used to disconnect the RFC connection between SAP and other system.
  CALL FUNCTION 'RFC_CONNECTION_CLOSE'     EXPORTING       destination = l_dest     EXCEPTIONS       OTHERS      = 1.
ENDFORM.                    " FTP_FILE_CUSTOMER
On running this report in background a file will be created in ftp server location.

No comments:

Tutorials on SAP-ABAP

Adobe Interactive Forms Tutorials

Business Server Pages (BSP)

Userexits/BADIs

Web Dynpro for ABAP (Step by step procedure for web dynpro,Tutorials on Web Dynpro,)

ALV Tutorials

goodsites