Dateien
Um über einen OData-Service auf Dateien aus Dateifeldern in Datengruppen zugreifen zu können, muss dem Service das entsprechende Dateifeld hinzugefügt werden. Da Intrexx für Dateifelder zusätzliche Metadaten-Felder vorhält, werden dem Entity-Type pro Dateifeld automatisch ein Feld mit dem komplexen Datentyp "IxFile" hinzugefügt. Dieser beinhaltet neben der Datei auch Metadaten, wie z.B. Dateiname, Typ und Größe. Außerdem stehen drei Funktionen für den Zugriff und die Verwaltung von Dateien zur Verfügung. Für den Zugriff auf Dateien gibt es zwei Möglichkeiten, die im Folgenden erläutert werden.
Einbetten von Dateien in OData-Feeds
Die erste Möglichkeit ist die direkte Einbettung eines Dateiinhalts als Base64-kodierter binärer String in einen OData-Feed bzw. -Entry. Dies stellt die einfachste Methode für den Zugriff auf eine Datei dar, indem diese direkt mit dem Ergebnis einer OData-Abfrage mitgeliefert wird. Der Connector für OData kann den Dateiinhalt extrahieren und lokal als Datei speichern bzw. in ein anderes Dateifeld einer Zieldateigruppe übertragen und die Datei im Browser über das Dateiauswahl-Element anzeigen. Auch das Speichern und Aktualisieren von einzelnen Dateien über die Dateiauswahl ist möglich. Der Nachteil dieses Ansatzes ist, dass pro Dateifeld nur eine Datei geliefert werden kann. Im Fall von Mehrfachdateifeldern ist dies immer die erste Datei, wobei beim Speichern immer eine neue Datei hinzugefügt wird. Außerdem wird die Performance des Services wesentlich beeinträchtigt, da die Datei zunächst komplett in den Hauptspeicher geladen werden muss, um dort kodiert bzw. dekodiert zu werden. Daher sollte diese Methode nur für kleinere Dateien verwendet werden.
OData-Funktionen für Dateien
Eine wesentlich flexiblere und ressourcenschonendere Möglichkeit für den Zugriff auf Dateien über OData bieten die upFile-Funktionen, die in jedem Intrexx OData-Service automatisch zur Verfügung stehen. Über diese Funktionen können Dateien gespeichert und abgefragt werden. Außerdem wird volle Unterstützung für Mehrfachdateifelder in Intrexx geboten. Der einzige Nachteil dabei ist, dass die Dateikontrollen in Intrexx diesen Ansatz nicht unterstützen, weshalb in Intrexx-Webapplikationen der Download bzw. Upload von Dateien via JavaScript oder Groovy projektspezifisch realisiert werden muss. Folgende Funktionen bietet ein Intrexx OData-Service zur Verwaltung von Dateien.
- upFileList
Die Funktion upFileList lieferteine Liste mit allen Dateien eines Dateifeldes. Als Parameter werden erwartet:
recId: Der Primärschlüssel des Datensatzes mit dem Dateifeld.
fieldGuid: Die Feld-GUID des Dateifeldes.
- upFileAction
Über diese Funktionen können Operationen auf Mehrfachdateifelderausgeführt werden. Als Parameter werden erwartet::
recId: Der Primärschlüssel des Datensatzes mit dem Dateifeld.
fileId: Die ID der Datei.
fieldGuid: Die Feld-GUID des Dateifeldes.
Operation: Die auszuführende Dateioperation (entweder delete, moveUp, moveDown, moveTop, refreshMetadata, refreshOrder).
- upFileDownload
Liefert den Inhalt einer Datei als Base64 kodierten String.Als Parameter werden erwartet:
recId: Der Primärschlüssel des Datensatzes mit dem Dateifeld.
fileId: Die ID der Datei.
fieldGuid: Die Feld-GUID des Dateifeldes.
- upFileResource – upload
Ermöglicht einen Stream-basierten Upload einer Datei.Dies ist die schnellste und ressourcenschonendste Methode um Dateien an den Service zu übertragen. Als Parameter werden für die Methode uploadFile erwartet:
recId: Der Primärschlüssel des Datensatzes mit dem Dateifeld.
fieldGuid: Die Feld-GUID des Dateifeldes.
fileName: Der Dateiname.
contentType: Der Content-Type der Datei.
- upFileResource - download
Ermöglicht einen Stream-basierten Download einer Datei.Dies ist die schnellste und ressourcenschonendste Methode um auf Dateien zuzugreifen. Als Parameter werden für die Methode downloadFile erwartet:
recId: Der Primärschlüssel des Datensatzes mit dem Dateifeld.
fileId: Die ID der Datei.
fieldGuid: Die FeldGUID des Dateifeldes.
disposition (optional): Der Content-Disposition Header Typ (entweder inline oder attachment).