Professional Documents
Culture Documents
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
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'
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