X4 Produktdokumentation

File System Bulk

Dieser Adapter vereinfacht die Nutzung von Datei-Operationen in Technical Processes. Mit ihm lassen sich einfach Aktionen wie das Auflisten, Verschieben und Kopieren von mehreren Dateien oder Verzeichnissen durchführen. Durch die Kompatibilität mit dem ZIP in Memory Compression Adapter lassen sich auch einfach multiple Dateien und Verzeichnisse (ent-)packen.

Eigenschaften (Properties)

Operation

Bestimmt, welche Operation der Adapter durchführt

Mögliche Werte:

  • Read: Dateien auslesen

  • Write: Dateien und Verzeichnisse erzeugen/ersetzen

  • Delete: Dateien und Verzeichnisse löschen

  • GetMetadata: Metadaten von Dateien und Verzeichnissen auslesen

  • Copy: Dateien und Verzeichnisse kopieren

  • Move: Dateien und Verzeichnisse verschieben

  • List: Dateien und Verzeichnisse listen

  • ListAndRead: Dateien und Verzeichnisse listen und den Inhalt der Dateien gleich mit auslesen. (Kombiniert List mit Read)

  • ListWithMetadata: Dateien und Verzeichnisse listen und die Metadaten gleich mit auslesen. (Kombiniert List mit GetMetadata)

Die Input- und Output-Strukturen sind kompatibel mit denen des ZIP in Memory Compression Adapters.

Parameter

baseDirectory

Basis-Verzeichnis für alle Operationen

info Alle Operationen können nur in diesem Verzeichnis und seinen Unterverzeichnissen arbeiten.

Mögliche Werte: Absoluter Pfad zum Basis-Verzeichnis

subDirectory

Verzeichnis relativ zum baseDirectory als Basis für alle Operationen.

Mögliche Werte:

  • <leer>: die Operationen starten im baseDirectory

  • .: die Operationen starten im baseDirectory

  • a: die Operationen starten in <baseDirectory>/a

  • .. oder a/../..: Fehler, das baseDirectory kann auf diesem Weg nicht verlassen werden

limit

Begrenz die Anzahl der zurückgegebenen Treffer einer List-Operation.

Mögliche Werte:

  • <positive Zahl>: maximale Anzahl der zurückgelieferten Treffer

  • 0: Ergebnis ist eine leere Liste

  • <negative Zahl>: maximale Treffer-Anzahl ist unbegrenzt


Bei der Suche nach Dateien wird empfohlen, den Parameter skipDirectories auf true zu setzen, da sonst die gewünschten Treffer von Verzeichnissen verdrängt werden könnten.

maxLevel

Beschränkt die Rekursionstiefe für List-Operationen

Mögliche Werte:

  • <positive Zahl>: maximale Tiefe, die eine List-Operation in Verzeichnisse hinabsteigt

  • 1: nur der direkte Inhalt des Verzeichnisses, das durch baseDirectory/subDirectory angegeben ist

  • 0: Ergebnis ist eine leere Liste

  • <negative Zahl>: die Rekursionstiefe ist unbegrenzt

filter

Regulärer Ausdruck, der auf den relativen Pfad eines Eintrags bei List-Operationen angewendet wird. Wenn der reguläre Ausdruck zutrifft, wird der Pfad in die Ergebnismenge der Liste übernommen.

skipDirectories

Definiert, ob eine List-Operation Verzeichnis-Elemente im Ergebnis ausgibt

Mögliche Werte:

  • true: Verzeichnisse werden nicht in die Ergebnismenge von List-Operationen übernommen (nützlich in Verbindung mit limit)

  • false: Verzeichnisse werden in die Ergebnismenge von List-Operationen übernommen

overwrite

Definiert, ob bei den Operationen Write, Move oder Copy vorhandene Dateien überschrieben werden dürfen

Mögliche Werte:

  • true: Bestehende Dateien dürfen bei Write, Copy und Move überschrieben werden.

  • false: Bestehende Dateien dürfen nicht überschrieben werden.

strict

Definiert, ob für Write-Operationen ein Elternverzeichnisse vorhanden sein muss und ob das Verzeichnis für die Operation Delete leer sein muss.

Mögliche Werte:

  • true:

    • Bei Copy und Move muss das Zielverzeichnis existieren, in welches hineinkopiert wird.

    • Bei Delete müssen die Verzeichnisse leer sein.

    • Bei Write muss das Zielverzeichnis existieren, in das hineingeschrieben wird.

  • false: Die Elternverzeichnisse werden für Write-Operationen angelegt. Zudem werden Verzeichnisse auch gelöscht, wenn sie noch nicht leer sind.

Statuswerte

1

Alle Einträge für die Operation konnten erfolgreich durchgeführt werden.

0

Nicht alle Einträge für die Operation konnten erfolgreich durchgeführt werden, d.h. das Ergebnis enthält Error-Elemente.

-1

Bei der Ausführung kam es zu anderen technischen Problemen, z.B. ungültiger Input.

Input

Input-Struktur für Read, Write, GetMetadata und Delete
XML
<any>
 <!-- any mixture of file and directory elements -->
 <File name="relativePath">...Base64 content for Write...</File>
 <Directory name="relativePath" />
</any>

Input-Struktur für Copy und Move
XML
<any>
 <!-- any mixture of file and directory elements -->
 <File name="relativePath" target="relativePath" />
 <Directory name="relativePath" target="relativePath" />
</any>

Output

