0% found this document useful (0 votes)
416 views15 pages

Automatic Monitoring of MDM Inbound and Outbound Ports Using ABAP

This program connects to an FTP server, retrieves file listing information, and sends an email with attachment(s) if files are found. Specifically, it: 1. Connects to an FTP server and retrieves directory listings for specified paths. 2. Loops through the listings to get modification date/time for files. 3. Populates tables with listing info and attachment data if files were modified today. 4. Sends an email with listing info in body and attachment(s) if tables contain data and email parameter is provided.

Uploaded by

mvijay2001
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
416 views15 pages

Automatic Monitoring of MDM Inbound and Outbound Ports Using ABAP

This program connects to an FTP server, retrieves file listing information, and sends an email with attachment(s) if files are found. Specifically, it: 1. Connects to an FTP server and retrieves directory listings for specified paths. 2. Loops through the listings to get modification date/time for files. 3. Populates tables with listing info and attachment data if files were modified today. 4. Sends an email with listing info in body and attachment(s) if tables contain data and email parameter is provided.

Uploaded by

mvijay2001
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 15

Create an abap program as shown below

Use the below code and schedule it


background as per your requirement.
*&---------------------------------------------------------------------*
*& Report ZFTP_FILES
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zmdm_ftp_files.

DATA: v_key TYPE i VALUE 26101957,


v_compress(1) TYPE c VALUE 'N',
v_hdl TYPE i,
v_slen TYPE i.

DATA: BEGIN OF itab_files OCCURS 0,


line(100) TYPE c,
END OF itab_files.

DATA: BEGIN OF itab_files_det OCCURS 0,


line(100) TYPE c,
END OF itab_files_det.
DATA: itab_direc TYPE TABLE OF zmdm_ftp INITIAL SIZE 0,
wa_direc TYPE zmdm_ftp.

DATA: l_date TYPE char10,


wa_docdata TYPE sodocchgi1,
itab_objpack TYPE STANDARD TABLE OF sopcklsti1,
itab_objtxt TYPE STANDARD TABLE OF solisti1,
itab_objbin1 TYPE STANDARD TABLE OF solisti1,
wa_objbin1 TYPE solisti1,
wa_objtxt TYPE solisti1,
wa_objpack TYPE sopcklsti1,
wa_reclist TYPE somlreci1,
itab_reclist TYPE STANDARD TABLE OF somlreci1.

DATA: v_pwd TYPE char30,


v_len TYPE i,
l_count TYPE i.

CONSTANTS: c_ret TYPE char1 VALUE cl_abap_char_utilities=>cr_lf.

PARAMETERS: p_user TYPE char12 OBLIGATORY LOWER CASE,


p_pwd TYPE char32 OBLIGATORY LOWER CASE,
p_host(60) TYPE c OBLIGATORY LOWER CASE,
* p_dir(125) TYPE c OBLIGATORY LOWER CASE,
p_dest TYPE rfcdes-rfcdest DEFAULT 'SAPFTPA' OBLIGATORY.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.


PARAMETER: p_email TYPE soobjinfi1-obj_name LOWER CASE.
SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_email.


*** F4 help for application server file
PERFORM sub_mail_f4.

START-OF-SELECTION.

v_slen = STRLEN( p_pwd ).

CALL FUNCTION 'HTTP_SCRAMBLE'


EXPORTING
SOURCE = p_pwd
sourcelen = v_slen
key = v_key
IMPORTING
destination = v_pwd.

CALL FUNCTION 'FTP_CONNECT'


EXPORTING
user = p_user
password = v_pwd
host = p_host
rfc_destination = p_dest
IMPORTING
handle = v_hdl
EXCEPTIONS
not_connected = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

SELECT * FROM zmdm_ftp INTO TABLE itab_direc.

LOOP AT itab_direc INTO wa_direc.


DATA: v_directory(175) TYPE c,
l_line TYPE string,
itab_result TYPE TABLE OF text WITH HEADER LINE.

*Command for directory path


REFRESH itab_result.
CLEAR l_count.

DO 3 TIMES.
l_count = l_count + 1.
CLEAR v_directory.
CASE l_count.
WHEN 1.
CONCATENATE wa_direc-map '/Exception/ImportX'(002) INTO v_directory.
WHEN 2.
CONCATENATE wa_direc-map '/Exception/StructuralX'(003) INTO v_directory.
WHEN 3.
CONCATENATE wa_direc-map '/Exception/ValueX'(004) INTO v_directory.
ENDCASE.

CONDENSE v_directory.
CONCATENATE 'cd'(005) v_directory INTO v_directory SEPARATED BY space.

CALL FUNCTION 'FTP_COMMAND'


EXPORTING
handle = v_hdl
command = v_directory
compress = v_compress
TABLES
data = itab_result
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.

DATA: v_lines(3) TYPE c,


v_command(80) TYPE c.

FREE itab_files.
*Get the file names on remote server
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = v_hdl
command = 'nlist'(006)
compress = v_compress "N
TABLES
data = itab_files
EXCEPTIONS
command_error = 1
tcpip_error = 2.

IF sy-subrc = 0.
DELETE itab_files FROM 1 TO 3.

CLEAR v_lines.
DESCRIBE TABLE itab_files LINES v_lines.
DELETE itab_files INDEX v_lines.

* DESCRIBE TABLE itab_files LINES v_lines.


