You are on page 1of 25

*&---------------------------------------------------------------------* *& Object name : ZPISNDFTPADAPTER *& Object Type : Program *& Title : ABAP FTP adapter - Polling

files in sequence of XML file crea tion date *& Purpose : *&---------------------------------------------------------------------* *& Author : BM GLOBAL BUSINESS SERVICES *& Date : 30-Oct-2008 *&---------------------------------------------------------------------* *& Tracking History * *&---------------------------------------------------------------------* *& Date Who Description Transport Req# * *&---------------------------------------------------------------------* *& 30-Oct-2008 IBM_LIMTC Initial Creation PIDK900131 * *& 20-Jan-2009 IBM_LIMTC Add the exception handling PIDK900195 * *& when FTP connection failed. * *& 24-Feb-2009 IBM_LIMTC Enhance the File Pulling PIDK900208 * *& Strategy and mechanism. * *& 05-Mar-2009 IBM_LIMTC Keep a copy of File in PIDK900218 * *& FTP Archive Directory. * *& 27-Mar-2009 IBM_LIMTC Stop process if invalid path PIDK900236 * *& 05-OCt-2009 IBM_LIMTC CR SAP0052 - Abort stuck jobs P7DK900199 * *& 22-Oct-2009 IBM_LIMTC Issue 234 - File locked by FTP P7DK900199 * *& 22-Oct-2009 IBM_LIMTC CR SAP0052 - Abort stuck jobs P7DK900205 * *& 09-Nov-2009 IBM_LIMTC Fix the dump caused by gw_dest P7DK900209 * *&---------------------------------------------------------------------* REPORT zpisndftpadapter. *******************Data Declarations**************************** TABLES: ztpi_queue, ztpi_queuestat. TYPES: BEGIN OF gty_text, line(120) TYPE c, END OF gty_text. DATA: gt_ztpi_queue TYPE STANDARD TABLE OF ztpi_queue WITH HEADER LINE. DATA: gw_ftp TYPE c, gw_host(64) TYPE c, gw_user(30) TYPE c, gw_pwd(30) TYPE c, gw_dest TYPE rfcdes-rfcdest VALUE 'SAPFTPA', gw_dir_s(160) TYPE c, gw_dir_t(160) TYPE c, gw_dir_a(160) TYPE c, gw_xidir(160) TYPE c. DATA: gt_result TYPE TABLE OF gty_text WITH HEADER LINE. DATA: gw_local_var TYPE string. DATA: gw_key TYPE i VALUE 26101957, gw_hdl TYPE i, gw_slen TYPE i, gw_x TYPE i, gw_docid LIKE sysuuid-c, gw_cmd(120), gw_error, gw_bline(120) TYPE x.

DATA: BEGIN OF gt_file OCCURS 100, info(39) TYPE c, name(80) TYPE c, END OF gt_file. DATA: gw_queue_stat LIKE ztpi_queuestat, gw_empty TYPE c, gw_regpath(256) TYPE c, gw_get_error TYPE c, gw_put_error TYPE c, gw_del_error TYPE c, gw_text TYPE string. *&---------------------------------------------------------------------* * Selection Screen - Begin *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-002. SELECT-OPTIONS: s_land1 FOR ztpi_queue-land1 NO INTERVALS OBLIGATORY, s_plant FOR ztpi_queue-plant. PARAMETERS p_pasv NO-DISPLAY . SELECTION-SCREEN END OF BLOCK blk1. * begin of INSERT P7DK900205 22.10.2009 IBM_LIMTC PARAMETERS p_maxrun TYPE avgtim DEFAULT '900'. * end of INSERT P7DK900205 22.10.2009 IBM_LIMTC *&---------------------------------------------------------------------* * Selection Screen - End *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* * At Selection Screen event *&---------------------------------------------------------------------* * password not visible AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF screen-name = 'P_PWD'. screen-invisible = '1'. MODIFY SCREEN. ENDIF. ENDLOOP. *&---------------------------------------------------------------------* * Start of Selection event *&---------------------------------------------------------------------* START-OF-SELECTION. SET EXTENDED CHECK OFF. gw_error = 0. ************************************************************************ * begin of INSERT P7DK900205 22.10.2009 IBM_LIMTC PERFORM abort_stuck_jobs. * end of INSERT P7DK900205 22.10.2009 IBM_LIMTC * SELECT * INTO TABLE tg_ztpi_queue FROM ztpi_queue. SELECT * INTO TABLE gt_ztpi_queue FROM ztpi_queue