<Data>
  <!-- any mixture of file, directory and error elements -->
  <File name="relativePath" [size="size of file in bytes"]
      [creationTime=""] [creationTimeAsMillis=""]
      [lastModifiedTime=""] [lastModifiedTimeAsMillis=""]
      [lastAccessTime=""] [lastAccessTimeAsMillis=""]>
    <!-- base64 conten, if operation Read or ListAndRead -->
    <!-- xml structures containing metadata, if operation GetMetadata or ListWithMetadata -->
  </File>
  <Directory name="relativePath" [size="0"]
      [creationTime=""] [creationTimeAsMillis=""]
      [lastModifiedTime=""] [lastModifiedTimeAsMillis=""]
      [lastAccessTime=""] [lastAccessTimeAsMillis=""]>
    <!-- xml structures containing metadata, if operation GetMetadata or ListWithMetadata -->
  </Directory>
  <Error name="relativePath" [target="relativePath"] exception="fully qualified classname of exception"
      [size="size of file in bytes"]
      [creationTime=""] [creationTimeAsMillis=""]
      [lastModifiedTime=""] [lastModifiedTimeAsMillis=""]
      [lastAccessTime=""] [lastAccessTimeAsMillis=""]>
    <!-- base64 content if operation Write -->
  </Error>
</Data>

Write, Delete, Copy und Move haben nur dann Error-Elemente als Ergebnis, wenn es tatsächlich Fehler gab.

Beispiele für List

Voraussetzung

Folgende Verzeichnisstruktur ist gegeben:

Java
/
+ a/
| + index.html
| + logo.gif
| + content/
|   + toc.html
|   + page1.html
|   + page2.html
|   + images/
|     + pic1.png
|     + pic2.png
+ b/
  + some.html
  + other.html
  + files.html

Szenarien

Alles listen

Adapter-Konfiguration

Output

  • baseDirectory = /a

  • subDirectory =

  • limit = -1

  • maxLevel = -1

  • filter =

  • skipDirectories = false

XML
<Data>
  <File name="index.html" ... />
  <File name="logo.gif" ... />
  <Directory name="content" ... />
  <File name="content/toc.html" ... />
  <File name="content/page1.html" ... />
  <File name="content/page2.html" ... />
  <Directory name="content/images" ... />
  <File name="content/images/pic1.png" ... />
  <File name="content/images/pic2.png" ... />
</Data>

Die ersten 5 Einträge

Adapter-Konfiguration

Output

  • baseDirectory = /a

  • subDirectory =

  • limit = 5

  • maxLevel = -1

  • filter =

  • skipDirectories = false

XML
<Data>
  <File name="index.html" ... />
  <File name="logo.gif" ... />
  <Directory name="content" ... />
  <File name="content/toc.html" ... />
  <File name="content/page1.html" ... />
</Data>

Die ersten fünf Dateien

Adapter-Konfiguration

Output

  • baseDirectory = /a

  • subDirectory =

  • limit = 5

  • maxLevel = -1

  • filter =

  • skipDirectories = true

XML
<Data>
  <File name="index.html" ... />
  <File name="logo.gif" ... />
  <File name="content/toc.html" ... />
  <File name="content/page1.html" ... />
  <File name="content/page2.html" ... />
</Data>

Nur das aktuelle Verzeichnis

Adapter-Konfiguration

Output

  • baseDirectory = /a

  • subDirectory =

  • limit = -1

  • maxLevel = 1

  • filter =

  • skipDirectories = false

XML
<Data>
  <File name="index.html" ... />
  <File name="logo.gif" ... />
  <Directory name="content" ... />
</Data>

Alle Dateien und Verzeichnisse, die einen Filter erfüllen

Adapter-Konfiguration

Output

  • baseDirectory = /a

  • subDirectory =

  • limit = -1

  • maxLevel = -1

  • filter = tent

  • skipDirectories = false

XML
<Data>
  <Directory name="content" ... />
  <File name="content/toc.html" ... />
  <File name="content/page1.html" ... />
  <File name="content/page2.html" ... />
  <Directory name="content/images" ... />
  <File name="content/images/pic1.png" ... />
  <File name="content/images/pic2.png" ... />
</Data>

Alle Dateien, die einen Filter erfüllen (ohne Verzeichnisse)

Adapter-Konfiguration

Output

  • baseDirectory = /a

  • subDirectory =

  • limit = -1

  • maxLevel = -1

  • filter = tent

  • skipDirectories = true

XML
<Data>
  <File name="content/toc.html" ... />
  <File name="content/page1.html" ... />
  <File name="content/page2.html" ... />
  <File name="content/images/pic1.png" ... />
  <File name="content/images/pic2.png" ... />
</Data>

Alles unterhalb eines Unterverzeichnisses

Adapter-Konfiguration

Output

  •  baseDirectory = /a

  • subDirectory = content

  • limit = -1

  • maxLevel = -1

  • filter =

  • skipDirectories = false

XML
<Data>
  <File name="toc.html" ... />
  <File name="page1.html" ... />
  <File name="page2.html" ... />
  <Directory name="images" ... />
  <File name="images/pic1.png" ... />
  <File name="images/pic2.png" ... />
</Data> 

Alles unterhalb des aktuellen Verzeichnisses und den direkten Kindverzeichnissen

Adapter-Konfiguration

Output

  • baseDirectory = /a

  • subDirectory =

  • limit = -1

  • maxLevel = 2

  • filter =

  • skipDirectories = false

XML
 <Data>
  <File name="index.html" ... />
  <File name="logo.gif" ... />
  <Directory name="content" ... />
  <File name="content/toc.html" ... />
  <File name="content/page1.html" ... />
  <File name="content/page2.html" ... />
  <Directory name="content/images" ... />
</Data>

Das Startverzeichnis kann tief im Verzeichnisbaum liegen

Adapter-Konfiguration

Output

  • baseDirectory = /a

  • subDirectory = content/images

  • limit = -1

  • maxLevel = -1

  • filter =

  • skipDirectories = false

XML
<Data>
  <File name="pic1.png" ... />
  <File name="pic2.png" ... />
</Data>