Das Navigieren im Windows Explorer, Löschen und Erstellen sowie Ablegen, Kopieren und Verschieben von Ordnern und Dateien sind ein fester Bestandteil der Tätigkeiten eines kaufmännischen Mitarbeitenden oder sonstiger Personen, die mit EDV-Systemen interagieren. Diese Tätigkeiten sind oftmals Teilaktivitäten eines repetitiven Prozesses, wie beispielsweise das Kontieren und Ablegen von PDF Kundenrechnungen oder das Versenden von Excel Reports. Prozesse, die sich aufgrund ihrer repetitiven Eigenschaft und simplen Struktur besonders zur Automatisierung mit RPA eignen. Für Prozessautomatisierungen von administrativen Tätigkeiten ist deshalb ein standardisiertes, effizientes und dennoch dynamisches Folder und File Management ausschlaggebend. Dynamisch, weil die automatisierten Prozesse teilweise auf unterschiedlichen Maschinen oder Ordnerumgebungen (Lokal, SharePoint, Google Drive, Dropbox, usw.) ausgeführt werden müssen und sich deshalb Eigenschaften wie Dokumentenpfad, Ordnerstruktur, etc. unterscheiden können. In diesem ersten Blogbeitrag der Blogreihe „UiPath – File und Folder Management“ werden einige Aktivitäten, Vorgehen und Methoden für ein sinnvolles Folder und File Management für Automatisierungen mit UiPath auf lokaler Umgebung aufgezeigt.
Um mit Files und Folder arbeiten zu können, sind die Pfade der jeweiligen Dokumente notwendig, die in UiPath als String deklariert werden. In vielen Prozessen werden die Pfade bereits bei Prozessentwicklung über Assign Aktivitäten oder das zentrale Config hineingereicht. Handelt es sich aber um dynamische Pfade, beispielsweise weil ein Dokumente erst während der Prozessausführung generiert wird, müssen diese während der Prozessausführung ermittelt werden.
Die Methoden zur Ermittlung von Folder (GetDirectories) oder Files (GetFiles) unterscheiden sich dabei. Die Methoden werden in Assign Aktivitäten zur Pfadabfrage verwendet, die wiederum einer entsprechenden String oder String-Array Variabel zugewiesen werden. Die wichtigsten Funktionen in diesem Zusammenhang sind:
Assign des Beispielpfads:
- String: str_ExamplePath = „C:\Users\BeispielUser\Beispielpfad\Intern\BeispielFolder1\Beispielfolder2“
Um den Pfad dynamisch zu gestalten, kann mit Wildcards wie „*“ oder „?“ gearbeitet werden:
- String: str_ExamplePath = „*\Intern\BeispielFolder1\Beispielfolder2“
Pfad des aktuell verwendeten Ordners ermitteln:
- String: str_CurrentDirectoryPath = Directory.GetCurrentDirectory
Alle Ordner und Unterordner in aktuell verwendetem Ordner:
- String-Array: arr_CurrentDirectorySubfolders = Directory.GetDirectories(IO.Directory.GetCurrentDirectory,“*.*“,SearchOption.AllDirectories)
Alle Ordner und Unterordner in spezifischem Ordner:
- String-Array: arr_DirectorySubfolders = Directory.GetFiles(str_ExamplePath,“*“,SearchOption.AllDirectories)
Alle Files in spezifischem Ordner:
- String-Array: arr_ExampleFiles = Directory.GetFiles(str_ExamplePath).ToString
In einigen Prozessen, wie beispielsweise der Verarbeitung von Rechnungen oder das Ablegen von Reports, kann es notwendig sein, dass nur spezifische Dokumententypen in einem Ordner verarbeitet oder nicht verarbeitet werden sollen. In UiPath kann für diese Anwendungsfälle die Query so eingegrenzt werden, dass lediglich die Pfade der gewünschten Dokumententypen in ein String oder ein String-Array geschrieben werden:
Nur Excel Files in einem Ordner:
- String-Array: arr_ExcelFilesPath = Directory.GetFiles(str_ExamplePath,“*.xlsx“)
Nur Bilddateien („.jpg; .jpeg; .png“) in einem Ordner:
- String-Array: arr_PicturePath = Directory.GetFiles(str_ExamplePath, „*.png“).Concat(Directory.GetFiles(str_ExamplePath,“*.jpg“)).Concat(Directory.GetFiles(str_ExamplePath,“*.jpeg“)).ToArray
Alle Files ausser „.zip“ Dateien in einem Ordner:
- String-Array: arr_FilesWithoutZip = Directory.GetFiles(„str_ExamplePath“).Where(Funktion(n)path.GetExtension(n)<>“.zip“).ToArray
Zur Abarbeitung der vorgesehenen Files kann die Reihenfolge signifikant sein. Wenn das String-Array mit den entsprechenden Pfaden zu den Verarbeitungsdateien noch nicht deklariert wurde, kann die Anordnung direkt über eine Assign Aktivität bestimmt werden:
Files nach letztem Bearbeitungsdatum sortieren:
- String-Array: arr_SortFilesLastWriteTime = Directory.GetFiles(“str_ExamplePath”).OrderByDescending(Function(x) x.LastWriteTime).ToArray
IEnumberable mit Pfad des aktuellsten Files aus Ordner übernehmen:
- Ienumerable: ien_LatestFileInFolder = Directory.GetFiles(str_ExamplePath,”*”,SearchOption.AllDirectories).OrderByDescending(Function(d) New FileInfo(d).CreationTime).Take(1)
Zusätzlich können die Arrays oder Strings mit dem Dokumentenpfad wichtige Informationen enthalten, die für den Prozess oder die Prozessgestaltung wichtig sind. Hier werden einige Funktionen aufgeführt, um File oder Ordnerinformationen zu ermitteln:
Zählen aller Files in einem Ordner:
- Int32: int_FilesCounter = Directory.GetFiles(str_ExamplePath).Count
Filename mit Extension (bspw. „.xlsx“):
- String: str_FileNameWithExtension = Path.GetFileName(str_ExamplePath)
Filename ohne Extension:
- String: str_FileNameWithoutExtension = Path.GetFileNameWithoutExtension(str_ExamplePath)
Erstellungsdatum eines Files:
- String: str_FileCreation = New FileInfo(str_ExamplePath).CreatedDate
Letztes Bearbeitungsdatum eines Files:
- String: str_ModificationDate = New FileInfo(str_ExamplePath).LastModifiedDate
In diesem Blogbeitrag wurden die gängigsten Methoden aufgeführt, die aber grundsätzlich viele Anwendungsfälle auf lokaler Ebene abdecken. In unserem nächsten Beitrag der Blogreihe „UiPath – File und Folder Management“ erfahren Sie mehr über den Umgang mit Files und Ordner in SharePoint. Stehen Sie vor anderen Herausforderungen im Bereich Folder und File Management oder kennen Sie andere Lösungsansätze? Lassen Sie es uns in den Kommentaren wissen!