WHERE plant IN s_plant AND land1 IN s_land1 AND active = 'X'. LOOP AT gt_ztpi_queue. CLEAR: gw_queue_stat, gw_get_error, gw_put_error, gw_del_error. begin of INSERT P7DK900205 22.10.2009 IBM_LIMTC CLEAR: gw_regpath, gw_ftp, gw_host, gw_user, gw_pwd, begin of DELETE P7DK900209 06.11.2009 IBM_LIMTC gw_dest, end of DELETE P7DK900209 06.11.2009 IBM_LIMTC gw_dir_s, gw_dir_t, gw_dir_a, gw_xidir. end of INSERT P7DK900205 22.10.2009 IBM_LIMTC SELECT SINGLE * INTO CORRESPONDING FIELDS OF gw_queue_stat FROM ztpi_queuestat WHERE plant = gt_ztpi_queue. IF sy-subrc NE 0. gw_queue_stat-plant = gt_ztpi_queue-plant. ENDIF. gw_queue_stat-lastrdat = sy-datum. gw_queue_stat-lastrtim = sy-uzeit. gw_user = gt_ztpi_queue-ftpusr. gw_pwd = gt_ztpi_queue-ftppwd. *****Encrypts the Password***** gw_slen = STRLEN( gw_pwd ). CALL FUNCTION 'HTTP_SCRAMBLE' EXPORTING SOURCE = gw_pwd sourcelen = gw_slen key = gw_key IMPORTING destination = gw_pwd. gw_ftp = gt_ztpi_queue-ftp. IF gw_ftp = 'X'. gw_host = gt_ztpi_queue-ftphost. gw_dir_s = gt_ztpi_queue-ftpdir_s. gw_dir_t = gt_ztpi_queue-filedir_t. g Folder) gw_dir_a = gt_ztpi_queue-ftpdir_a. gw_xidir = gt_ztpi_queue-filedir_s. r) ELSE. CLEAR gw_host. gw_dir_s = gt_ztpi_queue-filedir_s. r) gw_dir_t = gt_ztpi_queue-filedir_t.

* * *

"FTP Host "FTP Source Directory "PI Local Target Directory (Processin "FTP Archive Directory "PI Local Source Directory (New Folde

"PI Local Source Directory (New Folde "PI Local Target Directory (Processin

g Folder) gw_xidir = gt_ztpi_queue-ftpdir_w. ENDIF.

"PI Local Temp Directory

IF sy-batch = 'X'. MESSAGE i000(38) WITH '>>> Processing Plant' gt_ztpi_queue-plant '...'. ELSE. CONCATENATE '>>> Processing Plant' gt_ztpi_queue-plant '...' INTO gw_text SEPARATED BY space. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = gw_text. FORMAT COLOR COL_HEADING. WRITE: / gw_text. FORMAT COLOR COL_NORMAL. ENDIF. * Register a lock entry for current FTP site to prevent conflict with other ru nning job CALL FUNCTION 'ENQUEUE_EZPIQUEUE' EXPORTING * MODE_ZTPI_QUEUE = 'X' * MANDT = SY-MANDT plant = gt_ztpi_queue-plant * X_PLANT = ' ' * _SCOPE = '2' * _WAIT = ' ' * _COLLECT = ' ' EXCEPTIONS foreign_lock = 1 system_failure = 2 OTHERS = 3. IF sy-subrc <> 0. IF sy-batch = 'X'. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno INTO gw_text WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. WRITE: / gw_text. ENDIF. CONTINUE. ENDIF. REFRESH gt_file. gw_empty = 'X'. "assume processing directory is empty initially IF gw_ftp = 'X'. * Check if there is any file in Local Target Dir (Processing Folder) PERFORM file_check_target_dir.

IF gw_empty = 'X'. IF sy-batch = 'X'. MESSAGE i000(38) WITH '...Processing queue is empty...'. ELSE. WRITE / '...Processing queue is empty...'. ENDIF. * begin of INSERT 22.10.2009 IBM_LIMTC perform file_monitor_new_dir.

IF gw_get_error = 'X'. CLEAR gw_get_error. * end of INSERT 22.10.2009 IBM_LIMTC * FTP CONNECT to FTP Server (Mills / Estates) PERFORM ftp_connect. IF gw_hdl IS NOT INITIAL. * FTP GET file from FTP Source Dir => Local Source Dir PERFORM ftp_get. IF gw_get_error IS INITIAL. * FTP PUT file from Local Source Dir => FTP Archive Dir PERFORM ftp_put. IF gw_put_error IS INITIAL. * FTP DELETE original file from FTP Source Dir PERFORM ftp_delete. ENDIF. * begin of DELETE P7DK900199 22.10.2009 IBM_LIMTC * IF gw_del_error = 'X' OR gw_put_error = 'X'. * Delete file from Local Source Dir if FTP Archive or FTP Delete faile d * PERFORM file_delete. * * ELSE. ** Move the file from Local Source Dir => Local Target Dir * PERFORM move_file_2_process. * ENDIF. * begin of DELETE P7DK900199 22.10.2009 IBM_LIMTC ENDIF. * FTP Disconnect from FTP Server (Mills / Estates) PERFORM ftp_disconnect. * begin of INSERT P7DK900199 22.10.2009 IBM_LIMTC IF gw_del_error = 'X' OR gw_put_error = 'X'. * Delete file from Local Source Dir if FTP Archive or FTP Delete faile d PERFORM file_delete. ELSE. Move the file from Local Source Dir => Local Target Dir PERFORM move_file_2_process. ENDIF. * end of INSERT P7DK900199 22.10.2009 IBM_LIMTC ENDIF. * begin of INSERT 22.10.2009 IBM_LIMTC ENDIF. * end of INSERT 22.10.2009 IBM_LIMTC ENDIF. IF sy-batch NE 'X'. SKIP. ENDIF. * ************************************************************************ ELSE. * Check if any file in the Local Target Dir (Processing Folder) PERFORM file_check_target_dir. IF gw_empty = 'X'. IF sy-batch = 'X'. MESSAGE i000(38) WITH '...Processing queue is empty...'. ELSE. WRITE: / '...Processing queue is empty...'. ENDIF.

* g)

