Prüfung Datei im Pfad auf Existenz
Siehe Schlüsselbefehl Select from table where Feld LIKE.
In diesem Coding wird geprüft, ob eine Datei basierend auf einem Selektionsparameter mit Uploadpfad bereits verarbeitet wurde. Der extrahierte Dateinamen wird mit einem Datenbankfeld abgeprüft, wo alle bereits vorgenommen Uploads mit ihrem vollständigen Pfad gespeichert sind.
Diese Prüfung ist nicht trivial, da der Pfad im Selektionsparameter ungleich dem Pfad im Feld der Datenbank sein kann, obwohl die gleiche Datei angesprochen wird, wenn z. B. verschiedene User eine Datei von ihrem jeweiligen PC hochgeladen haben.
Für diesen Vergleich extrahiert man den Dateinamen aus dem Selektionsparameter und vergleicht diesen dann mit LIKE mit dem entsprechenden Datenbankfeld.
Das resultierende Coding ist dabei recht spannend, weil es einige moderne ABAP-Befehle wie Inline-Deklarationen, Alternative zum "Read Table", Zeichenketten-Templates und anderes verwendet. Siehe Neues ABAP (ab Release 7.40).
Coding
*&---------------------------------------------------------------------* *& Form CHECK_FILE_UPLOADED *&---------------------------------------------------------------------* *& Prüfe, ob der Dateiname schon importiert wurde *& und ggf. Fehlermeldung *&---------------------------------------------------------------------* FORM check_file_uploaded USING iv_file TYPE rlgrap-filename CHANGING cv_error TYPE xfeld. DATA: lt_results TYPE STANDARD TABLE OF match_result, lv_laenge TYPE i, lv_datei type rlgrap-filename. DATA(lv_file) = iv_file. * Der Dateiname muss aus dem Pfad extrahiert werden FIND ALL OCCURRENCES OF '\' IN lv_file RESULTS lt_results. * Bestimme letzten Offset vom Zeichen '\' * Beim Offset das Zeichen rechts vom letzten '\' bestimmen als Start String Dateinamen DESCRIBE TABLE lt_results LINES DATA(lv_anzahl). DATA(lv_offset) = lt_results[ lv_anzahl ]-offset. add 1 to lv_offset. * Gesamtlänge bestimmen vom Pfad lv_laenge = strlen( lv_file ). * Länge der Datei bestimmen lv_laenge = lv_laenge - lv_offset. * Dateinamen ermitteln lv_datei = lv_file+lv_offset(lv_laenge). * Für die Suche mit LIKE das Präfix '%' ergänzen, damit Datei gefunden * werden kann in Pfad, der auf der Datenbank gespeichert ist. Data(lv_search) = '%' && lv_datei. * Prüfen ob die Datei bereits in der Datenbanktabelle ZSD_UMFUHREN_K existiert Select single path into @data(lv_path) from ZSD_UMFUHREN_K where PATH like @lv_search. if sy-subrc = 0. * Für die Optik den Dateinamen mit ' .. ' umschließen lv_datei = |'{ lv_datei }'|. message i076(/FTI/WEBGUI_MSG) with lv_datei. "Dateiname &1 bereits angelegt cv_error = abap_true. endif. ENDFORM.