In diesem Report werden Methoden der Klasse CL_GUI_FRONTEND_SERVICES eingesetzt.
- 1.Verzeichnis lesen
- 2.Unterverzeichnisse lesen
- 3.Dateien der Unterverzeichnisse löschen
- 4.Verzeichnisse löschen
Verzeichnisse lassen sich nicht löschen, wenn sie nicht leer sind. Dazu müssen wir also zuerst einmal alle Dateien in den Unterverzeichnissen löschen um dann anschließend auch das jeweilige Verzeichnis löschen zu können.
REPORT ZFI_BILD_STAPEL_DEL.
TABLES: ZFI_CHKBEL, /PSIIC/CAPT, /PSIIC/HEAD.
DATA: FNAME LIKE EPSF-EPSDIRNAM,
LT_DIR_LIST TYPE STANDARD TABLE OF FILE_INFO,
WA_DIR_LIST TYPE FILE_INFO,
LT_UDIR_LIST TYPE STANDARD TABLE OF FILE_INFO,
WA_UDIR_LIST TYPE FILE_INFO,
IV_DIR_NAME TYPE STRING,
IV_UDIR_NAME TYPE STRING,
LV_DIR_NAME TYPE STRING,
LV_UDIR_NAME TYPE STRING,
LV_COUNT TYPE I,
LV_TEXT TYPE STRING.
DATA : RC TYPE I.
DATA: WA_ZFI_CHKBEL TYPE ZFI_CHKBEL,
LV_BLNUM TYPE ZFI_CHKBEL-BLNUM,
LV_DOIT TYPE C VALUE “.
SELECTION-SCREEN BEGIN OF BLOCK MAIN WITH FRAME TITLE TEXT–001.
PARAMETERS: SPOOL_ID LIKE EPSF-EPSDIRNAM.
SELECT-OPTIONS P_BUDAT FOR ZFI_CHKBEL-BUDAT.
PARAMETERS: TESTRUN LIKE RFPDO-RFBICHCK DEFAULT ‚X‘.
SELECTION-SCREEN END OF BLOCK MAIN.
MOVE SPOOL_ID TO IV_DIR_NAME.
PERFORM READ_FILE.
*&———————————————————————*
*& Form READ_FILE
*&———————————————————————*
* text
*———————————————————————-*
FORM READ_FILE.
* Erst mal in das Verzeichnis schauen, welche Dateien und Unterverzeichnisse vorhanden sind
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_LIST_FILES
EXPORTING
DIRECTORY = IV_DIR_NAME
CHANGING
FILE_TABLE = LT_DIR_LIST
COUNT = LV_COUNT
EXCEPTIONS
CNTL_ERROR = 1
DIRECTORY_LIST_FILES_FAILED = 2
WRONG_PARAMETER = 3
ERROR_NO_GUI = 4
NOT_SUPPORTED_BY_GUI = 5.
IF SY-SUBRC 0.
CASE SY-SUBRC.
WHEN ‚1‘.
LV_TEXT = ‚CNTL_ERROR‘.
WHEN ‚2‘.
LV_TEXT = ‚DIRECTORY_LIST_FILES_FAILED‘.
WHEN ‚3‘.
LV_TEXT = ‚WRONG_PARAMETER‘.
WHEN ‚4‘.
LV_TEXT = ‚ERROR_NO_GUI‘.
WHEN ‚5‘.
LV_TEXT = ‚NOT_SUPPORTED_BY_GUI‘.
ENDCASE.
WRITE: / LV_TEXT.
ENDIF.
* So, nun arbeiten wir die Verzeichnissliste mal ab.
LOOP AT LT_DIR_LIST INTO WA_DIR_LIST.
(hier folgt nun eine Verarbeitung für diesen speziellen Fall, da die Verzeichnisnamen gleichlautend der Belegnummern sind. Z.B. Verzeichnisname 61476 ist gleich Belegnummer 61476) Das soll aber nur ein Beispiel einer Verarbeitung darstellen.
* Jetzt sehen wir mal nach, welche Belege bereits gebucht sind. Die dazu gehörenden Dateien können dann aus dem
* Filesystem entfernt werden.
PERFORM CHECK_IC_BELEG.
CHECK TESTRUN = “.
* Gibt’s was zu tun? Dann los.
CHECK LV_DOIT = ‚X‘.
CLEAR LV_DIR_NAME.
CONCATENATE IV_DIR_NAME WA_DIR_LIST-FILENAME INTO LV_DIR_NAME.
* Verzeichnisse lassen sich nur löschen, wenn sie leer sind. Deshalb
* erzeugen wir eine Liste des Unterverzeichnises ->
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_LIST_FILES
EXPORTING
DIRECTORY = LV_DIR_NAME
CHANGING
FILE_TABLE = LT_UDIR_LIST
COUNT = LV_COUNT
EXCEPTIONS
CNTL_ERROR = 1
DIRECTORY_LIST_FILES_FAILED = 2
WRONG_PARAMETER = 3
ERROR_NO_GUI = 4
NOT_SUPPORTED_BY_GUI = 5.
IF SY-SUBRC 0.
CASE SY-SUBRC.
WHEN ‚1‘.
LV_TEXT = ‚CNTL_ERROR‘.
WHEN ‚2‘.
LV_TEXT = ‚DIRECTORY_LIST_FILES_FAILED‘.
WHEN ‚3‘.
LV_TEXT = ‚WRONG_PARAMETER‘.
WHEN ‚4‘.
LV_TEXT = ‚ERROR_NO_GUI‘.
WHEN ‚5‘.
LV_TEXT = ‚NOT_SUPPORTED_BY_GUI‘.
ENDCASE.
WRITE: / LV_TEXT.
ENDIF.
* -> und löschen die Dateien im Unterordner.
LOOP AT LT_UDIR_LIST INTO WA_UDIR_LIST.
CONCATENATE LV_DIR_NAME ‚_WA_UDIR_LIST–FILENAME INTO LV_UDIR_NAME.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_DELETE
EXPORTING
FILENAME = LV_UDIR_NAME
CHANGING
RC = RC
EXCEPTIONS
FILE_DELETE_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
FILE_NOT_FOUND = 4
ACCESS_DENIED = 5
UNKNOWN_ERROR = 6
NOT_SUPPORTED_BY_GUI = 7
WRONG_PARAMETER = 8.
IF SY–SUBRC 0.
CASE SY–SUBRC.
WHEN ‚1‘.
LV_TEXT = ‚FILE_DELETE_FAILED‘.
WHEN ‚2‘.
LV_TEXT = ‚CNTL_ERROR‘.
WHEN ‚3‘.
LV_TEXT = ‚ERROR_NO_GUI‘.
WHEN ‚4‘.
LV_TEXT = ‚FILE_NOT_FOUND‘.
WHEN ‚5‘.
LV_TEXT = ‚ACCESS_DENIED‘.
WHEN ‚6‘.
LV_TEXT = ‚UNKNOWN_ERROR‘.
WHEN ‚7‘.
LV_TEXT = ‚NOT_SUPPORTED_BY_GUI‘.
WHEN ‚8‘.
LV_TEXT = ‚WRONG_PARAMETER‘.
ENDCASE.
WRITE: / LV_TEXT.
ENDIF.
IF SY–SUBRC = 0.
CLEAR LV_TEXT.
CONCATENATE ‚- Die Datei ‚ LV_UDIR_NAME ‚wurde gelöscht.‘
INTO LV_TEXT SEPARATED BY SPACE.
WRITE: / LV_TEXT.
ENDIF.
ENDLOOP.
* Wenn das Unterverzeichnis leer ist, dann kann auch der übergeordnete Ordner gelöscht werden.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_DELETE
EXPORTING
DIRECTORY = LV_DIR_NAME
CHANGING
RC = RC
EXCEPTIONS
DIRECTORY_DELETE_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
PATH_NOT_FOUND = 4
DIRECTORY_ACCESS_DENIED = 5
UNKNOWN_ERROR = 6
NOT_SUPPORTED_BY_GUI = 7
WRONG_PARAMETER = 8.
IF SY–SUBRC 0.
CASE SY–SUBRC.
WHEN ‚1‘.
LV_TEXT = ‚DIRECTORY_DELETE_FAILED‘.
WHEN ‚2‘.
LV_TEXT = ‚CNTL_ERROR‘.
WHEN ‚3‘.
LV_TEXT = ‚ERROR_NO_GUI‘.
WHEN ‚4‘.
LV_TEXT = ‚PATH_NOT_FOUND‘.
WHEN ‚5‘.
LV_TEXT = ‚DIRECTORY_ACCESS_DENIED‘.
WHEN ‚6‘.
LV_TEXT = ‚UNKNOWN_ERROR‘.
WHEN ‚7‘.
LV_TEXT = ‚NOT_SUPPORTED_BY_GUI‘.
WHEN ‚8‘. LV_TEXT
= ‚WRONG_PARAMETER‘.
ENDCASE.
WRITE: / LV_TEXT.
ENDIF.
IF SY–SUBRC = 0.
CLEAR LV_TEXT.
CONCATENATE ‚Das Verzeichnis ‚ LV_DIR_NAME ‚wurde gelöscht‘
INTO LV_TEXT SEPARATED BY SPACE.
WRITE: / LV_TEXT.
ENDIF.
ENDLOOP.
ENDFORM. „READ_FILE
*&———————————————————————*
*& Form check_IC_Beleg
*&———————————————————————*
* text
*———————————————————————-*
FORM CHECK_IC_BELEG.
* Suche den IC-Beleg zum Bildstapel
* Wenn dieser bereits gebucht wurde, dann machen wir es so!
CLEAR LV_DOIT.
IF WA_DIR_LIST–FILENAME CO ‚0123456789 ‚.
UNPACK WA_DIR_LIST–FILENAME TO LV_BLNUM.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF WA_ZFI_CHKBEL
FROM /PSIIC/CAPT
WHERE BLNUM = LV_BLNUM.“ AND
* INP_OBJTYPE = ‚PSIIC/HDR‘.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF WA_ZFI_CHKBEL
FROM /PSIIC/HEAD
WHERE BLNUM = WA_ZFI_CHKBEL–INP_OBJKEY.
IF SY–SUBRC = 0.
IF WA_ZFI_CHKBEL–PSTAT = ‚POSTED‘.
IF TESTRUN = ‚X‘.
CLEAR LV_TEXT.
CONCATENATE ‚Das Verzeichnis ‚ WA_DIR_LIST–FILENAME ‚ kann gelöscht werden‘
INTO LV_TEXT SEPARATED BY SPACE.
WRITE: / LV_TEXT.
ENDIF. LV_DOIT
= ‚X‘.
ENDIF.
ENDIF.
ENDIF.
* WA_DIR_LIST-FILENAME
ENDFORM. „check_IC_Beleg_