Move the file from Local Source Dir (New) => Local Target Dir (Processin PERFORM file_move. ENDIF. IF sy-batch NE 'X'. SKIP. ENDIF. ENDIF.

* * * * * * * *

update the FTP connection status to PI Queue Status table MODIFY ztpi_queuestat FROM gw_queue_stat. Release a lock entry for the current site CALL FUNCTION 'DEQUEUE_EZPIQUEUE' EXPORTING MODE_ZTPI_QUEUE = 'X' MANDT = SY-MANDT plant = gt_ztpi_queue-plant X_PLANT = ' ' _SCOPE = '3' _SYNCHRON = ' ' _COLLECT = ' ' . ENDLOOP.

*&---------------------------------------------------------------------* *& Form FTP_CHECK_TARGET_DIR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM ftp_check_target_dir . DATA: lw_text TYPE string, lw_fifth_char TYPE c, lw_bus(3) TYPE c. *******************Change FTP Server Directory*************** CLEAR gw_cmd. CONCATENATE 'cd' gw_dir_t INTO gw_cmd SEPARATED BY space. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Checking processing queue' gw_dir_t. ELSE. CONCATENATE 'Checking processing queue' gw_dir_t INTO lw_text SEPARATED BY s pace. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = lw_text. ENDIF. REFRESH gt_result. CALL FUNCTION 'FTP_COMMAND' EXPORTING handle = gw_hdl command = gw_cmd TABLES data = gt_result

EXCEPTIONS tcpip_error = 1 command_error = 2 data_error = 3. IF sy-subrc NE 0. FORMAT COLOR 6. WRITE: /'Error Log for : ', gw_cmd. FORMAT COLOR OFF. LOOP AT gt_result. WRITE: / gt_result-line. ENDLOOP. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error when executing' gw_cmd. ENDIF. ENDIF. gw_empty = 'X'. CLEAR gw_cmd. gw_cmd = 'ls -c'. REFRESH gt_result. CALL FUNCTION 'FTP_COMMAND' EXPORTING handle = gw_hdl command = gw_cmd TABLES data = gt_result EXCEPTIONS tcpip_error = 1 command_error = 2 data_error = 3. IF sy-subrc = 0. LOOP AT gt_result. FIND '.xml' IN gt_result-line. IF sy-subrc = 0. gt_file = gt_result-line. lw_fifth_char = gt_file-name+4(1). lw_bus = gt_file-name+6(3). IF lw_fifth_char = 'O' AND lw_bus CO '1234567890'. CLEAR gw_empty. IF sy-batch = 'X'. MESSAGE i000(38) WITH '...A file is in the processing queue.'. ELSE. WRITE / '...A file is in the processing queue.'. ENDIF. EXIT. ENDIF. ENDIF. ENDLOOP. ELSE. FORMAT COLOR 6. WRITE: /'Error Log for : ', gw_cmd. FORMAT COLOR OFF. LOOP AT gt_result. WRITE: / gt_result-line. ENDLOOP. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error when executing' gw_cmd. ENDIF. ENDIF.

ENDFORM. " FTP_CHECK_TARGET_DIR *&---------------------------------------------------------------------* *& Form FTP_GET *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM ftp_get . DATA: lw_text TYPE string, lw_fifth_char TYPE c, lw_bus(3) TYPE c. *******************Change FTP Server Directory*************** CLEAR gw_cmd. CONCATENATE 'cd' gw_dir_s INTO gw_cmd SEPARATED BY space. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Changing Directory to' gw_dir_s. ELSE. CONCATENATE 'Changing Directory to' gw_dir_s INTO lw_text SEPARATED BY space . CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = lw_text. WRITE: / lw_text. ENDIF. REFRESH gt_result. CALL FUNCTION 'FTP_COMMAND' EXPORTING handle = gw_hdl command = gw_cmd TABLES data = gt_result EXCEPTIONS tcpip_error = 1 command_error = 2 data_error = 3. IF sy-subrc NE 0. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error when executing' gw_cmd. ELSE. WRITE: / 'Error when executing', gw_cmd. ENDIF. FORMAT COLOR 6. WRITE: /'Error Log for : ', gw_cmd. FORMAT COLOR OFF. LOOP AT gt_result. WRITE: / gt_result-line. ENDLOOP. PERFORM log_error USING gt_result-line. gw_get_error = 'X'. EXIT. ENDIF. CLEAR gw_cmd. gw_cmd = 'ls -c'. REFRESH gt_result.

CALL FUNCTION 'FTP_COMMAND' EXPORTING handle = gw_hdl command = gw_cmd TABLES data = gt_result EXCEPTIONS tcpip_error = 1 command_error = 2 data_error = 3. IF sy-subrc = 0. LOOP AT gt_result. FIND '.xml' IN gt_result-line. IF sy-subrc = 0. gt_file = gt_result-line. lw_fifth_char = gt_file-name+4(1). lw_bus = gt_file-name+6(3). IF lw_fifth_char = 'O' AND lw_bus CO '1234567890'. APPEND gt_file. ENDIF. ENDIF. ENDLOOP. ELSE. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error when executing' gw_cmd. ELSE. WRITE: / 'Error when executing', gw_cmd. ENDIF. FORMAT COLOR 6. WRITE: /'Error Log for : ', gw_cmd. FORMAT COLOR OFF. LOOP AT gt_result. WRITE: / gt_result-line. ENDLOOP. PERFORM log_error USING gt_result-line. gw_get_error = 'X'. EXIT. ENDIF. * transfer a file into the processing folder READ TABLE gt_file INDEX 1. IF sy-subrc NE 0. gw_get_error = 'X'. IF sy-batch = 'X'. MESSAGE i000(38) WITH '...No XML files to get...'. ELSE. WRITE: / '...No XML files to get...'. ENDIF. EXIT. ENDIF. gw_regpath = gt_file-name. **********Sets local directory of XI Server************* CLEAR gw_cmd. CONCATENATE 'lcd' gw_xidir INTO gw_cmd SEPARATED BY space. REFRESH gt_result. CALL FUNCTION 'FTP_COMMAND'

EXPORTING handle command TABLES data EXCEPTIONS tcpip_error command_error data_error

= gw_hdl = gw_cmd = gt_result = 1 = 2 = 3.

IF sy-subrc NE 0. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error when executing' gw_cmd. ELSE. WRITE: / 'Error when executing', gw_cmd. ENDIF. FORMAT COLOR 6. WRITE: /'Error Log for : ', gw_cmd. FORMAT COLOR OFF. LOOP AT gt_result. WRITE: / gt_result-line. ENDLOOP. PERFORM log_error USING gt_result-line. gw_get_error = 'X'. EXIT. ENDIF. ***********Retrieves files from the FTP Server************* IF sy-batch = 'X'. MESSAGE i000(38) WITH '...Retrieving file' gw_regpath. ELSE. CONCATENATE 'Retrieving file' gw_regpath INTO lw_text SEPARATED BY space. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = lw_text. WRITE: / lw_text. ENDIF. CLEAR gw_cmd. CONCATENATE 'get' gw_regpath INTO gw_cmd SEPARATED BY space. REFRESH gt_result. CALL FUNCTION 'FTP_COMMAND' EXPORTING handle = gw_hdl command = gw_cmd TABLES data = gt_result EXCEPTIONS tcpip_error = 1 command_error = 2 data_error = 3. IF sy-subrc NE 0. gw_get_error = 'X'. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error when executing' gw_cmd. ELSE. WRITE: / 'Error when executing', gw_cmd. ENDIF. FORMAT COLOR 6. WRITE: /'Error Log for : ', gw_cmd.

FORMAT COLOR OFF. LOOP AT gt_result. WRITE: / gt_result-line. ENDLOOP. PERFORM log_error USING gt_result-line. ENDIF. ENDFORM. " FTP_GET *&---------------------------------------------------------------------* *& Form FTP_PUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM ftp_put . DATA: lw_text TYPE string. *******************Change FTP Server Directory*************** CLEAR gw_cmd. CONCATENATE 'cd' gw_dir_a INTO gw_cmd SEPARATED BY space. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Changing Directory to' gw_dir_a. ELSE. CONCATENATE 'Changing Directory to' gw_dir_a INTO lw_text SEPARATED BY space . CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = lw_text. WRITE: / lw_text. ENDIF. REFRESH gt_result. CALL FUNCTION 'FTP_COMMAND' EXPORTING handle = gw_hdl command = gw_cmd TABLES data = gt_result EXCEPTIONS tcpip_error = 1 command_error = 2 data_error = 3. IF sy-subrc NE 0. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error when executing' gw_cmd. ELSE. WRITE: / 'Error when executing', gw_cmd. ENDIF. FORMAT COLOR 6. WRITE: /'Error Log for : ', gw_cmd. FORMAT COLOR OFF. LOOP AT gt_result. WRITE: / gt_result-line. ENDLOOP. PERFORM log_error USING gt_result-line. * begin of INSERT 27/03/2009 IBM_LIMTC gw_put_error = 'X'. EXIT. * end of INSERT 27/03/2009 IBM_LIMTC

ENDIF. ***********Storing file to the FTP Server************* IF sy-batch = 'X'. MESSAGE i000(38) WITH '...Putting File' gw_regpath. ELSE. CONCATENATE 'Putting File' gw_regpath INTO lw_text SEPARATED BY space. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = lw_text. WRITE: / lw_text. ENDIF. CLEAR gw_cmd. CONCATENATE 'put' gw_regpath INTO gw_cmd SEPARATED BY space. REFRESH gt_result. CALL FUNCTION 'FTP_COMMAND' EXPORTING handle = gw_hdl command = gw_cmd TABLES data = gt_result EXCEPTIONS tcpip_error = 1 command_error = 2 data_error = 3. IF sy-subrc NE 0. gw_put_error = 'X'. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error when executing' gw_cmd. ELSE. WRITE: / 'Error when executing', gw_cmd. ENDIF. FORMAT COLOR 6. WRITE: /'Error Log for : ', gw_cmd. FORMAT COLOR OFF. LOOP AT gt_result. WRITE: / gt_result-line. ENDLOOP. PERFORM log_error USING gt_result-line. ENDIF. ENDFORM. " FTP_PUT *&---------------------------------------------------------------------* *& Form FTP_DELETE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM ftp_delete . DATA lw_text TYPE string. *******************Change FTP Server Directory*************** CLEAR gw_cmd. CONCATENATE 'cd' gw_dir_s INTO gw_cmd SEPARATED BY space. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Changing Directory to' gw_dir_s.

ELSE. CONCATENATE 'Changing Directory to' gw_dir_s INTO lw_text SEPARATED BY space . CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = lw_text. WRITE: / lw_text. ENDIF. REFRESH gt_result. CALL FUNCTION 'FTP_COMMAND' EXPORTING handle = gw_hdl command = gw_cmd TABLES data = gt_result EXCEPTIONS tcpip_error = 1 command_error = 2 data_error = 3. IF sy-subrc NE 0. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error when executing' gw_cmd. ELSE. WRITE: / 'Error when executing', gw_cmd. ENDIF. FORMAT COLOR 6. WRITE: /'Error Log for : ', gw_cmd. FORMAT COLOR OFF. LOOP AT gt_result. WRITE: / gt_result-line. ENDLOOP. PERFORM log_error USING gt_result-line. ENDIF. **************************Delete Files if specified*************** REFRESH gt_result. CLEAR gw_cmd. IF sy-batch = 'X'. MESSAGE i000(38) WITH '...Deleting File' gw_regpath. ELSE. CONCATENATE 'Deleting File' gw_regpath INTO lw_text SEPARATED BY space. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = lw_text. WRITE: / lw_text. ENDIF. CONCATENATE 'delete' gw_regpath INTO gw_cmd SEPARATED BY space. CALL FUNCTION 'FTP_COMMAND' EXPORTING handle = gw_hdl command = gw_cmd TABLES data = gt_result EXCEPTIONS tcpip_error = 1 command_error = 2 data_error = 3.

IF sy-subrc NE 0. gw_del_error = 'X'. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error when executing' gw_cmd. ELSE. WRITE: / 'Error when executing', gw_cmd. ENDIF. FORMAT COLOR 6. WRITE: /'Error Log for : ', gw_cmd. FORMAT COLOR OFF. LOOP AT gt_result. WRITE: / gt_result-line. ENDLOOP. PERFORM log_error USING gt_result-line. ENDIF. ENDFORM. " FTP_DELETE *&---------------------------------------------------------------------* *& Form FILE_DELETE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM file_delete . DATA: lw_text TYPE string. DATA lt_log TYPE STANDARD TABLE OF btcxpglog WITH HEADER LINE. DATA: lw_cmd TYPE btcxpgstim-extprog, lw_param TYPE btcxpgstim-params, lw_stdincntl TYPE btcxpgstim-stdincntl, lw_stdoutcntl TYPE btcxpgstim-stdoutcntl, lw_stderrcntl TYPE btcxpgstim-stderrcntl, lw_tracecntl TYPE btcxpgstim-tracecntl, lw_termcntl TYPE btcxpgstim-termcntl. ********Delete a file from XI Directory********* REFRESH gt_result. lw_text = 'Remove interim file...'. IF sy-batch = 'X'. MESSAGE i000(38) WITH lw_text. ELSE. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = lw_text. WRITE: / lw_text. ENDIF. CLEAR gw_cmd. CLEAR gw_local_var. CHECK gw_regpath IS NOT INITIAL. CONCATENATE gw_xidir gw_regpath INTO gw_local_var SEPARATED BY '\'. lw_cmd = 'cmd /c del'. lw_param = gw_local_var. PERFORM execute_os_command TABLES lt_log USING lw_cmd lw_param . ENDFORM. " FILE_DELETE *&---------------------------------------------------------------------* *& Form FTP_CONNECT

*&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM ftp_connect. DATA: lw_text TYPE string. *****Connects to the FTP Sever as specified by the user***** IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Connect to FTP Server'. ELSE. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = 'Connect to FTP Server'. WRITE / 'Connect to FTP Server'. ENDIF. CLEAR gw_hdl. CALL FUNCTION 'FTP_CONNECT' EXPORTING user = gw_user password = gw_pwd host = gw_host rfc_destination = gw_dest IMPORTING handle = gw_hdl EXCEPTIONS not_connected = 1 OTHERS = 2. IF sy-subrc = 0. *****Connects to the FTP Sever as specified by the user***** IF sy-batch = 'X'. MESSAGE i000(38) WITH 'FTP Connection is opened '. ELSE. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = 'FTP Connection is opened '. WRITE / 'FTP Connection is opened '. ENDIF. IF gw_queue_stat-connerr = 'X'. CLEAR: gw_queue_stat-connerr, gw_queue_stat-errsdat, gw_queue_stat-errstim, gw_queue_stat-shortlog. ENDIF. ELSEIF sy-subrc = 1. IF sy-batch = 'X'. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno INTO lw_text WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno INTO lw_text WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. FORMAT COLOR COL_NEGATIVE. WRITE: / lw_text.

FORMAT COLOR COL_NORMAL. ENDIF. PERFORM log_error USING lw_text. EXIT. ELSE. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error in Connection'. ELSE. FORMAT COLOR COL_NEGATIVE. WRITE: / 'Error in Connection'. FORMAT COLOR COL_NORMAL. ENDIF. PERFORM log_error USING 'Error in Connection'. EXIT. ENDIF. *********************Sets Passive Transfer************************** * IF NOT p_pasv IS INITIAL. * REFRESH gt_result. * * CALL FUNCTION 'FTP_COMMAND' * EXPORTING * handle = gw_hdl * command = 'set passive on' * TABLES * data = gt_result * EXCEPTIONS * tcpip_error = 1 * command_error = 2 * data_error = 3. * * ENDIF. IF sy-subrc NE 0. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error when executing' gw_cmd. ELSE. WRITE: / 'Error when executing', gw_cmd. ENDIF. FORMAT COLOR 6. WRITE: /'Error Log for : ', gw_cmd. FORMAT COLOR OFF. LOOP AT gt_result. WRITE: / gt_result-line. ENDLOOP. PERFORM log_error USING gt_result-line. ENDIF. *****************Sets File Type to the network************************** CLEAR gw_cmd. gw_cmd = 'ascii'. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = 'Setting File Transfer Type'. REFRESH gt_result. CALL FUNCTION 'FTP_COMMAND' EXPORTING handle = gw_hdl

command = gw_cmd TABLES data = gt_result EXCEPTIONS tcpip_error = 1 command_error = 2 data_error = 3. IF sy-subrc NE 0. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error when executing' gw_cmd. ELSE. WRITE: / 'Error when executing', gw_cmd. ENDIF. FORMAT COLOR 6. WRITE: /'Error Log for : ', gw_cmd. FORMAT COLOR OFF. LOOP AT gt_result. WRITE: / gt_result-line. ENDLOOP. ENDIF. ***************Sets Transfer Mode******************************* CLEAR gw_cmd. gw_cmd = 'ascii'. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = 'Setting File Transfer Mode'. REFRESH gt_result. CALL FUNCTION 'FTP_COMMAND' EXPORTING handle = gw_hdl command = gw_cmd TABLES data = gt_result EXCEPTIONS tcpip_error = 1 command_error = 2 data_error = 3. IF sy-subrc NE 0. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Error when executing' gw_cmd. ELSE. WRITE: / 'Error when executing', gw_cmd. ENDIF. FORMAT COLOR 6. WRITE: /'Error Log for : ', gw_cmd. FORMAT COLOR OFF. LOOP AT gt_result. WRITE: / gt_result-line. ENDLOOP. PERFORM log_error USING gt_result-line. ENDIF. ENDFORM. " FTP_CONNECT *&---------------------------------------------------------------------* *& Form FTP_DISCONNECT *&---------------------------------------------------------------------* * text

*----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM ftp_disconnect . *************Disconnects from the server******************************* CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = 'Disconnecting'. CALL FUNCTION 'FTP_DISCONNECT' EXPORTING handle = gw_hdl. CALL FUNCTION 'RFC_CONNECTION_CLOSE' EXPORTING destination = gw_dest EXCEPTIONS OTHERS = 1. IF sy-subrc NE 0. FORMAT COLOR COL_NEGATIVE. WRITE: / 'Error in Disconnecting'. ELSE. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'FTP Connection is closed '. ELSE. WRITE: / 'FTP Connection is closed '. ENDIF. ENDIF. CLEAR gw_cmd. ENDFORM. " FTP_DISCONNECT *&---------------------------------------------------------------------* *& Form EXECUTE_OS_COMMAND *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_CMD text * -->P_PARAM text *----------------------------------------------------------------------* FORM execute_os_command TABLES p_log STRUCTURE btcxpglog USING p_cmd p_param . DATA: lw_text TYPE string. DATA lt_log TYPE STANDARD TABLE OF btcxpglog WITH HEADER LINE. DATA: lw_cmd TYPE btcxpgstim-extprog, lw_param TYPE btcxpgstim-params, lw_stdincntl TYPE btcxpgstim-stdincntl, lw_stdoutcntl TYPE btcxpgstim-stdoutcntl, lw_stderrcntl TYPE btcxpgstim-stderrcntl, lw_tracecntl TYPE btcxpgstim-tracecntl, lw_termcntl TYPE btcxpgstim-termcntl. lw_cmd = p_cmd. lw_param = p_param. lw_stdincntl = 'R'. lw_stdoutcntl = 'M'. lw_stderrcntl = 'M'.

lw_termcntl = 'C'. CALL FUNCTION 'SXPG_STEP_XPG_START' EXPORTING TARGET = DESTINATION = extprog = lw_cmd params = lw_param stdincntl = lw_stdincntl stdoutcntl = lw_stdoutcntl stderrcntl = lw_stderrcntl tracecntl = lw_tracecntl termcntl = lw_termcntl TRACELEVEL = 0 LONG_PARAMS = JOBNAME = JOBCOUNT = STEPCOUNT = BATCH = CONNCNTL = 'H' IMPORTING STRTSTAT = XPGID = CONVID = EXITSTAT = EXITCODE = LAST_PROC = LAST_HOST = LAST_PROC_NUM = TABLES log = lt_log EXCEPTIONS communication_error = 1 system_error = 2 unknown_error = 3 cannot_get_rfc_dest = 4 job_update_failed = 5 job_does_not_exist = 6 OTHERS = 7 .

* *

* * * * * * * * * * * * * * * *

IF sy-subrc = 0. p_log[] = lt_log[]. ELSE. IF sy-batch = 'X'. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno INTO lw_text WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno INTO lw_text WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. PERFORM log_error USING lw_text. ENDIF. ********************************************** ENDFORM. " EXECUTE_OS_COMMAND

*&---------------------------------------------------------------------* *& Form FILE_CHECK_TARGET_DIR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM file_check_target_dir. DATA: lw_text TYPE string, lw_fifth_char TYPE c, lw_bus(3) TYPE c. DATA: lw_cmd TYPE btcxpgstim-extprog, lw_param TYPE btcxpgstim-params, lt_log TYPE STANDARD TABLE OF btcxpglog WITH HEADER LINE. lw_cmd = 'cmd /c dir'. * CONCATENATE g_dir_t '\*.xml /O:D' INTO l_param. CONCATENATE gw_dir_t '\' gt_ztpi_queue-plant '*.xml /O:D' INTO lw_param. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Checking processing queue' gw_dir_t. ELSE. CONCATENATE 'Checking processing queue' gw_dir_t INTO lw_text SEPARATED BY s pace. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = lw_text. WRITE: / lw_text. ENDIF. PERFORM execute_os_command TABLES lt_log USING lw_cmd lw_param . LOOP AT lt_log. FIND '.xml' IN lt_log-message. IF sy-subrc = 0. gt_file = lt_log-message. lw_fifth_char = gt_file-name+4(1). lw_bus = gt_file-name+6(3). IF lw_fifth_char = 'O' AND lw_bus CO '1234567890'. CLEAR gw_empty. IF sy-batch = 'X'. MESSAGE i000(38) WITH lt_log-message.. MESSAGE i000(38) WITH '...A file is in the processing queue.'. ELSE. WRITE / lt_log-message. lw_text = '...A file is in the processing queue.'. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = lw_text. WRITE / lw_text. ENDIF. EXIT. ENDIF. ENDIF. ENDLOOP. ENDFORM. " FILE_CHECK_TARGET_DIR *&---------------------------------------------------------------------* *& Form FILE_MOVE *&---------------------------------------------------------------------*

* text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM file_move . DATA: lw_text TYPE string, lw_fifth_char TYPE c, lw_bus(3) TYPE c. DATA: lw_cmd TYPE btcxpgstim-extprog, lw_param TYPE btcxpgstim-params, lt_log TYPE STANDARD TABLE OF btcxpglog WITH HEADER LINE. DATA: lw_file_src(100) TYPE c, lw_file_tgt(100) TYPE c. *******************Change FTP Server Directory*************** lw_cmd = 'cmd /c dir'. * CONCATENATE g_dir_s '\*.xml /O:D' INTO l_param. CONCATENATE gw_dir_s '\' gt_ztpi_queue-plant '*.xml /O:D' INTO lw_param. CLEAR gw_cmd. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Listing File in Directory' gw_dir_s. ELSE. CONCATENATE 'Listing File in Directory' gw_dir_s INTO lw_text SEPARATED BY s pace. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = lw_text. WRITE: / lw_text. ENDIF. PERFORM execute_os_command TABLES lt_log USING lw_cmd lw_param . LOOP AT lt_log. FIND '.xml' IN lt_log-message. IF sy-subrc = 0. gt_file = lt_log-message. lw_fifth_char = gt_file-name+4(1). lw_bus = gt_file-name+6(3). IF lw_fifth_char = 'O' AND lw_bus CO '1234567890'. CLEAR gw_empty. IF sy-batch = 'X'. MESSAGE i000(38) WITH lt_log-message. ELSE. WRITE / lt_log-message. ENDIF. APPEND gt_file. ENDIF. ENDIF. ENDLOOP. * transfer a file into the processing folder READ TABLE gt_file INDEX 1. IF sy-subrc NE 0. gw_get_error = 'X'. IF sy-batch = 'X'. MESSAGE i000(38) WITH '...No XML files to get...'. ELSE. WRITE / '...No XML files to get...'.

ENDIF. EXIT. ENDIF. gw_regpath = gt_file-name. CONCATENATE gw_dir_s gw_regpath INTO lw_file_src SEPARATED BY '\'. CONCATENATE gw_dir_t gw_regpath INTO lw_file_tgt SEPARATED BY '\'. lw_cmd = 'cmd /c move'. CONCATENATE lw_file_src lw_file_tgt INTO lw_param SEPARATED BY space. PERFORM execute_os_command TABLES lt_log USING lw_cmd lw_param . LOOP AT lt_log. IF sy-batch = 'X'. MESSAGE i000(38) WITH lt_log-message. ELSE. WRITE: / lt_log-message. ENDIF. ENDLOOP. ENDFORM. " FILE_MOVE *&---------------------------------------------------------------------* *& Form MOVE_FILE_2_PROCESS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM move_file_2_process . DATA: lw_cmd TYPE btcxpgstim-extprog, lw_param TYPE btcxpgstim-params, lt_log TYPE STANDARD TABLE OF btcxpglog WITH HEADER LINE. DATA: lw_file_src(100) TYPE c, lw_file_tgt(100) TYPE c. DATA: lw_text TYPE string. * begin of INSERT 22.10.2009 IBM_LIMTC CHECK gw_regpath IS NOT INITIAL. * end of INSERT 22.10.2009 IBM_LIMTC IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Transfer file' gw_regpath 'to processing'. ELSE. CONCATENATE 'Transfer file' gw_regpath 'to processing' INTO lw_text SEPARATE D BY space. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = lw_text. WRITE: / lw_text. ENDIF. * transfer a file into the processing folder CONCATENATE gw_xidir gw_regpath INTO lw_file_src SEPARATED BY '\'. CONCATENATE gw_dir_t gw_regpath INTO lw_file_tgt SEPARATED BY '\'. lw_cmd = 'cmd /c move'. CONCATENATE lw_file_src lw_file_tgt INTO lw_param SEPARATED BY space. PERFORM execute_os_command TABLES lt_log USING lw_cmd lw_param . LOOP AT lt_log. IF sy-batch = 'X'. MESSAGE i000(38) WITH lt_log-message. ELSE.

WRITE: / lt_log-message. ENDIF. ENDLOOP. ENDFORM. " MOVE_FILE_2_PROCESS *&---------------------------------------------------------------------* *& Form LOG_ERROR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_TEXT text *----------------------------------------------------------------------* FORM log_error USING p_text. IF gw_queue_stat-connerr NE 'X'. gw_queue_stat-connerr = 'X'. gw_queue_stat-errsdat = sy-datum. gw_queue_stat-errstim = sy-uzeit. ENDIF. gw_queue_stat-shortlog = p_text. ENDFORM. " LOG_ERROR * begin of INSERT P7DK900199 05.10.2009 IBM_LIMTC *&---------------------------------------------------------------------* *& Form ABORT_STUCK_JOBS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM ABORT_STUCK_JOBS . DATA: lt_v_op TYPE STANDARD TABLE OF v_op, lw_v_op LIKE LINE OF lt_v_op, lw_duration TYPE avgtim, lw_maxrun TYPE avgtim. IF p_maxrun IS INITIAL. lw_maxrun = 900. ELSE. lw_maxrun = p_maxrun. ENDIF. SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_v_op FROM v_op WHERE status = 'R' AND progname = sy-repid. LOOP AT lt_v_op INTO lw_v_op. CLEAR lw_duration. CALL FUNCTION 'DURATION_DETERMINE' EXPORTING UNIT = 'S' * FACTORY_CALENDAR = IMPORTING DURATION = lw_duration CHANGING START_DATE = lw_v_op-strtdate START_TIME = lw_v_op-strttime END_DATE = SY-DATUM END_TIME = SY-UZEIT

* *

* *

EXCEPTIONS FACTORY_CALENDAR_NOT_FOUND = 1 DATE_OUT_OF_CALENDAR_RANGE = 2 DATE_NOT_VALID = 3 UNIT_CONVERSION_ERROR = 4 SI_UNIT_MISSING = 5 PARAMETERS_NOT_VALID = 6 OTHERS = 7. IF sy-subrc <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. IF lw_duration GE lw_maxrun. CALL FUNCTION 'BP_JOB_ABORT' EXPORTING jobcount = lw_v_op-jobcount jobname = lw_v_op-jobname EXCEPTIONS CHECKING_OF_JOB_HAS_FAILED = 1 JOB_ABORT_HAS_FAILED = 2 JOB_DOES_NOT_EXIST = 3 JOB_IS_NOT_ACTIVE = 4 NO_ABORT_PRIVILEGE_GIVEN = 5 OTHERS = 6. IF sy-subrc <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.

ENDIF. ENDLOOP. ENDFORM. " ABORT_STUCK_JOBS * end of INSERT P7DK900199 05.10.2009 IBM_LIMTC * begin of INSERT P7DK900205 22.10.2009 IBM_LIMTC *&---------------------------------------------------------------------* *& Form FILE_MONITOR_NEW_DIR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FILE_MONITOR_NEW_DIR . DATA: lw_text TYPE string, lw_fifth_char TYPE c, lw_bus(3) TYPE c. DATA: lw_cmd TYPE btcxpgstim-extprog, lw_param TYPE btcxpgstim-params, lt_log TYPE STANDARD TABLE OF btcxpglog WITH HEADER LINE. DATA: lw_file_src(100) TYPE c, lw_file_tgt(100) TYPE c. *******************Change Source Directory (NEW folder)*************** lw_cmd = 'cmd /c dir'. CONCATENATE gw_xidir '\' gt_ztpi_queue-plant '*.xml /O:D' INTO lw_param. CLEAR gw_cmd. IF sy-batch = 'X'. MESSAGE i000(38) WITH 'Listing File in Directory' gw_xidir.

ELSE. CONCATENATE 'Listing File in Directory' gw_xidir INTO lw_text SEPARATED BY s pace. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = lw_text. WRITE: / lw_text. ENDIF. PERFORM execute_os_command TABLES lt_log USING lw_cmd lw_param . LOOP AT lt_log. FIND '.xml' IN lt_log-message. IF sy-subrc = 0. gt_file = lt_log-message. lw_fifth_char = gt_file-name+4(1). lw_bus = gt_file-name+6(3). IF lw_fifth_char = 'O' AND lw_bus CO '1234567890'. CLEAR gw_empty. IF sy-batch = 'X'. MESSAGE i000(38) WITH lt_log-message. ELSE. WRITE / lt_log-message. ENDIF. APPEND gt_file. ENDIF. ENDIF. ENDLOOP. * transfer a file into the processing folder READ TABLE gt_file INDEX 1. IF sy-subrc NE 0. gw_get_error = 'X'. IF sy-batch = 'X'. MESSAGE i000(38) WITH '...No XML files to get...'. ELSE. WRITE / '...No XML files to get...'. ENDIF. EXIT. ENDIF. gw_regpath = gt_file-name. CONCATENATE gw_xidir gw_regpath INTO lw_file_src SEPARATED BY '\'. CONCATENATE gw_dir_t gw_regpath INTO lw_file_tgt SEPARATED BY '\'. lw_cmd = 'cmd /c move'. CONCATENATE lw_file_src lw_file_tgt INTO lw_param SEPARATED BY space. PERFORM execute_os_command TABLES lt_log USING lw_cmd lw_param . LOOP AT lt_log. IF sy-batch = 'X'. MESSAGE i000(38) WITH lt_log-message. ELSE. WRITE: / lt_log-message. ENDIF. ENDLOOP. ENDFORM. " FILE_MONITOR_NEW_DIR * end of INSERT P7DK900205 22.10.2009 IBM_LIMTC

You might also like