CLEAR v_lines.
LOOP AT itab_files.
*Get the Modification date and time for the TC05 files
CONCATENATE 'modtime'(007) itab_files-line INTO v_command SEPARATED BY space.
REFRESH itab_files_det.
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = v_hdl
command = v_command
compress = v_compress "N
TABLES
data = itab_files_det.
* EXCEPTIONS
* command_error = 1
* tcpip_error = 2.

DELETE itab_files_det INDEX 1.

LOOP AT itab_files_det.
REPLACE itab_files-line IN itab_files_det-line WITH space.
CONDENSE itab_files_det-line.
CLEAR l_date.
CONCATENATE itab_files_det-line+6(4) itab_files_det-line+0(2) itab_files_det-line+3(2)
INTO l_date.
IF l_date = sy-datum.
v_lines = v_lines + 1.
ENDIF.
ENDLOOP.
ENDLOOP.

CLEAR:v_len, wa_objbin1.
v_len = STRLEN( v_directory ).
IF v_lines IS NOT INITIAL.
CONCATENATE v_directory+3(v_len) wa_direc-bound v_lines INTO l_line SEPARATED
BY cl_abap_char_utilities=>horizontal_tab. "' '.
CONCATENATE c_ret l_line INTO wa_objbin1-line.
APPEND wa_objbin1 TO itab_objbin1.

WRITE:/3 v_directory+3(v_len),
125 wa_direc-bound,
135 v_lines.
ENDIF.
ENDIF.
* ENDIF.
ENDDO.
ENDLOOP.

* Disconnect the connection


CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
handle = v_hdl.

*Close the connection


CALL FUNCTION 'RFC_CONNECTION_CLOSE'
EXPORTING
destination = p_dest.
* EXCEPTIONS
* OTHERS = 1.

IF itab_objbin1[] IS NOT INITIAL AND p_email IS NOT INITIAL.


PERFORM sub_send_mail.
ENDIF.

*&---------------------------------------------------------------------*
*& Form sub_mail_f4
*&---------------------------------------------------------------------*
FORM sub_mail_f4 .

DATA: itab_soxdl TYPE STANDARD TABLE OF soxdl.

CALL FUNCTION 'SO_DLI_LIST_READ_XDL'


EXPORTING
private = 'X'
public = 'X'
subscript = 'X'
TABLES
dli_display_tab = itab_soxdl
EXCEPTIONS
communication_failure = 1
dl_list_no_entries = 2
owner_not_exist =3
system_failure =4
x_error =5
parameter_error =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.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'


EXPORTING
retfield = 'OBJNAM'
dynpprog = sy-cprog
dynpnr = sy-dynnr
dynprofield = 'P_EMAIL'
value_org = 'S'
TABLES
value_tab = itab_soxdl[]
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM. " sub_mail_f4

*&---------------------------------------------------------------------*
*& Form SUB_SEND_MAIL
*&---------------------------------------------------------------------*
FORM sub_send_mail .

DATA: l_sdate TYPE char10.

WRITE sy-datum TO l_sdate.


CONCATENATE 'Inbound and Outbound Exceptions for the date'(008) l_sdate INTO wa_objtxt-
line SEPARATED BY space.
APPEND wa_objtxt TO itab_objtxt.

CLEAR v_lines.
* Describe the body of the message
DESCRIBE TABLE itab_objtxt LINES v_lines.
READ TABLE itab_objtxt INTO wa_objtxt INDEX v_lines.
wa_docdata-doc_size = ( v_lines - 1 ) * 255 + STRLEN( wa_objtxt ).

CLEAR wa_objpack-transf_bin.
wa_objpack-head_start = 1.
wa_objpack-head_num = 0.
wa_objpack-body_start = 1.
wa_objpack-body_num = v_lines.
wa_objpack-doc_type = 'RAW'.
APPEND wa_objpack TO itab_objpack.

*Attachment 1
CLEAR v_lines.
DESCRIBE TABLE itab_objbin1 LINES v_lines.
wa_objpack-doc_size = v_lines * 255.
wa_objpack-transf_bin = 'X'.
wa_objpack-head_start = 1.
wa_objpack-head_num = 1.
wa_objpack-body_start = 1.
wa_objpack-body_num = v_lines.
wa_objpack-doc_type = 'XLS'.
wa_objpack-obj_descr = 'Exception File'(009).
APPEND wa_objpack TO itab_objpack.

wa_docdata-obj_descr = 'FTP File Lists in Exception'(010).


wa_docdata-obj_name = 'FTP File Lists in Exception'(010).

*Create the list of recipients


wa_reclist-receiver = p_email.
wa_reclist-rec_type = 'C'.
APPEND wa_reclist TO itab_reclist.

*Send the e-mail


CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = wa_docdata
put_in_outbox = 'X'
commit_work = 'X'
TABLES
packing_list = itab_objpack
contents_bin = itab_objbin1
contents_txt = itab_objtxt
receivers = itab_reclist
EXCEPTIONS
too_many_receivers =1
document_not_sent =2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error =5
x_error =6
enqueue_error =7
OTHERS = 8.

IF sy-subrc = 0.
COMMIT WORK.
SKIP 1.
WRITE:/ 'Email Successfully sent to'(011), p_email, 'Distribution list'(013).
ELSE.
SKIP 1.
WRITE:/ 'Email not sent to'(012), p_email, 'Distribution list'(013).
ENDIF.

ENDFORM. " SUB_SEND_MAIL

You might also like