Zum Inhalt springen

Scripting-Beispiel im Jitterbit App Builder - Batchdateien zum Download

Dieses Plugin unterstützt das gleichzeitige Herunterladen mehrerer Dateien von einem mehrzeiligen Panel oder Board Panel. Bei der Ausführung des Business Object-Ereignisses durchläuft das Plugin alle Business Object- oder Tabellendatensätze, um die entsprechenden Dateien zu identifizieren und zu Charge, um sie in einem einzigen Download verfügbar zu machen.

Wenn das Plugin ausgeführt wird, erfasst es im Wesentlichen alle Datei- und entsprechenden Dateinamenwerte und fügt sie in eine ZIP-Datei ein. 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 wiedergibt und die Erweiterung .zip anhängt.

Mit dem bereitgestellten Script wird das Script auf einer Tabelle oder einem Geschäftsobjekt ausgeführt, unabhängig von Bindungen auf Panel- oder UI-Ebene. Dies bedeutet, dass eine Bindung auf Panel-Ebene oder eine Steuerelementbindung die zugrunde liegende Tabelle für das Plugin nicht beeinflusst. Dies bedeutet auch, dass alles, was Sie tun möchten, einschließlich Bindungen auf dem Panel oder der Tabelle, auf der Ebene des Geschäftsobjekts/der Tabelle erfolgen muss.

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 müssen zwei Tabellen oder Business-Objekte vorhanden sein, und beide müssen die Spalten „File“ und „FileName“ haben. Eine davon stellt dar, woher das Plugin liest, und die andere stellt dar, wo das Plugin einfügt.

Implementierungspräferenzen

Sie sollten die folgende Syntax im Script überprüfen und ändern, um die UUIDs im Plug-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 zu erfassen, aber normalerweise sieht 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);