Scripting-Beispiel im Jitterbit App Builder - Batchdateien zum Download
Dieses Plugin unterstützt den gleichzeitigen Download mehrerer Dateien aus einem mehrzeiligen Panel oder Board-Panel. Bei der Ausführung des Business-Objekt-Ereignisses durchläuft das Plugin alle Business-Objekt- oder Tabellendatensätze, um die entsprechenden Dateien zu identifizieren und in einem einzigen Download Batch.
Wenn das Plugin ausgeführt wird, erfasst es im Wesentlichen alle Datei- und zugehörigen Dateinamenwerte und speichert sie in einer ZIP-Datei. Der Name der ZIP-Datei, die nach Abschluss des Plugins generiert wird, lautet: "MM/dd/yyyy h:mm tt".zip
", das das Datum und die Uhrzeit der Ausführung widerspiegelt und die Erweiterung .zip anhängt.
Mit dem bereitgestellten Script wird das Script auf einer Tabelle oder einem Business-Objekt unabhängig von Bindungen auf Panel- oder UI-Ebene ausgeführt. Das bedeutet, dass eine Bindung auf Panel- oder Steuerelementebene keinen Einfluss auf die zugrunde liegende Tabelle des Plugins hat. Das bedeutet auch, dass alle gewünschten Aktionen, einschließlich der Bindungen an das Panel oder die Tabelle, auf Business-Objekt-/Tabellenebene erfolgen müssen.
Anwendungsfall
Dieses Plugin ist nützlich, wenn Sie in einer App ein Panel haben, in dem Sie mehrere Dateien in einer einzigen Aktion zum Download bereitstellen möchten.
Anforderungen
Für dieses Plugin benötigen Sie zwei Tabellen oder Business-Objekte. Beide müssen die Spalten „Datei“ und „Dateiname“ enthalten. Eine davon gibt an, aus welcher Tabelle das Plugin liest, die andere gibt an, in welche Tabelle das Plugin einfügt.
Implementierungspräferenzen
Sie sollten die folgende Syntax im Script überprüfen und ändern, um die UUIDs im Plugin-In durch die tatsächlichen UUIDs der Tabellen oder Geschäftsobjekte zu ersetzen, auf die Sie in Ihrer App verweisen.
var importFileTableFilter = tableService.GetTable(Guid.Parse("{{UUID der Tabelle, die die zu komprimierenden Dateien enthält}}")).CreateFilter();
var importZipTableFilter = tableService.GetTable(Guid.Parse("{{UUID der Tabelle, in die die ZIP-Datei eingefügt werden soll}}")).CreateFilter();
Plugin-Referenzen
Notiz
Es ist möglich, das Plug-in Script zu ändern, um andere Dateinamen- und Dateiinhaltsspalten abzurufen, aber normalerweise gibt die Benennungsmethode vor, dass die Inhaltsspalte „Datei“ und der Name der Datei „Dateiname“ ist.
Spalte | Datentyp | Beschreibung |
---|---|---|
FileName | String | Spalte mit Name und Erweiterung der Datei. |
File | Binary | Spalte mit Dateiinhalt. |
Script
using System.IO;
using System.IO.Compression;
using Vinyl.Sdk.Events;
using Vinyl.Sdk.Filtering;
using System.Linq;
using Vinyl.Sdk;
using System;
var tableService = Services.GetService<ITableService>();
var eventService = Services.GetService<IEventService>();
var importFileTableFilter = tableService.GetTable(Guid.Parse("Table UUID containing files to be compressed")).CreateFilter();
EventTable readFileTable = await eventService.InvokeEventAsync(importFileTableFilter, "filter");
importFileTableFilter.Limit = 0;
EventTable importFileTable = await eventService.InvokeFilterEventAsync(importFileTableFilter);
EventRow rowFile = await eventService.InvokeNewEventAsync(importFileTable);
var importZipTableFilter = tableService.GetTable(Guid.Parse("Table UUID where ZIP file will be inserted")).CreateFilter();
importZipTableFilter.Limit = 0;
EventTable importZipTable = await eventService.InvokeFilterEventAsync(importZipTableFilter);
EventRow rowZip = await eventService.InvokeNewEventAsync(importZipTable);
byte[] fileBytes;
var compressedFileStream = new MemoryStream();
string inspectionID;
using (compressedFileStream)
{
compressedFileStream.Seek(0, SeekOrigin.Begin);
using (var zipArchive = new ZipArchive(compressedFileStream, ZipArchiveMode.Create, false))
{
foreach (EventRow row1 in (EventTable)readFileTable)
{
//Create a zip entry for each attachment
var zipEntry = zipArchive.CreateEntry(row1["FileName"].GetValueAsString());
//Get the stream of the attachment
using (var originalFileStream = new MemoryStream((byte[])row1["File"].Value))
{
using (var zipEntryStream = zipEntry.Open())
{
//Copy the attachment stream to the zip entry stream
originalFileStream.CopyTo(zipEntryStream);
}
}
}
}
fileBytes = compressedFileStream.ToArray();
}
rowZip["FileName"].Value = DateTime.Now.ToString("MM/dd/yyyy h:mm tt") + ".zip";
rowZip["File"].Value = fileBytes;
await eventService.InvokeInsertEventAsync(rowZip);