AL11 Log Deletion
Aim:
To delete files in AL11 based on date range.
Program:
REPORT al11_log_deletion.
*==================
* Data Declarations
*==================
TYPE-POOLS: icon.
* For Standard Program RSWATCH0 Data
DATA: i_outtab TYPE STANDARD TABLE OF cst_rswatch01_alv,
wa_outtab TYPE cst_rswatch01_alv,
g_fname TYPE char80 VALUE '(RSWATCH0)GT_OUTTAB'.
FIELD-SYMBOLS <fs_outtab> TYPE STANDARD TABLE.
* Structure for Directory Name
TYPES: BEGIN OF t_outtab1,
dirname TYPE shvalue_d,
END OF t_outtab1.
* Declaration of variables for FM - F4IF_INT_TABLE_VALUE_REQUEST
DATA: i_outtab1 TYPE STANDARD TABLE OF t_outtab1,
wa_outtab1 TYPE t_outtab1,
i_return LIKE ddshretval OCCURS 0 WITH HEADER LINE.
* Declarations for getting files' info from directory
DATA: i_filed TYPE TABLE OF /sdf/file,
wa_filed TYPE /sdf/file,
g_dname TYPE epsf-epsdirnam."/sdf/file-name.
* Declarations for the final table that will hold the required files' details for output
TYPES: BEGIN OF t_changing,
name TYPE /sdf/file-name,
type TYPE /sdf/file-type,
size TYPE /sdf/file-len,
date TYPE /sdf/file-mod_date,
time TYPE /sdf/file-mod_time,
END OF t_changing.
* Final Internal Table
DATA: i_ft TYPE TABLE OF t_changing,
wa_ft TYPE t_changing.
DATA: l_pos TYPE i, " Used to find the file name
l_strln TYPE i, " String length of l_rev
l_rev TYPE cst_rswatch01_alv-dirname, " Reversed string which has directory and file
l_file1 TYPE cst_rswatch01_alv-dirname, " Reversed file name
l_file2 TYPE cst_rswatch01_alv-dirname, " File name
l_dir TYPE epsf-epsdirnam, " Reversed directory
l_fdir TYPE epsf-epsdirnam. " Directory
* Deletion final path
DATA: l_path TYPE cst_rswatch01_alv-dirname.
DATA: l_answer(1) TYPE c,
l_records TYPE string,
l_text TYPE string.
* Inputs
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p_dir TYPE epsf-epsdirnam LOWER CASE DEFAULT '/data' OBLIGATORY.
SELECT-OPTIONS: s_date FOR sy-datum OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
*======================
* Initialization Event
*======================
INITIALIZATION.
* Fetch Directory Names from RSWATCH0
PERFORM main IN PROGRAM rswatch0.
ASSIGN (g_fname) TO <fs_outtab>.
CHECK sy-subrc EQ 0.
i_outtab = <fs_outtab>.
* Move the fetched directory names from I_OUTTAB to I_OUTTAB1 which supports Search Help logic
LOOP AT i_outtab INTO wa_outtab.
IF wa_outtab-dirname+0(5) = '/data'.
wa_outtab1-dirname = wa_outtab-dirname.
APPEND wa_outtab1 TO i_outtab1.
CLEAR: wa_outtab1, wa_outtab.
ENDIF.
ENDLOOP.
*=============================
* At Selection-screen event
*=============================
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dir.
CLEAR: i_return.
* Function Module for F4 Help
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'DIRNAME'
dynpprog = sy-cprog
dynpnr = sy-dynnr
dynprofield = 'P_DIR'
value_org = 'S'
TABLES
value_tab = i_outtab1
return_tab = i_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
p_dir = i_return-fieldval.
ENDIF.
AT SELECTION-SCREEN ON p_dir.
IF p_dir IS NOT INITIAL.
IF p_dir+0(5) <> '/data'.
MESSAGE text-102 TYPE 'E'.
ENDIF.
ENDIF.
READ TABLE i_outtab1 WITH KEY dirname = p_dir TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
* Reversing the input (p_dir)
CALL FUNCTION 'STRING_REVERSE'
EXPORTING
string = p_dir
lang = sy-langu
IMPORTING
rstring = l_rev
EXCEPTIONS
too_small = 1
OTHERS = 2.
IF sy-subrc = 0.
FIND FIRST OCCURRENCE OF '/' IN l_rev MATCH OFFSET l_pos.
IF l_pos <> 0.
l_file1 = l_rev+0(l_pos).
l_strln = strlen( l_rev ).
l_dir = l_rev+l_pos(l_strln).
* To get the file name
CALL FUNCTION 'STRING_REVERSE'
EXPORTING
string = l_file1
lang = sy-langu
IMPORTING
rstring = l_file2
EXCEPTIONS
too_small = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE text-103 TYPE 'E'.
ENDIF.
* To get the directory
CALL FUNCTION 'STRING_REVERSE'
EXPORTING
string = l_dir
lang = sy-langu
IMPORTING
rstring = l_fdir
EXCEPTIONS
too_small = 1
OTHERS = 2.
IF sy-subrc = 0.
g_dname = l_fdir.
ENDIF.
ELSE.
MESSAGE text-102 TYPE 'E'.
ENDIF.
ENDIF.
ELSE.
g_dname = p_dir.
ENDIF.
*=============================
* Start of Selection event
*=============================
START-OF-SELECTION.
REFRESH: i_ft, i_filed.
* Function Module to get the files from the specified directory
PERFORM get_file_attributes.
* Filtering the files based on given date range
IF l_file2 IS NOT INITIAL.
LOOP AT i_filed INTO wa_filed WHERE mod_date IN s_date AND
type = 'file, regu'.
IF wa_filed-name CP l_file2. " Contains Pattern Check
wa_ft-name = wa_filed-name.
wa_ft-type = wa_filed-type.
wa_ft-size = wa_filed-len.
wa_ft-date = wa_filed-mod_date.
wa_ft-time = wa_filed-mod_time.
APPEND wa_ft TO i_ft.
CLEAR: wa_ft, wa_filed.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT i_filed INTO wa_filed WHERE mod_date IN s_date AND
type = 'file, regu'.
wa_ft-name = wa_filed-name.
wa_ft-type = wa_filed-type.
wa_ft-size = wa_filed-len.
wa_ft-date = wa_filed-mod_date.
wa_ft-time = wa_filed-mod_time.
APPEND wa_ft TO i_ft.
CLEAR: wa_ft, wa_filed.
ENDLOOP.
ENDIF.
* Deletion logic
IF i_ft IS NOT INITIAL.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = text-106
text_question = text-107
text_button_1 = 'Yes'
icon_button_1 = '@B4@'
text_button_2 = 'No'
icon_button_2 = '@3U@'
display_cancel_button = ''
default_button = '2'
IMPORTING
answer = l_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc EQ 0.
IF l_answer = '1'.
DESCRIBE TABLE i_ft LINES l_records.
LOOP AT i_ft INTO wa_ft.
CONCATENATE g_dname '/' wa_ft-name INTO l_path.
DELETE DATASET l_path.
CLEAR: l_path.
ENDLOOP.
IF sy-subrc = 0.
l_text = text-101.
REPLACE '&1' WITH l_records INTO l_text.
MESSAGE l_text TYPE 'S'.
ENDIF.
ELSEIF l_answer = '2'.
MESSAGE text-105 TYPE 'I'.
ENDIF.
ENDIF.
ELSE.
MESSAGE text-104 TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
*&---------------------------------------------------------------------*
*& Form GET_FILE_ATTRIBUTES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_file_attributes .
TABLES epsf.
DATA: i_file_list TYPE TABLE OF epsfili,
wa_file_list TYPE epsfili.
DATA l_mtime TYPE p DECIMALS 0.
DATA l_time(10).
DATA l_date LIKE sy-datum.
CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
EXPORTING
dir_name = g_dname
TABLES
dir_list = i_file_list
EXCEPTIONS
invalid_eps_subdir = 11
sapgparam_failed = 12
build_directory_failed = 13
no_authorization = 14
read_directory_failed = 17
too_many_read_errors = 22
empty_directory_list = 23.
IF sy-subrc NE 0.
MESSAGE text-104 TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
IF i_file_list IS NOT INITIAL.
LOOP AT i_file_list INTO wa_file_list.
CALL FUNCTION 'EPS_GET_FILE_ATTRIBUTES'
EXPORTING
file_name = wa_file_list-name
dir_name = g_dname
IMPORTING
file_size = epsf-epsfilsiz
file_owner = epsf-epsfilown
file_mode = epsf-epsfilmod
file_type = epsf-epsfiltyp
file_mtime = l_mtime
EXCEPTIONS
read_directory_failed = 1
read_attributes_failed = 2
OTHERS = 3.
IF sy-subrc EQ 0.
PERFORM p6_to_date_time_tz(rstr0400) USING l_mtime
l_time
l_date.
wa_filed-name = wa_file_list-name.
wa_filed-type = epsf-epsfiltyp.
wa_filed-len = epsf-epsfilsiz.
wa_filed-mtime = l_mtime.
wa_filed-mod_date = l_date.
wa_filed-mod_time = l_time.
APPEND wa_filed TO i_filed.
CLEAR wa_filed.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " GET_FILE_ATTRIBUTES
Text Elements:
101 &1file(s) deleted successfully
102 Enter a valid directory name starting with ''/data''
103 File name reversal not successful
104 No file found
105 Deletion Cancelled
106 Files' Deletion Confirmation
107 Are you sure you want to delete the file(s)?
Selection Texts:
P_DIR Path
S_DATE Date Range
To delete files in AL11 based on date range.
Program:
REPORT al11_log_deletion.
*==================
* Data Declarations
*==================
TYPE-POOLS: icon.
* For Standard Program RSWATCH0 Data
DATA: i_outtab TYPE STANDARD TABLE OF cst_rswatch01_alv,
wa_outtab TYPE cst_rswatch01_alv,
g_fname TYPE char80 VALUE '(RSWATCH0)GT_OUTTAB'.
FIELD-SYMBOLS <fs_outtab> TYPE STANDARD TABLE.
* Structure for Directory Name
TYPES: BEGIN OF t_outtab1,
dirname TYPE shvalue_d,
END OF t_outtab1.
* Declaration of variables for FM - F4IF_INT_TABLE_VALUE_REQUEST
DATA: i_outtab1 TYPE STANDARD TABLE OF t_outtab1,
wa_outtab1 TYPE t_outtab1,
i_return LIKE ddshretval OCCURS 0 WITH HEADER LINE.
* Declarations for getting files' info from directory
DATA: i_filed TYPE TABLE OF /sdf/file,
wa_filed TYPE /sdf/file,
g_dname TYPE epsf-epsdirnam."/sdf/file-name.
* Declarations for the final table that will hold the required files' details for output
TYPES: BEGIN OF t_changing,
name TYPE /sdf/file-name,
type TYPE /sdf/file-type,
size TYPE /sdf/file-len,
date TYPE /sdf/file-mod_date,
time TYPE /sdf/file-mod_time,
END OF t_changing.
* Final Internal Table
DATA: i_ft TYPE TABLE OF t_changing,
wa_ft TYPE t_changing.
DATA: l_pos TYPE i, " Used to find the file name
l_strln TYPE i, " String length of l_rev
l_rev TYPE cst_rswatch01_alv-dirname, " Reversed string which has directory and file
l_file1 TYPE cst_rswatch01_alv-dirname, " Reversed file name
l_file2 TYPE cst_rswatch01_alv-dirname, " File name
l_dir TYPE epsf-epsdirnam, " Reversed directory
l_fdir TYPE epsf-epsdirnam. " Directory
* Deletion final path
DATA: l_path TYPE cst_rswatch01_alv-dirname.
DATA: l_answer(1) TYPE c,
l_records TYPE string,
l_text TYPE string.
* Inputs
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p_dir TYPE epsf-epsdirnam LOWER CASE DEFAULT '/data' OBLIGATORY.
SELECT-OPTIONS: s_date FOR sy-datum OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
*======================
* Initialization Event
*======================
INITIALIZATION.
* Fetch Directory Names from RSWATCH0
PERFORM main IN PROGRAM rswatch0.
ASSIGN (g_fname) TO <fs_outtab>.
CHECK sy-subrc EQ 0.
i_outtab = <fs_outtab>.
* Move the fetched directory names from I_OUTTAB to I_OUTTAB1 which supports Search Help logic
LOOP AT i_outtab INTO wa_outtab.
IF wa_outtab-dirname+0(5) = '/data'.
wa_outtab1-dirname = wa_outtab-dirname.
APPEND wa_outtab1 TO i_outtab1.
CLEAR: wa_outtab1, wa_outtab.
ENDIF.
ENDLOOP.
*=============================
* At Selection-screen event
*=============================
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dir.
CLEAR: i_return.
* Function Module for F4 Help
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'DIRNAME'
dynpprog = sy-cprog
dynpnr = sy-dynnr
dynprofield = 'P_DIR'
value_org = 'S'
TABLES
value_tab = i_outtab1
return_tab = i_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
p_dir = i_return-fieldval.
ENDIF.
AT SELECTION-SCREEN ON p_dir.
IF p_dir IS NOT INITIAL.
IF p_dir+0(5) <> '/data'.
MESSAGE text-102 TYPE 'E'.
ENDIF.
ENDIF.
READ TABLE i_outtab1 WITH KEY dirname = p_dir TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
* Reversing the input (p_dir)
CALL FUNCTION 'STRING_REVERSE'
EXPORTING
string = p_dir
lang = sy-langu
IMPORTING
rstring = l_rev
EXCEPTIONS
too_small = 1
OTHERS = 2.
IF sy-subrc = 0.
FIND FIRST OCCURRENCE OF '/' IN l_rev MATCH OFFSET l_pos.
IF l_pos <> 0.
l_file1 = l_rev+0(l_pos).
l_strln = strlen( l_rev ).
l_dir = l_rev+l_pos(l_strln).
* To get the file name
CALL FUNCTION 'STRING_REVERSE'
EXPORTING
string = l_file1
lang = sy-langu
IMPORTING
rstring = l_file2
EXCEPTIONS
too_small = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE text-103 TYPE 'E'.
ENDIF.
* To get the directory
CALL FUNCTION 'STRING_REVERSE'
EXPORTING
string = l_dir
lang = sy-langu
IMPORTING
rstring = l_fdir
EXCEPTIONS
too_small = 1
OTHERS = 2.
IF sy-subrc = 0.
g_dname = l_fdir.
ENDIF.
ELSE.
MESSAGE text-102 TYPE 'E'.
ENDIF.
ENDIF.
ELSE.
g_dname = p_dir.
ENDIF.
*=============================
* Start of Selection event
*=============================
START-OF-SELECTION.
REFRESH: i_ft, i_filed.
* Function Module to get the files from the specified directory
PERFORM get_file_attributes.
* Filtering the files based on given date range
IF l_file2 IS NOT INITIAL.
LOOP AT i_filed INTO wa_filed WHERE mod_date IN s_date AND
type = 'file, regu'.
IF wa_filed-name CP l_file2. " Contains Pattern Check
wa_ft-name = wa_filed-name.
wa_ft-type = wa_filed-type.
wa_ft-size = wa_filed-len.
wa_ft-date = wa_filed-mod_date.
wa_ft-time = wa_filed-mod_time.
APPEND wa_ft TO i_ft.
CLEAR: wa_ft, wa_filed.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT i_filed INTO wa_filed WHERE mod_date IN s_date AND
type = 'file, regu'.
wa_ft-name = wa_filed-name.
wa_ft-type = wa_filed-type.
wa_ft-size = wa_filed-len.
wa_ft-date = wa_filed-mod_date.
wa_ft-time = wa_filed-mod_time.
APPEND wa_ft TO i_ft.
CLEAR: wa_ft, wa_filed.
ENDLOOP.
ENDIF.
* Deletion logic
IF i_ft IS NOT INITIAL.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = text-106
text_question = text-107
text_button_1 = 'Yes'
icon_button_1 = '@B4@'
text_button_2 = 'No'
icon_button_2 = '@3U@'
display_cancel_button = ''
default_button = '2'
IMPORTING
answer = l_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc EQ 0.
IF l_answer = '1'.
DESCRIBE TABLE i_ft LINES l_records.
LOOP AT i_ft INTO wa_ft.
CONCATENATE g_dname '/' wa_ft-name INTO l_path.
DELETE DATASET l_path.
CLEAR: l_path.
ENDLOOP.
IF sy-subrc = 0.
l_text = text-101.
REPLACE '&1' WITH l_records INTO l_text.
MESSAGE l_text TYPE 'S'.
ENDIF.
ELSEIF l_answer = '2'.
MESSAGE text-105 TYPE 'I'.
ENDIF.
ENDIF.
ELSE.
MESSAGE text-104 TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
*&---------------------------------------------------------------------*
*& Form GET_FILE_ATTRIBUTES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_file_attributes .
TABLES epsf.
DATA: i_file_list TYPE TABLE OF epsfili,
wa_file_list TYPE epsfili.
DATA l_mtime TYPE p DECIMALS 0.
DATA l_time(10).
DATA l_date LIKE sy-datum.
CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
EXPORTING
dir_name = g_dname
TABLES
dir_list = i_file_list
EXCEPTIONS
invalid_eps_subdir = 11
sapgparam_failed = 12
build_directory_failed = 13
no_authorization = 14
read_directory_failed = 17
too_many_read_errors = 22
empty_directory_list = 23.
IF sy-subrc NE 0.
MESSAGE text-104 TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
IF i_file_list IS NOT INITIAL.
LOOP AT i_file_list INTO wa_file_list.
CALL FUNCTION 'EPS_GET_FILE_ATTRIBUTES'
EXPORTING
file_name = wa_file_list-name
dir_name = g_dname
IMPORTING
file_size = epsf-epsfilsiz
file_owner = epsf-epsfilown
file_mode = epsf-epsfilmod
file_type = epsf-epsfiltyp
file_mtime = l_mtime
EXCEPTIONS
read_directory_failed = 1
read_attributes_failed = 2
OTHERS = 3.
IF sy-subrc EQ 0.
PERFORM p6_to_date_time_tz(rstr0400) USING l_mtime
l_time
l_date.
wa_filed-name = wa_file_list-name.
wa_filed-type = epsf-epsfiltyp.
wa_filed-len = epsf-epsfilsiz.
wa_filed-mtime = l_mtime.
wa_filed-mod_date = l_date.
wa_filed-mod_time = l_time.
APPEND wa_filed TO i_filed.
CLEAR wa_filed.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " GET_FILE_ATTRIBUTES
Text Elements:
101 &1file(s) deleted successfully
102 Enter a valid directory name starting with ''/data''
103 File name reversal not successful
104 No file found
105 Deletion Cancelled
106 Files' Deletion Confirmation
107 Are you sure you want to delete the file(s)?
Selection Texts:
P_DIR Path
S_DATE Date Range
Comments
Post a Comment