der Betreff sagt es eigentlich schon alles. Es gibt ja mehrere Funktionsbausteine und Klassen, mit denen man Dateien auswählen kann, sowohl auf dem lokalen PC als auch auf dem SAP-Server. Was ich aber suche, ist eine Funktionalität, mit der ich auf dem Server (also nicht auf dem lokalen PC!) ein Verzeichnis auswählen kann, ohne dass der Dialog von mir verlangt, mich bis zu einer darin befindlichen Datei durchzuklicken.
Für Verzeichnisse auf dem lokalen PC bietet CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE genau diese Funktionalität. Gibt es so etwas auch für Serververzeichnisse (also die, die man in der Transaktion AL11 sieht)?
Würde mich auch interessieren.
Wir (bzw. ein Kollege) hat das vor Jahren über CL_GUI_FRONTEND_SERVICES=file_open_dialog() gelöst. Damit kann man in das Serververzeichnis durch Doppelklick rein navigieren.
Das Umständliche ist aber, dass man dann auf dem Server eine Datei angeben/auswählen muss, von der man dann nur das Verzeichnis nimmt.
Da mir das nicht gefiel, habe ich mit CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE() gearbeitet, was ja lokal auch ging. Kunden, die ihre Dateien auf dem Server haben, mussten dann einen Enhancement-Spot ausprägen und den Aufruf gegen CL_GUI_FRONTEND_SERVICES=file_open_dialog() tauschen und mit dieser unschönen Dateiauswahl leben.
Eine fertige Lösung kenne ich leider auch nicht. Im Prinzip müsste man im Root-Verzeichnis mit CALL 'C_DIR_READ_START' starten, dann jeweils mit CALL 'C_DIR_READ_NEXT' lesen und anhand vom TYPE die Verzeichnisse auslesen und am besten in einen ALV-Treeview einfügen. Pro Verzeichnis dann rekursiver Aufruf und weiteres Auslesen.
Wenn es nur auf einem bestimmten System funktionieren muss wäre ggf. noch ein Script mittels SM49 denkbar, welches dann die Verzeichnisse als Rückgabewert liefert. Ist aber aus meiner Sicht eher zu vermeiden.
Es gibt dazu den Funktionsbaustein EPS_GET_DIRECTORY_LISTING. Bis auf UNC-Pfade, die auf nicht freigegebene Laufwerke verweisen (\\host\c$ etc.), lassen sich damit Server-Verzeichnisse auslesen.
Ich rufe dafür den besagten EPS_GET_DIRECTORY_LISTING rekursiv auf und stelle das Ergebnis in einem Treeview dar.
EDIT:
Was man damit leider nicht abfangen kann bzw. worauf man bei dieser Lösung achten muss:
Im Dateisystem können auch "unendliche" Hierarchien (Unterordner zeigt via Symlink auf Überordner usw.) vorkommen. Daher zeige ich auch nur die direkte Hierachie an und erst beim Klick auf den "Expand" Button wird die nächste Verzeichnisebene geladen.
In Unix sind auch auch die Geräte bzw. Prozesse im Dateisystem eingehängt. Da kommt dann beim Versuch das Verzeichnis aufzuklappen eventuell eine Fehlermeldung. Das kann man leider technisch nicht besser abfangen weil der Funktionsbaustein darüber keine Informationen bereitstellt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.