Guardar archivos en una Transaccion, GeneXus 16


Requerimiento: Crear tabla que permita guardar cualquier tipo de archivo (xlsx, docx, png, jpg, gif, etc), además de su nombre, extensión y la fecha en que se subió el archivo. 

Para darle solución a este requerimiento, me creare una transacción AuxArchivo y en el momento en que el usuario importe el archivo en el sistema me lo guardare en la tabla creada por la TRN.

Creo la TRN:


Me creo un Wep Panel llamado ImportarArchivo y arrastramos al WebForm un control extendido, en este caso FileUpload, lo podemos encontrar en la Toolbox de GeneXus 16.



Variables del Wep Panel:


Eventos del WP:
Event FileUpload1.UploadComplete
For &FileUploadData in &UploadedFiles
If &FileUploadData.File.IsEmpty()
Msg('Debe ingresar un archivo')
Else
GuardarArchivo.Call(&FileUploadData.File, &FileUploadData.Name,
&FileUploadData.Extension, &AuxArchivoId)
If &AuxArchivoId > 0
TrabajarConArchivo(&AuxArchivoId, &Mensaje)

If &Mensaje.IsEmpty()
Msg("Se proceso el archivo")
Else
Msg("ERROR###" + &Mensaje.Trim())
Endif
Else
Msg('No se puede procesar el archivo')
Endif
Endif
Endfor
Endevent

Trabajaremos con en el procedimiento llamado GuardarArchivo, me creo este procedimiento y en las Reglas coloco:
Parm(In:&AuxArchivoArchivo, In:AuxArchivoNombre, In:AuxArchivoExtension, Out:&AuxArchivoId);

Variables:

Source del procedimiento:
&AuxArchivoIndice = Int(Random()*1000000000)
New
AuxArchivoHora = ServerNow() 
AuxArchivoArchivo = &AuxArchivoArchivo
AuxArchivoExtension = &AuxArchivoExtension
AuxArchivoNombre = &AuxArchivoNombre
AuxArchivoIndice = &AuxArchivoIndice
Endnew
&AuxArchivoId = AuxArchivoId


Ahora cada vez que se cargue un archivo en el control extendido, este archivo se nos guardara en base de datos, si después se quiere trabajar con este archivo que se guardo en base, el procedimiento GuardarArchivo devuelve el id del archivo, como se puede apreciar en el evento del web panel si ese id  devuelto por el procedimiento es mayor que cero entonces se guardo el archivo correctamente, lo que queda es llamar a un procedimiento donde se haga un For each a la tabla AuxArchivo filtrando por ese id y obteniendo el archivo, luego trabajar con ese archivo a su conveniencia.



Comentarios