Saltar al contenido

¡Transforma tus conexiones en dinero para el final del año con nuestro nuevo Programa de Indicación de Clientes! Descubre más

Esta documentación es para la versión 4 y posteriores de App Builder, el nuevo nombre de Vinyl. Accede a la documentación de Vinyl aquí.

Ejemplo de scripting en Jitterbit App Builder : archivos por lotes para descargar

Este complemento permite descargar varios archivos a la vez desde un panel multifila o un panel de tablero. Al ejecutarse el evento de objeto de negocio, el complemento recorrerá todos los registros de objetos de negocio o tablas para identificar y lote los archivos necesarios para una única descarga.

Al ejecutarse el complemento, básicamente captura todos los valores de archivo y su nombre de archivo correspondiente y los guarda en un archivo zip. El nombre del archivo zip generado al finalizar el complemento será: "MM/dd/yyyy h:mm tt".zip", que refleja la fecha y hora en que se ejecutó y agrega la extensión .zip.

Con el ejemplo de secuencia de comandos proporcionado, secuencia de comandos se ejecuta en una tabla u objeto de negocio, independientemente de las vinculaciones a nivel de panel o interfaz de usuario. Esto significa que una vinculación a nivel de panel o control no afecta a la tabla subyacente del complemento. Esto también significa que todo lo que desee hacer, incluidas las vinculaciones en el panel o la tabla, debe realizarse a nivel de objeto de negocio/tabla.

Caso de uso

Este complemento es útil cuando tienes un panel en una aplicación donde quieres que varios archivos estén disponibles para su descarga con una sola acción.

Requisitos

Este complemento requiere dos tablas u objetos de negocio, y ambas deben tener las columnas "Archivo" y "Nombre de archivo". Una representa el origen de la lectura del complemento y la otra el lugar donde se inserta.

Preferencias de despliegue

Querrá revisar y modificar la siguiente sintaxis en el secuencia de comandos para sustituir los UUID en el complemento para reflejar los UUID reales de las tablas u objetos comerciales a los que hace referencia en su aplicación.

var importFileTableFilter = tableService.GetTable(Guid.Parse("{{UUID de la tabla que contiene los archivos que se van a comprimir}}")).CreateFilter();

var importZipTableFilter = tableService.GetTable(Guid.Parse("{{UUID de la tabla donde se va a insertar el archivo ZIP}}")).CreateFilter();

Referencias de complementos

Nota

Es posible modificar el secuencia de comandos del complemento para capturar otras columnas de contenido de Archivo y Nombre de archivo, pero normalmente la metodología de denominación establece que la columna de contenido sea "Archivo" y el nombre del archivo sea "Nombre de archivo".

Columna Tipo de dato Descripción
FileName String Columna que contiene el nombre y la extensión del archivo.
File Binary Columna con contenido del archivo.

Ejemplo de Secuencia de comandos

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);